我应该在tensorflow.keras中使用哪种类型的输入_形状?

我应该在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

我正在通过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


它似乎取决于我的数据和其他一些事实,但我不知道哪一个决定了它的类型。

Keras
中,输入层本身不是一个层,而是一个张量。这是我们发送到第一个隐藏层的起始张量。Keras
input\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>