浅谈keras中的后端backend及其相关函数(K.prod,K.cast)


Posted in Python onJune 29, 2020

一、K.prod

prod

keras.backend.prod(x, axis=None, keepdims=False)

功能:在某一指定轴,计算张量中的值的乘积。

参数

x: 张量或变量。

axis: 一个整数需要计算乘积的轴。

keepdims: 布尔值,是否保留原尺寸。 如果 keepdims 为 False,则张量的秩减 1。 如果 keepdims 为 True,缩小的维度保留为长度 1。

返回

x 的元素的乘积的张量。

Numpy 实现

def prod(x, axis=None, keepdims=False):
  if isinstance(axis, list):
    axis = tuple(axis)
  return np.prod(x, axis=axis, keepdims=keepdims)

具体例子:

import numpy as np
x=np.array([[2,4,6],[2,4,6]])
 
scaling = np.prod(x, axis=1, keepdims=False)
print(x)
print(scaling)

【运行结果】

浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

二、K.cast

cast

keras.backend.cast(x, dtype)

功能:将张量转换到不同的 dtype 并返回。

你可以转换一个 Keras 变量,但它仍然返回一个 Keras 张量。

参数

x: Keras 张量(或变量)。

dtype: 字符串, ('float16', 'float32' 或 'float64')。

返回

Keras 张量,类型为 dtype。

例子

>>> from keras import backend as K
>>> input = K.placeholder((2, 3), dtype='float32')
>>> input
<tf.Tensor 'Placeholder_2:0' shape=(2, 3) dtype=float32>
# It doesn't work in-place as below.
>>> K.cast(input, dtype='float16')
<tf.Tensor 'Cast_1:0' shape=(2, 3) dtype=float16>
>>> input
<tf.Tensor 'Placeholder_2:0' shape=(2, 3) dtype=float32>
# you need to assign it.
>>> input = K.cast(input, dtype='float16')
>>> input
<tf.Tensor 'Cast_2:0' shape=(2, 3) dtype=float16>

补充知识:keras源码之backend库目录

backend库目录

先看common.py

一上来是一些说明

# the type of float to use throughout the session. 整个模块都是用浮点型数据
_FLOATX = 'float32' # 数据类型为32位浮点型
_EPSILON = 1e-7 # 很小的常数
_IMAGE_DATA_FORMAT = 'channels_last' # 图像数据格式 最后显示通道,tensorflow格式

接下来看里面的一些函数

def epsilon():
  """Returns the value of the fuzz factor used in numeric expressions. 
    返回数值表达式中使用的模糊因子的值
    
  # Returns
    A float.
  # Example
  ```python
    >>> keras.backend.epsilon()
    1e-07
  ```
  """
  return _EPSILON

该函数定义了一个常量,值为1e-07,在终端可以直接输出,如下:

浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

def set_epsilon(e):
  """Sets the value of the fuzz factor used in numeric expressions.
  # Arguments
    e: float. New value of epsilon.
  # Example
  ```python
    >>> from keras import backend as K
    >>> K.epsilon()
    1e-07
    >>> K.set_epsilon(1e-05)
    >>> K.epsilon()
    1e-05
  ```
  """
  global _EPSILON
  _EPSILON = e

该函数允许自定义值

浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

以string的形式返回默认的浮点类型:

def floatx():
  """Returns the default float type, as a string.
  (e.g. 'float16', 'float32', 'float64').
  # Returns
    String, the current default float type.
  # Example
  ```python
    >>> keras.backend.floatx()
    'float32'
  ```
  """
  return _FLOATX

浅谈keras中的后端backend及其相关函数(K.prod,K.cast)

把numpy数组投影到默认的浮点类型:

