【Tensorflow 大马哈鱼】tf.layers 之 dense层、dropout层、batch_normalization层、pad层

之前写的代码都是基于比较底层的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(…): 二维深度可分离卷积层

 二.常见函数说明

tf.layers.dense 

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,
    trainable=True,
    name=None,
    reuse=None
)

注意:

有激活函数,也有偏置量

  • inputs: 输入数据,2维tensor. 
  • units: 该层的神经单元结点数。 
  • activation: 激活函数. 
  • use_bias: Boolean型,是否使用偏置项. 
  • kernel_initializer: 卷积核的初始化器. 
  • bias_initializer: 偏置项的初始化器,默认初始化为0. 
  • kernel_regularizer: 卷积核化的正则化,可选. 
  • bias_regularizer: 偏置项的正则化,可选. 
  • activity_regularizer: 输出的正则化函数. 
  • trainable: Boolean型,表明该层的参数是否参与训练。如果为真则变量加入到图集合中 GraphKeys.TRAINABLE_VARIABLES (see tf.Variable). 
  • name: 层的名字. 
  • reuse: Boolean型, 是否重复使用参数.

全连接层执行操作outputs=activation(inputs.kernel+bias)outputs=activation(inputs.kernel+bias)如果执行结果不想进行激活操作,则设置activation=None

#全连接层
dense1 = tf.layers.dense(inputs=pool3, units=1024, activation=tf.nn.relu)
dense2= tf.layers.dense(inputs=dense1, units=512, activation=tf.nn.relu)
logits= tf.layers.dense(inputs=dense2, units=10, activation=None)
也可以对全连接层的参数进行正则化约束:
dense1 = tf.layers.dense(inputs=pool3, units=1024, activation=tf.nn.relu, 
            kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003))

 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.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卷积层的后面,那么设置set axis=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.pad 

tf.pad(
    tensor,
    paddings,
    mode='CONSTANT',
    name=None,
    constant_values=0
)

这里我们使用tf.layers提供的API来实现简单的CNN分类MNIST任务。
例子的代码地址为:LearningTensorFlow/23.tf.layers/

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值