读到机器学习,我不断地看到对“输入向量”或“特征向量”的引用,这是一种一维张量,用来保存神经网络的输入。所以例如,28x28灰度图像将是一个784维向量。。
然后,我也看到引用图像是一个四维张量,尺寸是批次数,颜色通道,高度和宽度。例如,在“用Python进行深度学习,由Francois”中就是这样描述的。
我在想,为什么用不同的方式来描述它呢?什么时候会使用其中一种对另一种?
发布于 2019-04-06 12:32:41
有两个主要的考虑因素。
第一个原因是分批。由于我们通常希望对多个训练示例(而不仅仅是一个)执行基于梯度计算的每个优化步骤,因此同时对所有这些示例进行计算是很有帮助的。因此,许多库中的标准方法是,第一维是批处理维,所有操作都是独立地应用于第一维上的每个次张量。因此,实际代码中的大多数张量至少是二维的:[batch, any_other_dimensions...]。然而,从神经网络的角度来看,批处理是一个实现细节,因此为了清晰起见,常常跳过它。您的链接谈到了784维向量,这些向量在实践中几乎毫无疑问是分批处理的,因此批量大小为16的示例张量将是[batch, features] = [16, 784]大小。总结起来,我们将第一个维度解释为批处理,然后是any_other_dimensions...,在上面的示例中,它恰好是一个大小为784的features维度。
然后是四维张量,它出现在使用卷积神经网络而不是完全连接的神经网络。完全连接的网络使用完全矩阵,这意味着前一层的每个神经元对下一层的每个神经元都有贡献。卷积神经网络可以看作是使用一个特殊结构的稀疏矩阵,其中前一层的每个神经元只影响下一层的某些神经元,即位于其位置一定距离内的神经元。因此,卷积施加了一个空间结构,这需要反映在中间张量。因此,我们不需要[batch, features],而是需要[batch, x, y]来反映数据的空间结构。最后,在日常实践中,卷积神经网络有一些完全连接的神经网络:它们有多个“特征”的概念,这些特征在空间上是局部化的,从而产生所谓的“特征映射”,而张量则上升到4d:[batch, feature, x, y]。每个值tensor_new[b, f, x, x]都是根据所有以前的值tensor_previous[b', f', x', x']计算的,但有以下约束:
b = b':我们不混合批处理元素x'最多离x有一段距离,对于y'也是如此:我们只在空间邻域中使用这些值。f'都被使用:这是“完全连接”部分。卷积神经网络比完全连通的神经网络更适合于视觉任务,这对于足够大的图像(想象存储一个大小为(1024 * 1024) ^ 2的全连通矩阵用于1024 x 1024px图像)变得不可行。CNN中的4d张量是特定于2d视觉的,在一维信号处理(例如声音)中可以遇到三维张量:[batch, feature, time],3d卷处理[batch, feature, x, y, z]中的5d,以及在其他类型的网络中完全不同的布局,它们既不是完全连接的,也不是卷积的。
总结:如果有人告诉你,他们正在使用一维向量,这是一个简化:几乎可以肯定,使用至少两个,用于批次。然后,在二维计算机视觉的背景下,卷积网络是标准的,它们具有4d张量。在其他情况下,您甚至可以看到不同的布局和维度。fully connected neural networks,convolutional neural networks,minibatching或stochastic gradient descend (这两者都是密切相关的)。
https://stackoverflow.com/questions/55547943
复制相似问题