代码之家  ›  专栏  ›  技术社区  ›  esafresa

神经网络的4d输入张量与1d输入张量(aka向量)

  •  0
  • esafresa  · 技术社区  · 5 年前

    for example a 28x28 grayscale image would be a 784 dimensional vector .

    我在想,为什么用不同的方式来描述?一个什么时候用?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Jatentaki    5 年前

    有两个主要考虑因素。

    首先是由于分批。由于我们通常希望对多个训练示例(而不仅仅是一个)执行基于梯度计算的每个优化步骤,因此一次对所有示例运行计算是有帮助的。因此,许多库中的标准方法是,第一个维度是批处理维度,并且所有操作都沿着第一个维度独立地应用于每个子传感器。因此,实际代码中的大多数张量至少是二维的: [batch, any_other_dimensions...] . 然而,从神经网络的角度来看,批处理是一个实现细节,因此为了清晰起见,常常跳过批处理。你的链接谈到784维向量,这些向量实际上几乎毫无疑问是分批处理的,因此分批大小为16的示例张量的大小是 [batch, features] = [16, 784] any_other_dimensions... 在上面的例子中 features 尺寸784。

    然后是四维张量,这是在使用卷积神经网络时产生的,而不是完全连接的张量。一个完全连接的网络使用完全矩阵,这意味着前一层的每个神经元对下一层的每个神经元都有贡献。卷积神经网络可以看作是使用一个特殊结构的稀疏矩阵,其中前一层的每个神经元只影响下一层的一些神经元,即在其位置的某个固定距离内的神经元。因此,卷积将 空间 结构,这需要反映在中间张量上。而不是 [batch, features] ,因此我们需要 [batch, x, y] [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' 使用s:这是“完全连接”部分。

    (1024 * 1024) ^ 2 为了一个 1024 x 1024px 图像)。CNNs中的4d张量是2d视觉特有的,在1d信号处理中可以遇到3d张量(例如声音): [batch, feature, time] [batch, feature, x, y, z] 以及其他既不完全连接也不复杂的网络中完全不同的布局。

    总结:如果有人告诉你他们使用的是一维向量,这是一个简化:几乎可以肯定的是至少使用两个,用于批处理。然后,在二维计算机视觉的背景下,卷积网络是标准的,它们带有4d张量。在其他场景中,您可能会看到甚至不同的布局和维度。谷歌关键词阅读: fully connected neural networks , convolutional neural networks minibatching stochastic gradient descend (这两者密切相关)。