【发布时间】:2019-02-10 12:58:52
【问题描述】:
我问这个是因为我觉得我缺少一些基本的东西。
到目前为止,大多数人都知道 MNIST 图像是 28X28 像素。 keras documentation 告诉我有关 Dense 的信息:
输入形状 nD 张量,形状为:(batch_size, ..., input_dim)。最常见的情况是具有形状 (batch_size, input_dim) 的 2D 输入。
所以像我这样的新手会假设图像可以作为 28*28 矩阵输入模型。然而,我找到的每个教程都经过各种体操,将图像转换为一个 784 长的特征。
有时由
num_pixels = X_train.shape[1] * X_train.shape[2]
model.add(Dense(num_pixels, input_dim=num_pixels, activation='...'))
或
num_pixels = np.prod(X_train.shape[1:])
model.add(Dense(512, activation='...', input_shape=(num_pixels,)))
或
model.add(Dense(units=10, input_dim=28*28, activation='...'))
history = model.fit(X_train.reshape((-1,28*28)), ...)
甚至:
model = Sequential([Dense(32, input_shape=(784,)), ...),])
所以我的问题很简单——为什么? Dense 不能按原样接受图像,或者,如果有必要,就按原样“在幕后”处理它吗?如果,正如我所怀疑的,这个处理必须完成,这些方法(或其他)中的任何一种是否天生更可取?
【问题讨论】:
-
不!那是因为currently the Dense layer is applied on the last axis。因此,如果您向其提供形状为
(height, width)或(height, width, channels)的图像,则密集层将仅应用于最后一个轴(即宽度或通道)。 -
好吧,我该死!当新手甚至无法信任文档时,世界会变成什么:)。除了文档之外,我不得不说那些发布教程的人应该费心解释为什么他们将图像展平(假设他们自己知道开始的原因)而不是仅仅发布......无论如何,感谢这个信息- 您可以将其作为实际答案发布,以便我可以将其标记为已解决吗?还是违反规定?
标签: python machine-learning keras keras-layer mnist