首页 文章

为什么我们在将数据输入tensorflow之前将其展平?

提问于
浏览
4

我正在关注udacity MNIST tutorial并且MNIST数据最初是 28*28 矩阵 . 然而,在输入数据之前,它们将数据展平为1d数组,其中包含784列 (784 = 28 * 28) .

例如,原始训练集形状为(200000,28,28) .
200000行(数据) . 每个数据是28 * 28矩阵

他们将此转换为训练集,其形状为(200000,784)

有人可以解释为什么他们在输入tensorflow之前将数据展平?

2 回答

  • 2

    因为当您添加完全连接的图层时,您总是希望您的数据是(1或)2维矩阵,其中每一行都是表示数据的向量 . 这样,完全连接的层只是输入(大小 (batch_size, n_features) )和权重(形状 (n_features, n_outputs) )(加上偏差和激活函数)之间的矩阵乘法,并且您得到形状 (batch_size, n_outputs) 的输出 . 另外,你真的不能失去它 .

    如果不首先重塑,获得相同的结果会更复杂,效率更低,这就是为什么我们总是在完全连接的层之前完成它 . 对于卷积层,相反,您需要保持原始格式(宽度,高度)的数据 .

  • 4

    这是一个完全连接的层的约定 . 完全连接的层将前一层中的每个节点与连续层中的每个节点连接起来,因此对于这种类型的层,局部性不是问题 .

    另外,通过定义这样的层,我们可以通过计算公式来有效地计算下一步: f(Wx + b) = y . 这对于多维输入来说并不是那么容易,并且重塑输入是低成本且易于实现的 .

相关问题