tf.layers使用之tf.layers.conv2d(...)

使用tf.layers.conv2d()进行卷积操作

inputs1 = tf.placeholder(tf.float32,[None,32,32,3])
output1 = tf.layers.conv2d(inputs1,64,5)
output2 = tf.layers.conv2d(inputs1,64,5,padding='same')
output3 = tf.layers.conv2d(inputs1,64,5,strides=(2,2),padding='same')

print(output1.get_shape())
print(output2.get_shape())
print(output3.get_shape())

输出:
(?, 28, 28, 64)
(?, 32, 32, 64)
(?, 16, 16, 64)
参数:
def 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=init_ops.zeros_initializer(),
kernel_regularizer=None,
bias_regularizer=None,
activity_regularizer=None,
trainable=True,
name=None,
reuse=None):
参数解释:
(1) input:指需要做卷积的输入图像,要求是一个Tensor,具有[batch,in_height,in_width,in_channels]这样的图像,具体含义是“训练时一个batch的图片数量,图片的高度,图片的宽度,图像通道数”,注意:这是一个四维的Tensor,要求类型为float32和float64之一
(2) filters: 整数,输出空间的维数(即卷积中的滤波器数).
(3) kernel_size:滤波器的大小,如果是一个整数,则宽高相等。
(4)strides:一个整数,或者包含了两个整数的元组/队列,表示卷积的纵向和横向的步长。如果是一个整数,则横纵步长相等。另外, strides 不等于1 和 dilation_rate 不等于1 这两种情况不能同时存在。
(5)padding:定义元素边框与元素内容之间的空间,“valid” 或者 “same”(不区分大小写)。“valid” 表示边缘不填充,"same"表示填充到过滤器可以达到图像边缘,注:在same情况下,只有在步长为1时生成的feature map才会和输入值相等。
padding规则介绍:
valid情况:输出的宽高

output_width = (in_width - filter_width + 1)/strides_width
ouput_height = (in_width - filter_width + 1)/strides_width 结果向上取整

same情况:输出的宽高和卷积核没有关系

out_height = in_height/strides_height
out_width = in_width/strides_width
补零规则:
#pad_height:补零的行数 pad_width:补零的列数
pad_height = max((out_height-1)*strides_height+filter_height-in_height,0)
pad_width = max((out_width-1)*strides_width+filter_width-in_width,0)
#代表上下左右四个方向填零的行列数
pad_top = pad_height/2
pad_bottom = pad_height - pad_top
pad_left = pad_width/2
pad_right = pad_width - pad_left

(6)data_format:一个字符串,可以是channels_last(默认)或channels_first,表示输入维度的顺序。channels_last对应于具有形状(batch, height, width, channels)的输入,而channels_first对应于具有形状(batch, channels, height, width)的输入.
(7)dilation_rate:2个整数的整数或元组/列表,指定用于扩张卷积的扩张率.可以是单个整数,以指定所有空间维度的相同值.目前,指定任何dilation_rate值!= 1与指定任何步幅值!= 1都不相容.
(8)activation:激活功能,将其设置为“None”以保持线性激活.
(9)use_bias:Boolean,该层是否使用偏差.
(10)kernel_initializer:卷积内核的初始化程序.
(11)bias_initializer:偏置向量的初始化器,如果为None,将使用默认初始值设定项.
(12)kernel_regularizer:卷积内核的可选正则化器.
(13)bias_regularizer:偏置矢量的可选正则化器.
(14)activity_regularizer:输出的可选正则化函数.
(15)kernel_constraint:由Optimizer更新后应用于内核的可选投影函数(例如,用于实现层权重的范数约束或值约束).该函数必须将未投影的变量作为输入,并且必须返回投影变量(必须具有相同的形状).在进行异步分布式培训时,使用约束是不安全的.
(16)trainable:Boolean,如果为True,还将变量添加到图集合GraphKeys.TRAINABLE_VARIABLES中(请参阅参考资料tf.Variable).
(17)name:字符串,图层的名称.

你可能感兴趣的:(tf.layers使用之tf.layers.conv2d(...))