- keras中的后端backend及其相关函数
- 一、K.prod
- 二、K.cast
- 三、K.expand_dims
- 三、K.squeeze
- 四、batch_gather
- 五、variable
- 六、placeholder
- 七、shape
- 八、int_shape
- 九、ndim
- 十、dtype
- 十一、eval
- 十二、zeros / ones / eye / zeros_like / ones_like
- 十三、dot
- 十四、batch_dot
- 十五、transpose
- 十六、max / min / sum / prod
- 十七、cumsum / cumprod
- 十八、reshape
- 十九、permute_dimensions
- 二十、temporal_padding
- 二十一、one-hot
- 二十二、relu / elu / softmax / … / categorical_crossentropy / …
- 参考
layout: post
title: keras后端引擎K及其方法
subtitle: 后端backend及其对应的方法
date: 2019-12-02
author: NSX
header-img: img/post-bg-ios9-web.jpg
catalog: true
tags:
- 技术
- Keras
keras中的后端backend及其相关函数
Keras 是一个模型级的库,提供了快速构建深度学习网络的模块。Keras 并不处理如张量乘法、卷积等底层操作。这些操作依赖于某种特定的、优化良好的张量操作库。Keras 依赖于处理张量的库就称为“后端引擎”。Keras 提供了多种后端引擎Theano/Tensorflow,并将其函数统一封装,使得用户可以以同一个接口调用不同后端引擎的函数。
一、K.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 npx=np.array([[2,4,6],[2,4,6]])scaling = np.prod(x, axis=1, keepdims=False)print(x)print(scaling)
二、K.cast
keras.backend.cast(x, 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>
三、K.expand_dims
K.expand_dims(x, dim=-1)
功能:拓展维度,在下标为
dim的轴上增加一维
三、K.squeeze
K.squeeze(x, axis)
功能:将下标为
axis的一维从张量中移除
四、batch_gather
K.tf.batch_gather(params, indices)
功能
- 按index索引选择序列中的值
- 支持对张量的批量索引
主要参数:
- params:被索引的张量
- indices:一维索引张量
返回值
- 通过indices获取params下标的张量。
例如:
import tensorflow as tfseq = [1,2,3]idxs = [2]idxs = K.cast(idxs, 'int32')a = K.tf.batch_gather(seq, idxs)with tf.Session() as sess:print(a.eval())
五、variable
K.variable(value, dtype='float32', name=None)
功能:实例化一个张量,返回之
参数:
- value:用来初始化张量的值
- dtype:张量数据类型
- name:张量的名字(可选)
示例:
>>> from keras import backend as K>>> val = np.array([[1, 2], [3, 4]])>>> kvar = K.variable(value=val, dtype='float64', name='example_var')>>> K.dtype(kvar)'float64'>>> print(kvar)example_var>>> kvar.eval()array([[ 1., 2.],[ 3., 4.]])
六、placeholder
K.placeholder(shape=None, ndim=None, dtype='float32', name=None)
功能:实例化一个占位符,返回之
参数:
- shape:占位符的shape(整数tuple,可能包含None)
- ndim: 占位符张量的阶数,要初始化一个占位符,至少指定
shape和ndim之一,如果都指定则使用shape- dtype: 占位符数据类型
- name: 占位符名称(可选)
示例:
>>> from keras import backend as K>>> input_ph = K.placeholder(shape=(2, 4, 5))>>> input_ph._keras_shape(2, 4, 5)>>> input_ph<tf.Tensor 'Placeholder_4:0' shape=(2, 4, 5) dtype=float32>
七、shape
K.shape(x)
功能:返回一个张量的符号shape,符号shape的意思是返回值本身也是一个tensor,
示例:
>>> from keras import backend as K>>> tf_session = K.get_session()>>> val = np.array([[1, 2], [3, 4]])>>> kvar = K.variable(value=val)>>> input = keras.backend.placeholder(shape=(2, 4, 5))>>> K.shape(kvar)<tf.Tensor 'Shape_8:0' shape=(2,) dtype=int32>>>> K.shape(input)<tf.Tensor 'Shape_9:0' shape=(3,) dtype=int32>__To get integer shape (Instead, you can use K.int_shape(x))__>>> K.shape(kvar).eval(session=tf_session)array([2, 2], dtype=int32)>>> K.shape(input).eval(session=tf_session)array([2, 4, 5], dtype=int32)
八、int_shape
K.int_shape(x)
功能:以整数Tuple或None的形式返回张量shape
示例:
>>> from keras import backend as K>>> input = K.placeholder(shape=(2, 4, 5))>>> K.int_shape(input)(2, 4, 5)>>> val = np.array([[1, 2], [3, 4]])>>> kvar = K.variable(value=val)>>> K.int_shape(kvar)(2, 2)
九、ndim
K.ndim(x)
功能:返回张量的阶数,为整数
示例:
>>> from keras import backend as K>>> input = K.placeholder(shape=(2, 4, 5))>>> val = np.array([[1, 2], [3, 4]])>>> kvar = K.variable(value=val)>>> K.ndim(input)3>>> K.ndim(kvar)2
十、dtype
K.dtype(x)
功能:返回张量的数据类型,为字符串
示例:
>>> from keras import backend as K>>> K.dtype(K.placeholder(shape=(2,4,5)))'float32'>>> K.dtype(K.placeholder(shape=(2,4,5), dtype='float32'))'float32'>>> K.dtype(K.placeholder(shape=(2,4,5), dtype='float64'))'float64'__Keras var
十一、eval
K.eval(x)
功能:求得张量的值,返回一个 Numpy array
示例:
>>> from keras import backend as K>>> kvar = K.variable(np.array([[1, 2], [3, 4]]), dtype='float32')>>> K.eval(kvar)array([[ 1., 2.],[ 3., 4.]], dtype=float32)
十二、zeros / ones / eye / zeros_like / ones_like
K.zeros(shape, dtype='float32', name=None)K.ones(shape, dtype='float32', name=None)eye(size, dtype='float32', name=None)zeros_like(x, name=None)ones_like(x, name=None)
功能: 生成一个全0张量 生成一个全1张量 生成一个单位矩阵
示例:
>>> from keras import backend as K>>> kvar = K.zeros((3,4))>>> kvar = K.ones((3,4))>>> kvar = K.eye(3)>>> K.eval(kvar)>>> kvar_zeros = K.zeros_like(kvar)
十三、dot
K.dot(x, y)
功能:求两个张量的乘积
示例:
>>> x = K.placeholder(shape=(2, 3))>>> y = K.placeholder(shape=(3, 4))>>> xy = K.dot(x, y)>>> xy<tf.Tensor 'MatMul_9:0' shape=(2, 4) dtype=float32>
十四、batch_dot
K.batch_dot(x, y, axes=None)
功能:按批进行张量乘法
- 该函数用于计算x和y的点积,其中x和y都是成batch出现的数据。即它的数据shape形如
(batch_size,:)。- batch_dot将产生比输入张量维度低的张量,如果张量的维度被减至1,则通过
expand_dims保证其维度至少为2参数:
- x,y:阶数大于等于2的张量,在tensorflow下,只支持大于等于3阶的张量
- axes:目标结果的维度,为整数或整数列表,
axes[0]和axes[1]应相同例如
- 假设
x = [[1, 2],[3,4]],y = [[5, 6],[7, 8]],则batch_dot(x, y, axes=1) = [[17, 53]],即x.dot(y.T)的主对角元素,此过程中我们没有计算过反对角元素的值
示例:
>>> x_batch = K.ones(shape=(32, 20, 1))>>> y_batch = K.ones(shape=(32, 30, 20))>>> xy_batch_dot = K.batch_dot(x_batch, y_batch, axes=[1, 2])>>> K.int_shape(xy_batch_dot)(32, 1, 30)
十五、transpose
K.transpose(x)
功能:张量转置,返回转置后的tensor
示例:
>>> var = K.variable([[1, 2, 3], [4, 5, 6]])>>> K.eval(var)array([[ 1., 2., 3.],[ 4., 5., 6.]], dtype=float32)>>> var_transposed = K.transpose(var)>>> K.eval(var_transposed)array([[ 1., 4.],[ 2., 5.],[ 3., 6.]], dtype=float32)
十六、max / min / sum / prod
功能:
- 求张量中的最大值
- 求张量中的最小值
- 在给定轴上计算张量中元素之和
- 在给定轴上计算张量中元素之积
十七、cumsum / cumprod
K.cumsum(x, axis=0)
cumprod(x, axis=0)
功能:
- 在给定轴上求张量的累积和
- 在给定轴上求张量的累积积
十八、reshape
K.reshape(x, shape)
功能:将张量的shape变换为指定shape
十九、permute_dimensions
K.permute_dimensions(x, pattern)
功能:按照给定的模式重排一个张量的轴
参数:
- pattern:代表维度下标的tuple如
(0, 2, 1)
二十、temporal_padding
K.temporal_padding(x, padding=1)
功能:向3D张量中间的那个维度的左右两端填充
padding个0值
二十一、one-hot
K.one_hot(indices, nb_classes)
功能:输入为n维的整数张量,形如(batch_size, dim1, dim2, … dim(n-1)),输出为(n+1)维的one-hot编码,形如(batch_size, dim1, dim2, … dim(n-1), nb_classes)
二十二、relu / elu / softmax / … / categorical_crossentropy / …
K.
功能:
示例:
