卷积网络一些小知识点整理(tf)

1:定义卷积层的权重时候

def weight_variable(shape):
    initial = tf.truncated_normal(shape, stddev=0.1)
    return tf.Variable(initial)

W_conv1 = weight_variable([5,5,1,32])

通俗说法:5*5的卷积来做运算,1代表的是处理的图像颜色通道只有1个,32指有32个卷积 即提取32个特征

更通俗的说明:我们使用了32个filters,每一个都有一个大小为5*5的窗口。我们必须定义一个tensor来保存shape为[5,5,1,32]权重矩阵W:前两个参数是窗口的大小,第三个参数是channel的数量。最后一个定义了我们想使用多少个特征

2:定义max_pooling层的时候

def max_pool_2x2(x):
    return tf.nn.max_pool(x,ksize=[1,2,2,1],strides=[1,2,2,1],padding='SAME')

tf.nn.max_pool(value, ksize, strides, padding, name=None)

参数是四个,和卷积很类似:

第一个参数value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch, height, width, channels]这样的shape

第二个参数ksize:池化窗口的大小,取一个四维向量,一般是[1, height, width, 1],因为我们不想在batch和channels上做池化,所以这两个维度设为了1

第三个参数strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1, stride,stride, 1]

第四个参数padding:和卷积类似,可以取'VALID' 或者'SAME'

返回一个Tensor,类型不变,shape仍然是[batch, height, width, channels]这种形式

3:每层和每层之间的权重设置关系

W_conv1 = weight_variable([5,5,1,32])

第一个卷积层中,每个size都是5*5,然后因为图像channel是1(mnist是灰色图像 不是RGB格式),32是指由32个卷积,形成32层深的一个输出

因为上层有32个输出,就相当于一幅图像是32个channel了,所以这块第3个参数必须是32,64就代表有64个卷积

W_conv2 = weight_variable([5,5,32,64])

最后一层是全连接层的权重,7*7*64这应该是计算好了的,不是随便写,1024就说明全连接层输出是1024个神经元,或者说是1024个特征

W_fc1 = weight_variable([7*7*64, 1024])

猜你喜欢

转载自blog.csdn.net/a1066196847/article/details/83590150
今日推荐