tf.keras.layers.Input() 和 tf.keras.layers.Flatten() 有什么区别

What is the difference between tf.keras.layers.Input() and tf.keras.layers.Flatten()

我见过 tf.keras.layers.Flatten()(例如 here) and tf.keras.layers.Input() (ex. here)的多种用法。看了文档,还是不太清楚

  1. 他们中的任何一个是否使用另一个
  2. 在向模型引入输入层时,两者是否可以互换使用(假设尺寸为 (64, 64)

我认为混淆来自使用 tf.keras.Sequential 模型,它不需要明确的 Input 层。考虑以下两个模型,它们是等价的:

import tensorflow as tf

model1 = tf.keras.Sequential([
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(5, activation='relu'),
    ])

model1.build((1, 28, 28, 1))
model2 = tf.keras.Sequential([
      tf.keras.layers.Input((28, 28, 1)),
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(5, activation='relu'),
    ])

不同之处在于我使用 Input 层显式设置了 model2 的输入形状。在 model1 中,当您将真实数据传递给它或调用 model.build.

时,将推断输入形状

现在关于Flatten层,该层只是将n-dimensional张量(例如(28, 28, 1))转换为一维张量(28 x 28 x 1)Flatten 层和 Input 层可以共存于一个 Sequential 模型中,但互不依赖。