当我说 DNN 时,我指的是密集连接的神经元(不是 CNN)的简单用法。
假设我们使用的是 Keras(带有 Tensorflow 后端),使用 Sequential API 的 input_dim 只能采用整数或 None 值,这限制了它只能拍摄灰度图像,对吧?
但是,由于功能 API 可以接受不仅限于整数的尺寸,我会假设它可以采用 RGB 图像而不是仅灰度图像?
如果有人可以确认或支持,那就太好了?
当我说 DNN 时,我指的是密集连接的神经元(不是 CNN)的简单用法。
假设我们使用的是 Keras(带有 Tensorflow 后端),使用 Sequential API 的 input_dim 只能采用整数或 None 值,这限制了它只能拍摄灰度图像,对吧?
但是,由于功能 API 可以接受不仅限于整数的尺寸,我会假设它可以采用 RGB 图像而不是仅灰度图像?
如果有人可以确认或支持,那就太好了?
答案是否定的,它们不受限制。
但是,您的陈述似乎包含多个误解,所以让我们先澄清一下:
Keras 中的顺序和功能 API 是构建神经网络层的不同方法。两者都可以有密集层和卷积层。
卷积层利用信息局部性,因此通常在图像上表现更好,其中信息局部性是关键。
另一方面,密集层只能处理向量作为输入,因此,我们想要作为密集层输入的任何东西都必须是向量;我们可以将图像数据作为输入提供给密集层,但我们必须首先移除空间组织(即扁平化),也就是说,我们必须丢失关于哪个像素与另一个像素相邻以及它在哪个通道中的信息。
考虑到这些信息,我们可以得出结论,虽然我们可以使用灰度或彩色图像作为密集层的输入,但我们需要将图像展平为向量,这使得密集层通常不太适合接收图像作为输入,因为他们不使用位置信息。
更新:关于密集层接受多维输入的能力,乘法沿最后一维进行,如文档中所述:
注意:如果层的输入具有大于 2 的秩,则计算沿 the 的最后一个轴和 the 的轴1
Dense
之间的点积(使用)。例如,如果有维度,那么我们创建一个形状,并且沿着 的轴 2 对形状的每个子张量(有这样的子张量)进行操作。在这种情况下,输出将具有 shape 。inputs
kernel
inputs
kernel
tf.tensordot
input
(batch_size, d0, d1)
kernel
(d1, units)
kernel
input
(1, 1, d1)
batch_size * d0
(batch_size, d0, units)
但这适用于函数式 API 和顺序 API。