张量流 - 理解卷积的张量形状

Use*_*291 3 python neural-network conv-neural-network tensorflow

目前正试图通过Tensorflow MNIST教程进行卷积网络,我可以帮助理解darn张量的维度.

所以我们有28x28像素大小的图像.

卷积将为每个5x5补丁计算32个特征.

现在让我们接受这个,然后问自己为什么32个功能和为什么5x5补丁.

它的重量张量将具有的形状[5, 5, 1, 32].前两个维度是补丁大小,下一个是输入通道的数量,最后一个是输出通道的数量.

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

b_conv1 = bias_variable([32])

如果你这样说......

为了应用该层,我们首先将x重塑为4d张量,其中第二和第三维度对应于图像宽度和高度,最终维度对应于颜色通道的数量.

x_image = tf.reshape(x, [-1,28,28,1])

好吧,现在我迷路了.

从这最后的重塑来判断,我们28x28x1的像素"像块"一样"块".

我想这是有道理的,因为图像是灰度的

但是,如果这是排序,那么我们的权重张量基本上是五个5x1x32"块"值的集合.

x32我想,如果我们想要推断32每个补丁的功能,那么这是有意义的

不过,其余的,我并不十分相信.

为什么体重张量看起来像它显然那样?

(为了完整性:我们使用它们

h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)
h_pool1 = max_pool_2x2(h_conv1)
Run Code Online (Sandbox Code Playgroud)

哪里

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')
Run Code Online (Sandbox Code Playgroud)

)

Blu*_*Sun 8

您的输入张量具有形状[-1,28,28,1].就像你提到的那样,最后一个维度是1,因为图像是灰度的.第一个索引是batchsize.卷积将分别处理批次中的每个图像,因此批量大小对卷积 - 权重 - 张量维度没有影响,或者实际上对网络中的任何权重张量维度没有影响.这就是批量大小可以是任意的原因.

现在到了重量张量; 你没有五个-1-blocks,而是有32个5x1x32-blocks.每个代表一个功能.1是贴片的深度,由于灰度(5x5x1为彩色图像),因此为1.这5x5x3x32是补丁的大小.

数据张量中的维度排序与卷积权重张量中的维度排序无关.