浅谈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获取单个程序CPU使用情况趋势图
Mar 10 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
python实现对excel进行数据剔除操作实例
Dec 07 Python
python 将列表中的字符串连接成一个长路径的方法
Oct 23 Python
Python读取csv文件分隔符设置方法
Jan 14 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
Pandas读写CSV文件的方法示例
Mar 27 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
快速查找Python安装路径方法
Feb 06 Python
Python3实现打印任意宽度的菱形代码
Apr 12 Python
Django 用户登陆访问限制实例 @login_required
May 13 Python
class类在python中获取金融数据的实例方法
Dec 10 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合并数组array_merge函数运算符加号与的区别
2008/10/31 PHP
php不用内置函数对数组排序的两个算法代码
2010/02/08 PHP
基于PHP的简单采集数据入库程序【续篇】
2014/07/30 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
2016/11/10 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
jQuery中的select操作详解
2016/11/29 Javascript
简单谈谈require模块化jquery和angular的问题
2017/06/23 jQuery
详解weex默认webpack.config.js改造
2018/01/08 Javascript
vue.js中$set与数组更新方法
2018/03/08 Javascript
手写简单的jQuery雪花飘落效果实例
2018/04/22 jQuery
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
Python中一些自然语言工具的使用的入门教程
2015/04/13 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python3中bytes类型转换为str类型
2018/09/27 Python
windows下安装Python虚拟环境virtualenvwrapper-win
2019/06/14 Python
Python Collatz序列实现过程解析
2019/10/12 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
python删除某个目录文件夹的方法
2020/05/26 Python
墨西哥网上购物:Linio墨西哥
2016/10/20 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
Overload和Override的区别
2012/09/02 面试题
高级工程师英文求职信
2014/03/19 职场文书
开工仪式主持词
2014/03/20 职场文书
双语教学实施方案
2014/03/23 职场文书
机械专业技术员求职信
2014/06/14 职场文书
计划生育证明格式及范本
2014/10/09 职场文书
Python使用pandas导入csv文件内容的示例代码
2022/12/24 Python