Python 在Tensorflow 2.x中,我们不是';是否不需要指定输入形状?

Python 在Tensorflow 2.x中,我们不是';是否不需要指定输入形状?,python,conv-neural-network,tensorflow2.0,Python,Conv Neural Network,Tensorflow2.0,我刚刚读了官方的教程。下面是创建模型的代码示例: class MyModel(Model): def __init__(self): super(MyModel, self).__init__() self.conv1 = Conv2D(32, 3, activation='relu') self.flatten = Flatten() self.d1 = Dense(128, activation='relu') self.d2 = Dense(10

我刚刚读了官方的教程。下面是创建模型的代码示例:

class MyModel(Model):
  def __init__(self):
    super(MyModel, self).__init__()
    self.conv1 = Conv2D(32, 3, activation='relu')
    self.flatten = Flatten()
    self.d1 = Dense(128, activation='relu')
    self.d2 = Dense(10, activation='softmax')

  def call(self, x):
    x = self.conv1(x)
    x = self.flatten(x)
    x = self.d1(x)
    return self.d2(x)

# Create an instance of the model
model = MyModel()
我的问题是,为什么在上面的代码中,我们不需要在第一层(Conv2D)中指定输入形状?是否有任何官方文件提到这种行为

因为如果我读了官方文件,上面说:

将此层用作模型中的第一层时,请提供关键字参数input_shape(整数元组,不包括采样轴),例如input_shape=(128,128,3),用于数据格式为“channels_last”的128x128 RGB图片


一切都按计划进行

卷积作为一种运算,不管输入形状如何。只有输入的通道需要匹配。 您可以在tf.nn.conv2d中看到此行为按预期工作。(这就是您的代码段正在使用的内容)


现在,您正在链接对keras.conv2d的引用,该引用强制用户指定输入形状,以使代码更可读并“验证”用户输入。

是的,它正常工作,我还尝试删除简单NN的密集层中的输入形状,它也可以工作。但是,是否有任何官方文档提到这种行为?看起来在层调用期间,如果输入_形状设置为无或与当前输入不同,则卷积运算将根据当前输入重新定义。文档位于下面Conv.call()下链接中的代码中