我应该在tensorflow.keras中使用哪种类型的输入_形状?
我正在通过TensorFlow的文档学习TensorFlow,对第一层中的我应该在tensorflow.keras中使用哪种类型的输入_形状?,tensorflow,keras,Tensorflow,Keras,我正在通过TensorFlow的文档学习TensorFlow,对第一层中的input\u shape类型有点困惑。有些示例有列表,但通常是一个元组。是否有任何特定的情况下,我必须使用某种类型 # I am learning RNN and see this example. tf.keras.layers.Dense(100, input_shape=[30]) tf.keras.layers.Dense(1) vs 它似乎取决于我的数据和其他一些事实,但我不知道哪一个决定了它的类型。在Ker
input\u shape
类型有点困惑。有些示例有列表
,但通常是一个元组。是否有任何特定的情况下,我必须使用某种类型
# I am learning RNN and see this example.
tf.keras.layers.Dense(100, input_shape=[30])
tf.keras.layers.Dense(1)
vs
它似乎取决于我的数据和其他一些事实,但我不知道哪一个决定了它的类型。在
Keras
中,输入层本身不是一个层,而是一个张量。这是我们发送到第一个隐藏层的起始张量。Kerasinput\u shape
参数需要一个可下标对象,其中每个维度的大小都可以存储为整数。以下是所有有效的方法:
tfd = tf.keras.layers.Dense(1, input_shape=(3,))
x = tfd(tf.ones(shape=(5, 3)))
print(x.shape) # (5, 1)
or,
tfd = tf.keras.layers.Dense(1, input_shape=[3])
x = tfd(tf.ones(shape=(5, 3)))
print(x.shape) # (5, 1)
注意,我们不能只传递input\u shape=3
,因为它不可下标。同样地
tfd = tf.keras.layers.Dense(1, input_shape=(224, 224, 3))
x = tfd(tf.ones(shape=(5, 3)))
print(x.shape) # (5, 1)
or,
tfd = tf.keras.layers.Dense(1, input_shape=[224, 224, 3])
x = tfd(tf.ones(shape=(5, 3)))
print(x.shape) # (5, 1)
该张量必须具有与我们的训练数据相同的形状。当您设置
input_shape=(224224,224,3)
时,意味着您拥有形状为224 x 224
的RGB图像的训练数据。模型一开始永远不知道这个形状,所以我们需要手动设置它。这主要是图像建模的一般情况。与RNN或序列建模相同:input\u-shape=(无,特征)
或input\u-shape=(特征,)
您可以使用列表或元组来定义输入形状,它们都给出相同的结果,请参见本例:
import tensorflow as tf
>>> tf.keras.Input(shape=(10,))
<tf.Tensor 'input_1:0' shape=(?, 10) dtype=float32>
>>> tf.keras.Input(shape=[10])
<tf.Tensor 'input_2:0' shape=(?, 10) dtype=float32>
>>> tf.keras.Input(shape=(32,32,3))
<tf.Tensor 'input_3:0' shape=(?, 32, 32, 3) dtype=float32>
>>> tf.keras.Input(shape=[32,32,3])
<tf.Tensor 'input_4:0' shape=(?, 32, 32, 3) dtype=float32>
将tensorflow导入为tf
>>>tf.keras.Input(shape=(10,))
>>>tf.keras.Input(shape=[10])
>>>tf.keras.Input(形状=(32,32,3))
>>>tf.keras.Input(shape=[32,32,3])
这取决于您,使用两者都没有好处或缺点。这同样适用于层中的input\u shape
。检查答案以了解更多序列建模方法。希望这能有所帮助。这并不能回答问题的真正含义。请让OP来决定。我觉得这回答了他的问题。如果他确认它不是他想要的,我会删除它。不,我们也可以阅读,这个问题询问输入形状的类型(元组或列表),而您的回答根本不涉及这一点。是的,我在回答的第一段告诉它。或者我应该包括更多的解释吗?如果你使用列表或元组,其实并不重要。谢谢你的好解释。我想确保我理解这同样适用于层中的输入形状
。你的意思是可以在任何其他第一层(例如,稠密层、Conv2D层、Lambda层)中使用元组或列表吗?@jayko03是的。明白了。谢谢你的帮助,史努比博士!
import tensorflow as tf
>>> tf.keras.Input(shape=(10,))
<tf.Tensor 'input_1:0' shape=(?, 10) dtype=float32>
>>> tf.keras.Input(shape=[10])
<tf.Tensor 'input_2:0' shape=(?, 10) dtype=float32>
>>> tf.keras.Input(shape=(32,32,3))
<tf.Tensor 'input_3:0' shape=(?, 32, 32, 3) dtype=float32>
>>> tf.keras.Input(shape=[32,32,3])
<tf.Tensor 'input_4:0' shape=(?, 32, 32, 3) dtype=float32>