神经网络的4d输入张量vs 1d输入张量(aka矢量)

时间:2019-04-06 10:00:17

标签: machine-learning pytorch

在阅读有关机器学习的知识时,我不断看到对“输入向量”或“特征向量”的引用,这是一维张量,用于保存神经网络的输入。 for example a 28x28 grayscale image would be a 784 dimensional vector

然后,我还不断看到对图像的引用是4维张量,其中维是批处理中的数字,颜色通道,高度和宽度。例如,这就是“ Francois Chollet的Python深度学习”中的描述。

我想知道,为什么用不同的方式描述它?什么时候可以使用另一个?

1 个答案:

答案 0 :(得分:1)

有两个主要注意事项。

首先是由于批次。由于我们通常希望针对多个训练示例(而不仅仅是一个)基于梯度计算执行每个优化步骤,因此一次运行所有示例的计算将很有帮助。因此,许多库中的标准方法是第一维是批处理维,并且所有操作都沿第一维独立应用于每个张量。因此,实际代码中的大多数张量至少是二维的:[batch, any_other_dimensions...]。但是,从神经网络的角度来看,批处理是一种实现细节,因此为了清楚起见,通常会跳过批处理。您的链接讨论了784维向量,实际上在实践中几乎是成批处理的,因此批量大小为16的示例张量的大小为[batch, features] = [16, 784]。总结起来,我们将第一个维度解释为批处理,然后是any_other_dimensions...,在上面的示例中恰好是一个大小为784的单个features维度。

然后是4维张量,它是在使用卷积神经网络而不是完全连接的神经网络时出现的。完全连接的网络使用完整的矩阵,这意味着前一层的每个神经元都对下一层的每个神经元有所贡献。卷积神经网络可以看作是使用特殊结构的稀疏矩阵,其中上一层的每个神经元仅影响下一层的一些神经元,即那些在其位置固定距离内的神经元。因此,卷积会施加一个 spatial 结构,该结构需要反映在中间张量中。因此,我们需要[batch, features]而不是[batch, x, y]来反映数据的空间结构。最后,卷积神经网络在日常实践中具有一些全连接神经网络的混合体:它们具有在空间上局部分布的多个“特征”的概念-产生了所谓的“特征图”,并且张量升高到4d:[batch, feature, x, y]。每个值tensor_new[b, f, x, x]是根据所有先前的值tensor_previous[b', f', x', x']计算的,并受以下约束:

  1. b = b':我们不混合批处理元素
  2. x'x之间的距离最大,并且对于y'同样:我们仅使用空间邻域中的值
  3. 所有f'都被使用:这是“完全连接”的部分。

卷积神经网络比完全连接的神经网络更适合于视觉任务,对于足够大的图像(想象存储(1024 * 1024) ^ 2图像的1024 x 1024px大小的完全连接矩阵)来说,卷积神经网络不可行。 CNN中的4d张量特定于2d视觉,您可以在1d信号处理中遇到3d张量(例如声音):[batch, feature, time],在3d体积处理中{5d} [batch, feature, x, y, z]和其他类型网络中完全不同的布局既不是完全连接也不是卷积。

总结:如果有人告诉您他们正在使用一维向量,那是一种简化:几乎可以肯定,至少使用两个来进行批处理。然后,在2D计算机视觉的背景下,卷积网络是标准的,并且它们带有4D张量。在其他情况下,您甚至可能会看到不同的布局和尺寸。谷歌关键词以供更多阅读:fully connected neural networksconvolutional neural networksminibatchingstochastic gradient descend(这两个是密切相关的)。