TensorFlow中层API:Layers

TensorFlow中层API: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里面有很多封装好的类和函数。

类:

密集连接类

Dropout类

卷积类

BN类

解卷积类(卷积转置)

平均池化类

  • AveragePooling1D
  • AveragePooling2D (e.g. images)
  • AveragePooling3D (e.g. volumes)

最大池化类

Flatten类

深度可分离卷积

  • SeparableConv1D 一维深度可分离卷积层
  • SeparableConv2D 两维深度可分离卷积层

其他类

函数:

这里的函数其实是基于上面的类实现的

类详解

1.Input

tf.layers.Input用于输入数据的类,有点类似于tf.plcaeholder,相当于一个占位符作用

#用法
Input = tf.layers.Input(dtype=tf.float32, shape=[None, 224, 224, 3])
#Input这个类在1.8里面去除掉了。只能用tf.placeholder了
#所以在新版本中使用tf.placeholder是最好的选择

2.Dense

Dense,即全连接网络。

#用法
Input = tf.placeholder(tf.float32,[None,784])
x = tf.layers.Dense(1000, activation=tf.nn.relu, name='fc')(Input)

3.Dropout

Dropout:在训练过程中,对于神经网络units,按照一定的概率将其暂时从网络丢弃,可以用来防止过拟合

#用法
tf.layers.Dropout(rate=0.5, #rate=0.1 will drop out 10% of input units
                  noise_shape=None, #这个主要用于feature maps的上多个feature map dropout掉相同的unit,如果不懂,请help,里面有详细解释
                  seed=None,
                  name=None)
Input = tf.placeholder(tf.float32,[None,784])
x = tf.layers.Dropout(rate=0.4, noise_shape=[None,224,224,1])(Input, training=True) # 三个channel dropout掉相同位置的unit
#training设置为True,dropout起作用,设置为Flase,dropout将不起作用。
x = tf.layers.Dropout(rate=0.4)(Input, training=True)

4.Conv2D

Conv2D为二维卷积,另外还有一维和三维卷积。

'''Conv2D参数'''
tf.layers.Conv2D(filters,
                 kernel_size,
                 strides=(1,1),
                 padding='valid',
                 activation=None,
                 use_bias=True,
                 kernel_regularizer=None, #施加在权重上的正则项
                 bias_regularizer=None,
                 activity_regularizer=None,
                 kernel_constraint=None, #施加在权重上的约束项
                 bias_constraint=None, #施加在偏置上的约束项
                 trainable=True, # True时,则将变量添加到 GraphKeys.TRAINABLE_VARIABLES(即tf.trainable_variables())
                 name=None)
#Conv2D的例子
Input = tf.placeholder(tf.float32,[None,224,224,3])
x = tf.layers.Conv2D(16, [3,3], strides=(1,1), padding='valid', activation=tf.nn.relu, name='conv')

5.AveragePooling2D

2维平均池化

6.MaxPooling2D

MaxPooling2D为2维最大池化

7.Flatten

Flatten对Tensor进行展平操作。

inputs = tf.placeholder(tf.float32,[None, 7, 7, 16])
x = tf.layers.Flatten(name='flatten')(inputs)

8.BatchNormalization

BatchNormalization批量标准化,经过BN之后,可以加速训练速度

inputs = tf.placeholder(tf.float32, [None,56,56,64])
x = tf.layers.BatchNormalization()(inputs, training=True)

#使用了BN后,要做如下操作
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)
with tf.control_dependencies(update_ops):
  train_op = tf.train.AdamOptimizer().minimize(cost)

9.Conv2DTranspose

Conv2DTranspose为二维反卷积,顾明思义即卷积的反向操作,即输入卷积的结果,得到卷积前的结果。

'''Conv2DTranspose参数'''
tf.layers.Conv2DTranspose(filters, 
                          kernel_size, 
                          strides=(1, 1), 
                          padding='valid', 
                          activation=None, 
                          use_bias=True, 
                          kernel_initializer=None, 
                          kernel_regularizer=None, 
                          bias_regularizer=None, 
                          activity_regularizer=None, 
                          kernel_constraint=None, 
                          bias_constraint=None, 
                          trainable=True, 
                          name=None)
Input = tf.placeholder(tf.float32,[None,112,112,16])
x = tf.layers.Conv2DTranspose(filters=3, 
                              kernel_size=2, 
                              strides=2)(Input)

10.SeparableConv2D

SeparableConv2D performs a depthwise convolution that acts separately on
channels, followed by a pointwise convolution that mixes channels.
假设有一个3x3的卷积层,其输入通道为16,输出通道为32。计算是这样完成的:32个3x3卷积核会遍历16个输入通道的数据,从而产生16x32=512个特征图谱。然后按卷积核进行叠加,将512个特征图谱融合得到32个特征图谱。

同样,输入通道为16,输出通道为32,卷积核为3x3。深度可分离卷积的计算如下:用1个3x3卷积核遍历16个输入通道,得到16个特征图谱;然后用32个1x1卷积核遍历这16个特征图谱,得到32个特征图谱。

上面的深度乘数为1,这也是这类网络层当前的通用参数。

这么做是为了对空间信息和深度信息进行去耦。从Xception模型的效果可以看出,这种方法是比较有效的。由于能够有效利用参数,因此深度可分离卷积也可以用于移动设备中。

11.Layer

函数详解

Layers里的函数其实是上面的类实例化,得到的,所以这里就不一一介绍了。不懂请help( )。

1.dense

2.dropout

3.conv2d

4.average_pooling2d

5.max_pooling2d

6.flatten

7.batch_normalization

8.conv2d_transpose

9.separable_conv2d

[1]: https://cuiqingcai.com/5715.html

猜你喜欢

转载自blog.csdn.net/u014061630/article/details/80377089