TensorFlow学习(十七):高级API之tf.layers
Posted 谢小小XH
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TensorFlow学习(十七):高级API之tf.layers相关的知识,希望对你有一定的参考价值。
之前写的代码都是基于比较底层的API了,底层的API其实是有好处的,虽然还是调API,但是至少对于原理有小小的理解才能够写出代码。而且在实现一些新的论文或者要实现一个新的点子的时候,这时候是没有API的,因此底层的API非常有存在的必要,且必须经过这一个过程。
但是对于一个非常熟悉底层原理和经过了写底层代码这个过程的人,在有些很常见的任务上,就是用高级封装好的API就行。tf.layers
就是提供这个功能的。是用tf.layers
封装好的函数,能够省去非常多自己写的代码,而且更加简单更加方便。
这里不会把所有的都罗列出来,因为用法都是差不多的。注意,使用的时候必须对于理论知识有了解。
一.概览
官方文档:Module: tf.layers
tf.layers
中分为类和函数,我们这里主要讲函数,因为类和函数的用法大同小异。
Input(…): 用于实例化一个输入 Tensor,作为神经网络的输入。
average_pooling1d(…): 一维平均池化层
average_pooling2d(…): 二维平均池化层
average_pooling3d(…): 三维平均池化层
batch_normalization(…): 批量标准化层
conv1d(…): 一维卷积层
conv2d(…): 二维卷积层
conv2d_transpose(…): 二维反卷积层
conv3d(…): 三维卷积层
conv3d_transpose(…): 三维反卷积层
dense(…): 全连接层
dropout(…): Dropout层
flatten(…): Flatten层,即把一个 Tensor 展平
max_pooling1d(…): 一维最大池化层
max_pooling2d(…): 二维最大池化层
max_pooling3d(…): 三维最大池化层
separable_conv2d(…): 二维深度可分离卷积层
看上面这个函数,可以发现,这个模块主要覆盖的区域是全连接和卷积等等的基本操作。但是这些操作已经非常足够了。我们可以根据自己的需要,在可以使用这里的API的时候使用,来简化我们的代码。
二.常见函数说明
上面讲了常见函数的概览,下面来详细讲一下常用的函数,其他的函数可以根据自己的需要查阅文档。
tf.layers.batch_normalization
此方法是批量标准化的方法,经过处理之后可以加速训练速度
tf.layers.batch_normalization(
inputs,
axis=-1,
momentum=0.99,
epsilon=0.001,
center=True,
scale=True,
beta_initializer=tf.zeros_initializer(),
gamma_initializer=tf.ones_initializer(),
moving_mean_initializer=tf.zeros_initializer(),
moving_variance_initializer=tf.ones_initializer(),
beta_regularizer=None,
gamma_regularizer=None,
beta_constraint=None,
gamma_constraint=None,
training=False,
trainable=True,
name=None,
reuse=None,
renorm=False,
renorm_clipping=None,
renorm_momentum=0.99,
fused=None,
virtual_batch_size=None,
adjustment=None
)
参数解释:
- inputs:必需,即输入数据。
- axis: 一个整形或者一个整形列表。表示将要使用BN的轴。举个例子, 要是在一个数据格式为
"channels_first"
2D卷积层的后面,那么设置setaxis=1
,否则设置axis=3
. 要是提供了一个列表,那么列表中所有的维度都会被同时被BN。Note: when using multi-axis batch norm, the beta, gamma, moving_mean, and moving_variance variables are the same rank as the input Tensor, with dimension size 1 in all reduced (non-axis) dimensions). - momentum: 滑动平均的Momentum.
- epsilon: 可选,默认 0.001,大于0的小浮点数,用于防止除0错误。
- center: 可选,默认 True,若设为True,将会将 beta 作为偏置加上去,否则忽略参数 beta
- scale: 可选,默认 True,若设为True,则会乘以gamma,否则不使用gamma。当下一层是线性的时,可以设False,因为scaling的操作将被下一层执行。
- beta_initializer: 可选,默认 zeros_initializer,即 beta 权重的初始方法。
- gamma_initializer: 可选,默认 ones_initializer,即 gamma 的初始化方法。
- moving_mean_initializer: 可选,默认 zeros_initializer,即动态均值的初始化方法。
- moving_variance_initializer: 可选,默认 ones_initializer,即动态方差的初始化方法。
- beta_regularizer: 可选,默认None,beta 的正则化方法。
- gamma_regularizer: 可选,默认None,gamma 的正则化方法。
- beta_constraint:可选,默认None,加在 beta 上的约束项。
-** gamma_constraint**: 可选,默认None,加在 gamma 上的约束项。 - renorm: 可选,默认 False,是否要用 Batch Renormalization (https://arxiv.org/abs/1702.03275).
- renorm_clipping: 可选,默认 None,是否要用 rmax、rmin、dmax 来 scalar Tensor。
- renorm_momentum: 可选,默认 0.99,用来更新动态均值和标准差的 Momentum 值。
- fused:可选,默认 None,是否使用一个更快的、融合的实现方法。
- trainable: 可选,默认 False,返回结果是 training 模式。
- virtual_batch_size:可选,默认 None,是一个 int 数字,指定一个虚拟 batch size。
- adjustment: 可选,默认 None,对标准化后的结果进行适当调整的方法。
- name: A string, the name of the layer.
tf.layers.dense
dense,即全连接网络,layers 模块提供了一个 dense() 方法来实现此操作
tf.layers.dense(
inputs,
units,
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None,
reuse=None
)
参数解释:
- inputs:必需,即需要进行操作的输入数据。
- units:必须,即神经元的数量。
- activation:可选,默认为 None,如果为 None 则是线性激活。
- use_bias:可选,默认为 True,是否使用偏置。
- kernel_initializer:可选,默认为 None,即权重的初始化方法,如果为 None,则使用默认的 Xavier 初始化方法。
- bias_initializer:可选,默认为零值初始化,即偏置的初始化方法。
- kernel_regularizer:可选,默认为 None,施加在权重上的正则项。
- bias_regularizer:可选,默认为 None,施加在偏置上的正则项。
- activity_regularizer:可选,默认为 None,施加在输出上的正则项。
- kernel_constraint,可选,默认为 None,施加在权重上的约束项。
- bias_constraint,可选,默认为 None,施加在偏置上的约束项。
- trainable:可选,默认为 True,布尔类型,如果为 True,则将变量添加到 GraphKeys.TRAINABLE_VARIABLES 中。
- name:可选,默认为 None,卷积层的名称。
- reuse:可选,默认为 None,布尔类型,如果为 True,那么如果 name 相同时,会重复利用。
tf.layers.conv2d
tf.layers.conv2d(
inputs,
filters,
kernel_size,
strides=(1, 1),
padding='valid',
data_format='channels_last',
dilation_rate=(1, 1),
activation=None,
use_bias=True,
kernel_initializer=None,
bias_initializer=tf.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
kernel_constraint=None,
bias_constraint=None,
trainable=True,
name=None,
reuse=None
)
参数说明如下:
- inputs:必需,即需要进行操作的输入数据。
- filters:必需,是一个数字,代表了输出通道的个数,即 output_channels。
- kernel_size:必需,卷积核大小,必须是一个数字(高和宽都是此数字)或者长度为 2 的列表(分别代表高、宽)。
- strides:可选,默认为 (1, 1),卷积步长,必须是一个数字(高和宽都是此数字)或者长度为 2 的列表(分别代表高、宽)。
- padding:可选,默认为 valid,padding 的模式,有 valid 和 same 两种,大小写不区分。
- data_format:可选,默认
channels_last
,分为channels_last
和channels_first
两种模式,代表了输入数据的维度类型,如果是channels_last
,那么输入数据的 shape 为(batch, height, width, channels)
,如果是channels_first
,那么输入数据的 shape 为(batch, channels, height, width)
。 - dilation_rate:可选,默认为 (1, 1),卷积的扩张率,如当扩张率为 2 时,卷积核内部就会有边距,3×3 的卷积核就会变成 5×5。
- activation:可选,默认为 None,如果为 None 则是线性激活。
- use_bias:可选,默认为 True,是否使用偏置。
- kernel_initializer:可选,默认为 None,即权重的初始化方法,如果为 None,则使用默认的 Xavier 初始化方法。
- bias_initializer:可选,默认为零值初始化,即偏置的初始化方法。
- kernel_regularizer:可选,默认为 None,施加在权重上的正则项。
- bias_regularizer:可选,默认为 None,施加在偏置上的正则项。
- activity_regularizer:可选,默认为 None,施加在输出上的正则项。
- kernel_constraint,可选,默认为 None,施加在权重上的约束项。
- bias_constraint,可选,默认为 None,施加在偏置上的约束项。
trainable:可选,默认为 True,布尔类型,如果为 True,则将变量添加到 GraphKeys.TRAINABLE_VARIABLES 中。 - name:可选,默认为 None,卷积层的名称。
- reuse:可选,默认为 None,布尔类型,如果为 True,那么如果 name 相同时,会重复利用。
tf.layers.dropout
tf.layers.dropout(
inputs,
rate=0.5,
noise_shape=None,
seed=None,
training=False,
name=None
)
参数解释:
- inputs:必须,即输入数据。
- rate:可选,默认为 0.5,即 dropout rate,如设置为 0.1,则意味着会丢弃 10% 的神经元。
- noise_shape:可选,默认为 None,int32 类型的一维 Tensor,它代表了 dropout mask 的 shape,dropout mask 会与 inputs 相乘对 inputs 做转换,例如 inputs 的 shape 为 (batch_size, timesteps, features),但我们想要 droput - - mask 在所有 timesteps 都是相同的,我们可以设置 noise_shape=[batch_size, 1, features]。
- seed:可选,默认为 None,即产生随机熟的种子值。
- training:可选,默认为 False,布尔类型,即代表了是否标志位 training 模式。
- name:可选,默认为 None,dropout 层的名称。
返回: 经过 dropout 层之后的 Tensor。
tf.pad
tf.pad(
tensor,
paddings,
mode='CONSTANT',
name=None,
constant_values=0
)
三.例子
这里我们使用tf.layers
提供的API来实现简单的CNN分类MNIST任务。
例子的代码地址为:LearningTensorFlow/23.tf.layers/
一个项目分为单个部分
以上是关于TensorFlow学习(十七):高级API之tf.layers的主要内容,如果未能解决你的问题,请参考以下文章
TensorFlow2.0教程-Keras 快速入门:用于构建和训练深度学习模型的高阶 API