def cast_to_floatx(x):
  """Cast a Numpy array to the default Keras float type.把numpy数组投影到默认的浮点类型
  # Arguments
    x: Numpy array.
  # Returns
    The same Numpy array, cast to its new type.
  # Example
  ```python
    >>> from keras import backend as K
    >>> K.floatx()
    'float32'
    >>> arr = numpy.array([1.0, 2.0], dtype='float64')
    >>> arr.dtype
    dtype('float64')
    >>> new_arr = K.cast_to_floatx(arr)
    >>> new_arr
    array([ 1., 2.], dtype=float32)
    >>> new_arr.dtype
    dtype('float32')
  ```
  """
  return np.asarray(x, dtype=_FLOATX)

默认数据格式、自定义数据格式和检查数据格式:

def image_data_format():
  """Returns the default image data format convention ('channels_first' or 'channels_last').
  # Returns
    A string, either `'channels_first'` or `'channels_last'`
  # Example
  ```python
    >>> keras.backend.image_data_format()
    'channels_first'
  ```
  """
  return _IMAGE_DATA_FORMAT
 
 
def set_image_data_format(data_format):
  """Sets the value of the data format convention.
  # Arguments
    data_format: string. `'channels_first'` or `'channels_last'`.
  # Example
  ```python
    >>> from keras import backend as K
    >>> K.image_data_format()
    'channels_first'
    >>> K.set_image_data_format('channels_last')
    >>> K.image_data_format()
    'channels_last'
  ```
  """
  global _IMAGE_DATA_FORMAT
  if data_format not in {'channels_last', 'channels_first'}:
    raise ValueError('Unknown data_format:', data_format)
  _IMAGE_DATA_FORMAT = str(data_format)
 
def normalize_data_format(value):
  """Checks that the value correspond to a valid data format.
  # Arguments
    value: String or None. `'channels_first'` or `'channels_last'`.
  # Returns
    A string, either `'channels_first'` or `'channels_last'`
  # Example
  ```python
    >>> from keras import backend as K
    >>> K.normalize_data_format(None)
    'channels_first'
    >>> K.normalize_data_format('channels_last')
    'channels_last'
  ```
  # Raises
    ValueError: if `value` or the global `data_format` invalid.
  """
  if value is None:
    value = image_data_format()
  data_format = value.lower()
  if data_format not in {'channels_first', 'channels_last'}:
    raise ValueError('The `data_format` argument must be one of '
             '"channels_first", "channels_last". Received: ' +
             str(value))
  return data_format

剩余的关于维度顺序和数据格式的方法:

def set_image_dim_ordering(dim_ordering):
  """Legacy setter for `image_data_format`.
  # Arguments
    dim_ordering: string. `tf` or `th`.
  # Example
  ```python
    >>> from keras import backend as K
    >>> K.image_data_format()
    'channels_first'
    >>> K.set_image_data_format('channels_last')
    >>> K.image_data_format()
    'channels_last'
  ```
  # Raises
    ValueError: if `dim_ordering` is invalid.
  """
  global _IMAGE_DATA_FORMAT
  if dim_ordering not in {'tf', 'th'}:
    raise ValueError('Unknown dim_ordering:', dim_ordering)
  if dim_ordering == 'th':
    data_format = 'channels_first'
  else:
    data_format = 'channels_last'
  _IMAGE_DATA_FORMAT = data_format
 
 
def image_dim_ordering():
  """Legacy getter for `image_data_format`.
  # Returns
    string, one of `'th'`, `'tf'`
  """
  if _IMAGE_DATA_FORMAT == 'channels_first':
    return 'th'
  else:
    return 'tf'

在common.py之后有三个backend,分别是cntk,tensorflow和theano。

__init__.py

首先从common.py中引入了所有需要的东西

from .common import epsilon
from .common import floatx
from .common import set_epsilon
from .common import set_floatx
from .common import cast_to_floatx
from .common import image_data_format
from .common import set_image_data_format
from .common import normalize_data_format

接下来是检查环境变量与配置文件,设置backend和format,默认的backend是tensorflow。

# Set Keras base dir path given KERAS_HOME env variable, if applicable.
# Otherwise either ~/.keras or /tmp.
if 'KERAS_HOME' in os.environ: # 环境变量
  _keras_dir = os.environ.get('KERAS_HOME')
