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

为什么我们要在将数据输入tensorflow之前将其展平?,tensorflow,deep-learning,mnist,Tensorflow,Deep Learning,Mnist,我正在跟踪,MNIST数据最初是28*28矩阵。然而,就在输入数据之前,他们将数据展平到具有784列的1d数组中(784=28*28) 比如说,, 最初的训练集形状是(200000,28,28)。 200000行(数据)。每个数据是28*28矩阵 他们将其转换为形状为(200000784)的训练集 有人能解释一下为什么他们在将数据送入tensorflow之前会将数据展平吗?因为当您添加一个完全连接的层时,您总是希望数据是一个(1或)二维矩阵,其中每一行都是表示数据的向量。这样,完全连接的层只是输

我正在跟踪,MNIST数据最初是
28*28
矩阵。然而,就在输入数据之前,他们将数据展平到具有784列的1d数组中
(784=28*28)

比如说,, 最初的训练集形状是(200000,28,28)。
200000行(数据)。每个数据是28*28矩阵

他们将其转换为形状为(200000784)的训练集


有人能解释一下为什么他们在将数据送入tensorflow之前会将数据展平吗?

因为当您添加一个完全连接的层时,您总是希望数据是一个(1或)二维矩阵,其中每一行都是表示数据的向量。这样,完全连接的层只是输入(大小<代码>(批量大小,n\u特征))和权重(形状<代码>(n\u特征,n\u输出))之间的矩阵乘法(加上偏差和激活函数),然后得到形状<代码>(批量大小,n\u输出)。另外,在完全连接的层中,您确实不需要原始形状信息,因此可以将其丢失


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

这是完全连接层的惯例。完全连接的层将前一层中的每个节点与后续层中的每个节点连接起来,因此这种类型的层不存在局部性问题


此外,通过这样定义层,我们可以通过计算公式有效地计算下一步:
f(Wx+b)=y
。这在多维输入的情况下是不容易做到的,而重新调整输入的成本低且易于实现

您的链接以localhost开始,您应该修复此问题谢谢。现在已修复。在将其发送到tensorflow之前,无需将其展平。你可以用Tensorflow把它展平。