当前位置: 首页 > 知识库问答 >
问题:

了解卷积的张量形状

澹台成龙
2023-03-14

目前正在尝试学习卷积网络的Tensorflow MNIST教程,我可以使用一些帮助来理解该死的张量的维度。

所以我们有28x28像素的图像。

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

让我们暂时接受这一点,并在以后问自己为什么是32个功能和为什么是5x5补丁。

其重量张量的形状为5、5、1、32。前两个维度是面片大小,下一个维度是输入通道数,最后一个维度是输出通道数。

W_conv1weight_variable5, 5, 1, 32

b_conv1=bias_variable([32])

如果你这么说的话...

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

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

好了,现在我迷路了。

从这最后一次重塑判断,我们有“howevermany”28x28x1像素块,它们是我们的图像。

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

然而,如果这是排序,那么我们的权重张量本质上是五个值的“块”的集合

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

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

为什么重量张量看起来是这样的?

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

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')

)

共有2个答案

梁宏才
2023-03-14

除了另一个答案之外,我还要补充几点,

让我们暂时接受这一点,并在以后问自己为什么是32个功能和为什么是5x5补丁。

我们选择5x5面片或32个特征没有具体原因,所有这些参数都有经验(某些情况除外),您可以使用3x3面片或更大的特征尺寸。

我说“某些情况下除外”,因为我们可以使用3x3补丁从图像中获取更多细节信息,或者使用更大的特征尺寸来了解每个图像的更多细节(“在这种情况下,更大”和“更多细节”是相对的术语)。

然而,如果这是排序,那么我们的权重张量本质上是五个5x1x32“块”值的集合

不完全是,但权重张量不是集合,它只是一个大小5x5和输入通道1和输出特征(通道)32的滤波器

为什么重量张量看起来是这样的?

权重张量weight\u变量([5,5,1,32])告诉我要在图像上应用补丁大小,我有输入功能(因为图像是灰度的)和输出功能(通道)。

更多详情:

所以这一行是tf。nn。conv2d(x,W,strips=[1,1,1,1],padding='SAME')将输入x作为[-1,28,28,1]-1意味着您可以在这个维度中放入任何想要的大小(批量大小),28,28显示输入大小,它必须正好是28x82,最后一个1显示输入通道的数量,因为mnist图像是灰度图像,所以它是1,更详细地说,它表示输入图像是一个28x28的2D矩阵,矩阵的每个单元格显示一个表示灰度强度的值。如果输入图像是RGB,那么我们应该使用3个通道,而不是1个通道,这个3个通道表示输入图像是一个28x28x3的3D矩阵,3的第一个维度中的单元格显示红色的强度,3的第二个维度显示绿色的强度,另一个维度显示蓝色。

现在tf。nn。conv2d(x,W,步长=[1,1,1,1],padding='SAME')获取x并应用W(这是一个3x3补丁,在步长为1的28x28图像上应用whis补丁(因为步长为1),并再次以大小给出结果图像,因为我们使用了padding='SAME'

缪成天
2023-03-14

输入张量的形状为[-1,28,28,1]。就像你提到的,最后一个维度是1,因为图像是灰度的。第一个索引是batchsize。卷积将独立处理批次中的每个图像,因此批次大小对卷积权重张量维度没有影响,或者实际上对网络中的任何权重张量维度没有影响。这就是为什么batchsize可以是任意的(1表示tensorflow中的任意大小)。

现在到权重张量;您没有五个5x1x32-块,而是有32个5x5x1-块。每个代表一个特征。1是补丁的深度,由于灰度而为1(对于彩色图像来说是5x5x3x32)。5x5是补丁的大小。

数据张量中的维数排序不同于卷积权张量中的维数排序。

 类似资料:
  • 我正在制作这个CNN模型 ''' 但这是给我一个错误:-InvalidArgumentError:负尺寸造成的减去2从1'{{nodeconv2d_115/Conv2D}}=Conv2D[T=DT_FLOAT,data_format="NHWC",膨胀=[1,1,1,1],explicit_paddings=[],填充="VALID",步幅=[1,2,2,1],use_cudnn_on_gpu=t

  • 我在Keras建立了一个卷积神经网络。 根据CS231讲座,卷积操作为每个过滤器创建一个特征映射(即激活映射),然后将其堆叠在一起。在我的例子中,卷积层有一个300维的输入。因此,我预计会进行以下计算: 每个过滤器的窗口大小为5。因此,每个滤波器产生300-5 1=296个卷积 但是,实际输出形状看起来不同: 偏移值的形状很有意义,因为每个过滤器都有一个偏移值。然而,我不了解重量的形状。显然,第一

  • 我正在尝试创建一维卷积模型,但我似乎无法获得正确的输入形状。以下是我所拥有的: 我收到以下错误: 有人有什么建议吗?

  • 图像的卷积(Convolution)定义为 $$f(x) = act(\sum{i, j}^n \theta{(n - i)(n - j)} x_{ij}+b)$$ 其计算过程为 示例1 import tensorflow as tf import numpy as np sess = tf.InteractiveSession() input_batch = tf.constant([

  • 问题内容: 我有两个numpy数组: 我想形成外部张量积,即numpy数组 这样 我必须多次执行上述外部乘法,所以我想尽可能地加快速度。 问题答案: 另一种方法是显式扩展尺寸。对于一维数组,这将是 对于10x10的数组,并推广维度扩展,我得到了相同的时间 这样确实可以节省一些编码,但是基本的广播乘法是相同的。

  • 我目前正在尝试理解卷积神经网络中的权重分配实际上是什么。 据我所知,CNN首次引入是为了减少连接输入和输出所需的连接数量,因为输入具有3个维度。 根据这一逻辑,我认为卷积减少了其中一个维度,并将卷积图像连接到输出神经元。 连接卷积图像和输出的权重是否是未共享的权重?如果没有,哪些权重是不共享的?。 或者,如果是,则反向传播将其视为一个权重,并将其更新为一个单位?