【发布时间】:2017-05-05 13:11:00
【问题描述】:
目前正在尝试通过Tensorflow MNIST tutorial for convolutional networks 工作,我可以在了解该死张量的尺寸方面使用一些帮助。
所以我们有28x28 像素大小的图像。
卷积将为每个 5x5 补丁计算 32 个特征。
让我们暂时接受这一点,稍后再问自己为什么要使用 32 个功能以及为什么要使用 5x5 补丁。
其权重张量的形状为
[5, 5, 1, 32]。前两个维度是patch size,接下来是输入通道数,最后是输出通道数。
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
如果你这么说……
为了应用层,我们首先将 x 重塑为 4d 张量,第二和第三维度对应图像的宽度和高度,最终维度对应颜色通道的数量。
x_image = tf.reshape(x, [-1,28,28,1])
好吧,现在我迷路了。
从最后一次重塑来看,我们有
“howevermany”28x28x1“块”像素是我们的图像。
我想这是有道理的,因为图像是灰度的
但是,如果这是排序,那么我们的权重张量本质上是五个5x1x32“块”值的集合。
x32 是有道理的,我猜,如果我们想推断每个补丁的 32 特征
不过,其余的,我并不十分相信。
为什么权重张量看起来像它明显的样子?
(为了完整性:我们使用它们
h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
在哪里
def conv2d(x,W):
'''
2D convolution, expects 4D input x and filter matrix W
'''
return tf.nn.conv2d(x,W,strides=[1,1,1,1],padding ='SAME')
def max_pool_2x2(x):
'''
max-pooling, using 2x2 patches
'''
return tf.nn.max_pool(x,ksize=[1,2,2,1], strides=[1,2,2,1],padding='SAME')
)
【问题讨论】:
标签: python tensorflow neural-network conv-neural-network