TF中CNN有关(基础)
piccolo(一个正在学的人)
最近开始接触 学习,主要是记录自己好找的东西
Input
tf
中一般用一个4-D
的tensor
来表示
其shape
为[batch_size, in_width, in_height, channels]
,
卷积核
一般也用一个
4-D
的tensor
来表示,其shape
为[filter_width, filter_height, input_channels, output_channels]
,卷积核移动的步长strides
一般为[1, strides, strides, 1]
.
举例
输入为6x6
的单通道(1)图片,每一次输入batch
数目
[batch_size, 6, 6, 1]
Convolution
h_conv2d = tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
- 卷积计算函数
stride [1, x步长, y步长, 1]
padding:SAME/FULL/VALID
(边距处理方式)
32
个5*5
卷积核,其shape
为[5,5,1,32]
Padding
可参考TensorFlow中CNN的两种padding方式“SAME”和“VALID”
-
padding='SAME'
(尺寸填充为原尺寸) -
模型尺寸分析:卷积层全都采用了(填充)补0,所以经过卷积层长和宽不变,只有深度加深。池化层全都没有补0,所以经过池化层长和宽均减小,深度不变。
out_height = ceil(float(in_height) / float(strides[1]) out_width = ceil(float(in_width) / float(strides[2]))
-
padding='VALID'
(尺寸不够就缩小) -
模型尺寸分析:经过卷积层长和宽往往都缩小,
out_height = ceil(float(in_height - filter_height + 1) / float(strides[1])) out_width = ceil(float(in_width - filter_width + 1) / float(strides[2]))
Max Pooling
h_pool = tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')#2x2的池化窗口 步长为2
2*2
的max_pooling
,其形状为[1,2,2,1
],其步长strides
为[1,2,2,1]
- max池化函数
ksize [1, x边长, y边长,1]
池化窗口大小stride [1, x步长, y步长, 1]
padding:SAME/FULL/VALID
(边距处理方式)
激活函数
全连接层一般使用sigmoid
或者tanh
卷积层一般使用tanh
,ReLu
及其改进型
可参考
常用激活函数(激励函数)理解与总结
深度学习之损失函数与激活函数的选择