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)的多种用法。看了文档,还是不太清楚
- 他们中的任何一个是否使用另一个
- 在向模型引入输入层时,两者是否可以互换使用(假设尺寸为
(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
模型中,但互不依赖。
我见过 tf.keras.layers.Flatten()
(例如 here) and tf.keras.layers.Input()
(ex. here)的多种用法。看了文档,还是不太清楚
- 他们中的任何一个是否使用另一个
- 在向模型引入输入层时,两者是否可以互换使用(假设尺寸为
(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
模型中,但互不依赖。