首页 文章

Keras中2D图像的张量形状

提问于
浏览
0

我是Keras的新手(以某种方式对TF),但我发现输入层的形状定义非常混乱 .

因此在示例中,当我们有一个长度为20的1D向量用于输入时,形状被定义为

...Input(shape=(20,)...)

当需要为MNIST定义灰度图像的2D张量时,它定义为:

...Input(shape=(28, 28, 1)...)

所以我的问题是为什么张量没有被定义为 (20)(28, 28) ?为什么在第一种情况下添加第二个维度并留空?另外,第二,必须定义多个 Channels ?

我明白它取决于层,所以Conv1D,Dense或Conv2D采用不同的形状但似乎第一个参数是隐式的?

根据docs,密集需要 (batch_size, ..., input_dim) 但这与示例有什么关系:

Dense(32, input_shape=(784,))

谢谢

1 回答

  • 3

    Tuples vs numbers

    input_shape 必须是一个元组,所以只有 (20,) 才能满足它 . 数字 20 不是元组 . - 有参数 input_dim ,如果您只有一个维度,可以让您的生活更轻松 . 此参数可以采用 20 . (但实际上,我发现它只是令人困惑,我总是使用 input_shape 并使用元组,以保持一致的理解) .

    Dense(32, input_shape=(784,))Dense(32, input_dim=784) 相同 .

    Images

    图像不仅有像素,还有通道(红色,绿色,蓝色) .
    黑/白图像只有一个通道 .

    所以, (28pixels, 28pixels, 1channel)

    但请注意,没有任何义务可以随处处理图像 . 你可以按自己喜欢的方式塑造它们 . 但是某些层确实需要某种形状,否则它们无法工作 .

    Some layers demand specific shapes

    这是2D卷积层的情况,需要 (size1,size2,channels) . 他们需要这种形状,因为他们必须相应地应用卷积滤波器 .

    这也是复发层的情况,需要 (timeSteps,featuresPerStep) 来执行它们的重复计算 .

    MNIST models

    同样,没有义务以特定方式塑造您的图像 . 您必须根据您选择的第一层和您打算实现的目标来完成 . 这是免费的 .

    很多例子都不够 . 它们可能以 Dense 层开始,这需要像 (size,) 这样的形状

    其他示例可能会关注,并使用形状 (28,28) ,但这些模型将不得不重塑输入以满足下一层的需要 .

    卷积层2D将需要 (28,28,1) .

    主要想法是: input arrays must match input_shape or input_dim.

    Tensor shapes

    但是,在阅读Keras错误消息或使用自定义/ lambda图层时要小心 .

    我们之前定义的所有这些形状都省略了一个重要的维度: the batch sizenumber of samples .

    在内部,所有张量都将具有此附加维度作为第一维度 . Keras会将其报告为 None (这个尺寸将适应您拥有的任何批量) .

    因此, input_shape=(784,) 将报告为 (None,784) .
    input_shape=(28,28,1) 将被报告为 (None,28,28,1)

    并且您的实际输入数据必须具有与报告的形状匹配的形状 .

相关问题