在之前我们有做tensorflow的实例的运行了,但是可能有些读者还是不知道每一层中的参数的含义,所以之后的几篇文章将从tensorflow中的每一层的参数的含义出发,来给大家介绍一下。
在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化。
conv2d(
input,
filter,
strides,
padding,
use_cudnn_on_gpu=None,
data_format=None,
name=None
)
该函数定义在tensorflow/python/ops/gen_nn_ops.py。
参数:
input: 一个4维Tensor(N,H,W,C). 类型必须是以下几种类型之一: half, float32, float64.
filter: 卷积核. 类型和input必须相同,4维tensor, [filter_height, filter_width, in_channels, out_channels],如[5,5,3,32]
strides: 在input上切片采样时,每个方向上的滑窗步长,必须和format指定的维度同阶,如[1, 2, 2, 1]
padding: 指定边缘填充类型: “SAME”, “VALID”. SAME表示卷积后图片保持不变,VALID则会缩小。
use_cudnn_on_gpu: 可选项,bool型。表示是否在GPU上用cudnn进行加速,默认为True.
data_format: 可选项,指定输入数据的格式: “NHWC”或 “NCHW”, 默认为”NHWC”。
NHWC格式指[batch, in_height, in_width, in_channels]
NCHW格式指[batch, in_channels, in_height, in_width]
name: 操作名,可选.
示例:
conv1=tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
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,
trainable=True,
name=None,
reuse=None
)
定义在tensorflow/python/layers/convolutional.py
参数:多了很多,但实际用起来,却更简单。
inputs: 输入数据,4维tensor.
filters: 卷积核个数。
kernel_size:卷积核大小,如【5,5】。如果长宽相等,也可以直接设置为一个数,如kernel_size=5
strides: 卷积过程中的滑动步长,默认为[1,1]. 也可以直接设置为一个数,如strides=2
padding: 边缘填充,’same’ 和’valid‘选其一。默认为valid
data_format: 输入数据格式,默认为channels_last ,即 (batch, height, width, channels),也可以设置为channels_first 对应 (batch, channels, height, width).
dilation_rate: 微步长卷积,这个比较复杂一些,请百度.
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型, 是否重复使用参数.
示例:
conv1=tf.layers.conv2d(
inputs=x,
filters=32,
kernel_size=5,
padding="same",
activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01))
更复杂一点:
conv1 = tf.layers.conv2d(batch_images,
filters=64,
kernel_size=7,
strides=2,
activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01)
bias_initializer=tf.Constant(0.1),
kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003),
bias_regularizer=tf.contrib.layers.l2_regularizer(0.003),
name='conv1')
最后补充一个,就是说用keras训练模型的时候,比如VGG16等,不是需要什么零填充的操作的么?对,但是在tensorflow中的话不是单独出来的一个函数,而是在卷积层的设置的时候的一个参数,相信仔细看笔记的读者在前面也看到了。