tf.keras.layers.InputLayer(input_shape=None,
batch_size=None,
dtype=None,
input_tensor=None,
sparse=None,
name=None,
ragged=None,
type_spec=None,
**kwargs
)
输入层一般用作线性模型的第一层,通过指定参数input_tensor包装现有的张量或者指定参数input_shape创建新的占位符张量。
tf.compat.v1.disable_eager_execution()
a = tf.compat.v1.placeholder("float", (None, 32))
model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_tensor=a),
tf.keras.layers.Dense(64)
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 2112
=================================================================
Total params: 2,112
Trainable params: 2,112
Non-trainable params: 0
_________________________________________________________________
首先创建了一个占位符张量a,形状为(None, 32)。然后通过指定input_tensor=a包裹张量a作为输入张量。最终输出张量形状为(None, 64)。
model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=32),
tf.keras.layers.Dense(64)
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, 64) 2112
=================================================================
Total params: 2,112
Trainable params: 2,112
Non-trainable params: 0
_________________________________________________________________
指定指定参数input_shape=32,创建一个占位符张量tensor作为输入张量,形状为(None, 32)。经过一个Dense层,最终输出张量形状也为(None, 64)。
值得注意的是,如果同时指定input_shape和input_tensor,那么input_shape参数会失效,也就是根据现有的张量创建输入层。
还可以在其他层上指定input_shape参数来省略该层。
model = tf.keras.Sequential([
tf.keras.layers.Dense(64, input_shape=(None, 32))
])
Model: "sequential"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense (Dense) (None, None, 64) 2112
=================================================================
Total params: 2,112
Trainable params: 2,112
Non-trainable params: 0
_________________________________________________________________
通过在Dense层上指定input_shape=(None, 32),相当于创建一个张量形状为(None, None, 32)的输入层。通过Dense层后,最终形状为(None, None, 64)。
tf.keras.layers.InputLayer函数和tf.keras.Input函数区别:
tf.keras.Input函数返回的是一个张量Tensor,tf.keras.layers.InputLayer函数是一个layer对象。官网的建议是使用tf.keras.Input函数来创建一个InputLayer输入层,而不是直接使用tf.keras.layers.InputLayer来定义输入层。