当前位置:   article > 正文

TensorFlow之神经网络layers模块详解_tensorflow layers

tensorflow layers
tf.nn,tf.layers, tf.contrib概述:

我们在使用tensorflow时,会发现tf.nn,tf.layers, tf.contrib模块有很多功能是重复的,尤其是卷积操作,在使用的时候,我们可以根据需要现在不同的模块。但有些时候可以一起混用。 下面是对三个模块的简述: (1)tf.nn :提供神经网络相关操作的支持,包括卷积操作(conv)、池化操作(pooling)、归一化、loss、分类操作、embedding、RNN、Evaluation。 (2)tf.layers:主要提供的高层的神经网络,主要和卷积相关的,个人感觉是对tf.nn的进一步封装,tf.nn会更底层一些。 (3)tf.contrib:tf.contrib.layers提供够将计算图中的 网络层、正则化、摘要操作、是构建计算图的高级操作,但是tf.contrib包含不稳定和实验代码,有可能以后API会改变。
以上三个模块的封装程度是逐个递进的。

tf.layers模块介绍:

Layers模块属于TensorFlow的一个稳定的中层API,其源码位于tensorflow/python/layers/layers.py,其官方文档地址为https://www.tensorflow.org/api_docs/python/tf/layers ref1

tf.layers这个中层API基本上可以算是tf.nn模块的抽象,可以极大地加快模型的构建速度。

tf.layers里面有很多封装好的类和函数。

tf.layers模块提供的API:
  • 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(…): 二维深度可分离卷积层
1. input

tf.layers.Input() 这个方法是用于输入数据的方法,其实类似于 tf.placeholder,相当于一个占位符的作用,当然也可以通过传入 tensor 参数来进行赋值。Input这个类在1.8里面去除掉了。只能用tf.placeholder了, 所以在新版本中使用tf.placeholder是最好的选择

  • 用法
Input(
    shape=None,
    batch_size=None,
    name=None,
    dtype=tf.float32,
    sparse=False,
    tensor=None
)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 参数说明如下:
    shape:可选,默认 None,是一个数字组成的元组或列表,但是这个 shape 比较特殊,它不包含 batch_size,比如传入的 shape 为 [32],那么它会将 shape 转化为 [?, 32],这里一定需要注意。
    batch_size:可选,默认 None,代表输入数据的 batch size,可以是数字或者 None。
    name:可选,默认 None,输入层的名称。
    dtype:可选,默认 tf.float32,元素的类型。
    sparse:可选,默认 False,指定是否以稀疏矩阵的形式来创建 placeholder。
    tensor:可选,默认 None,如果指定,那么创建的内容便不再是一个 placeholder,会用此 Tensor 初始化。
    返回值:
    返回一个包含历史 Meta Data 的 Tensor。
  • 实例:
x = tf.layers.Input(shape=[32])
print(x)
y = tf.layers.dense(x, 16, activation=tf.nn.softmax)
print(y)
  • 1
  • 2
  • 3
  • 4

首先我们用 Input() 方法初始化了一个 placeholder,这时我们没有传入 tensor 参数,然后调用了 dense() 方法构建了一个全连接网络,激活函数使用 softmax,然后将二者输出,结果如下:

Tensor("input_layer_1:0", shape=(?, 32), dtype=float32)
Tensor("dense/Softmax:0", shape=(?, 16), dtype=float32)
  • 1
  • 2

这时我们发现,shape 它给我们做了转化,本来是 [32],结果它给转化成了 [?, 32],即第一维代表 batch_size,所以我们需要注意,在调用此方法的时候不需要去关心 batch_size 这一维。

如果我们在初始化的时候传入一个已有 Tensor,例如:

data = tf.constant([1, 2, 3])
x = tf.layers.Input(tensor=data)
print(x)
  • 1
  • 2
  • 3

结果如下:

Tensor("Const:0", shape=(3,), dtype=int32)
  • 1

可以看到它可以自动计算出其 shape 和 dtype。

2. batch_normalization

此方法是批量标准化的方法,经过处理之后可以加速训练速度,其定义在 tensorflow/python/layers/normalization.py,论文可以参考:http://arxiv.org/abs/1502.03167“Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift”。

  • 用法
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=
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/430118
推荐阅读
相关标签
  

闽ICP备14008679号