2017-06-15 34 views
2

我跟随udacity MNIST tutorial和MNIST数据原本是28*28矩阵。然而,在喂养该数据之前,他们将数据平整为具有784列(784 = 28 * 28)的1d阵列。例如, 原始训练集形状为(200000,28,28)。
200000行(数据)。每个数据是28 * 28矩阵为什么我们在将数据输入张量流之前将数据变平?

它们转换成训练集,其形状是这样的(200000 784)

有人能解释为什么它们拼合出的数据输送到tensorflow过吗?

+1

你的链接始于localhost,你应该修复这个问题 – gdelab

+0

谢谢。现在修好。 – Aaron

+1

在将它发送到张量流之前,您不必将其弄平。你可以在Tensorflow中将它弄平。 – Wontonimo

回答

4

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

如果没有首先重塑,得到相同的结果会更加复杂和效率更低,这就是为什么我们总是在完全连接的层之前做到这一点。对于卷积图层,相反,您需要保持原始格式(宽度,高度)的数据。

+0

卷积网络上的良好通话。 – Wontonimo

2

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

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

相关问题