else:
  _keras_base_dir = os.path.expanduser('~')
  if not os.access(_keras_base_dir, os.W_OK):
    _keras_base_dir = '/tmp'
  _keras_dir = os.path.join(_keras_base_dir, '.keras')
 
# Default backend: TensorFlow. 默认后台是TensorFlow
_BACKEND = 'tensorflow'
 
# Attempt to read Keras config file.读取keras配置文件
_config_path = os.path.expanduser(os.path.join(_keras_dir, 'keras.json'))
if os.path.exists(_config_path):
  try:
    with open(_config_path) as f:
      _config = json.load(f)
  except ValueError:
    _config = {}
  _floatx = _config.get('floatx', floatx())
  assert _floatx in {'float16', 'float32', 'float64'}
  _epsilon = _config.get('epsilon', epsilon())
  assert isinstance(_epsilon, float)
  _backend = _config.get('backend', _BACKEND)
  _image_data_format = _config.get('image_data_format',
                   image_data_format())
  assert _image_data_format in {'channels_last', 'channels_first'}
 
  set_floatx(_floatx)
  set_epsilon(_epsilon)
  set_image_data_format(_image_data_format)
  _BACKEND = _backend

之后的tensorflow_backend.py文件是一些tensorflow中的函数说明,详细内容请参考tensorflow有关资料。

以上这篇浅谈keras中的后端backend及其相关函数(K.prod,K.cast)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中assert用法实例分析
Apr 30 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
Python中的迭代器与生成器高级用法解析
Jun 28 Python
python 把数据 json格式输出的实例代码
Oct 31 Python
Python计算两个日期相差天数的方法示例
May 23 Python
python中正则表达式的使用方法
Feb 25 Python
python计算两个数的百分比方法
Jun 29 Python
Python线程下使用锁的技巧分享
Sep 13 Python
在Python中定义一个常量的方法
Nov 10 Python
Django之创建引擎索引报错及解决详解
Jul 17 Python
Django 实现外键去除自动添加的后缀‘_id’
Nov 15 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
如何使用python记录室友的抖音在线时间
Jun 29 #Python
Python sublime安装及配置过程详解
Jun 29 #Python
keras K.function获取某层的输出操作
Jun 29 #Python
Python pytesseract验证码识别库用法解析
Jun 29 #Python
用Python开发app后端有优势吗
Jun 29 #Python
在keras里实现自定义上采样层
Jun 28 #Python
Python如何对XML 解析
Jun 28 #Python
You might like
PHP程序员基本要求和必备技能
2014/05/09 PHP
PHP中array_slice函数用法实例详解
2014/11/25 PHP
php+ajax实时刷新简单实例
2015/02/25 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jQuery 阴影插件代码分享
2012/01/09 Javascript
js 实现菜单左右滚动显示示例介绍
2013/11/21 Javascript
jquery实现可拖拽弹出层特效
2015/01/04 Javascript
JS实现文字向下滚动完整实例
2015/02/06 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
vue.js指令v-for使用及索引获取
2016/11/03 Javascript
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
从零学python系列之新版本导入httplib模块报ImportError解决方案
2014/05/23 Python
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
python 链接和操作 memcache方法
2017/03/04 Python
简述Python2与Python3的不同点
2018/01/21 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
解决python中遇到字典里key值为None的情况,取不出来的问题
2018/10/17 Python
Dockers美国官方网站:卡其裤、男士服装、鞋及配件
2016/11/22 全球购物
中国跨境电子商务网站:NewFrog
2018/03/10 全球购物
泰国健康和美容服务预订网站:GoWabi
2019/06/03 全球购物
企业车辆管理制度
2014/01/24 职场文书
集体备课反思
2014/02/12 职场文书
医学生求职自荐书
2014/06/12 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
镇党委书记群众路线整改措施思想汇报
2014/10/13 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
员工表扬信怎么写
2015/05/05 职场文书