Tensorflow 作为模型中的第一层,tf.keras.layers.Conv2D真的需要输入_形状吗?

Tensorflow 作为模型中的第一层,tf.keras.layers.Conv2D真的需要输入_形状吗?,tensorflow,keras-layer,Tensorflow,Keras Layer,根据ontf.keras.layers.Conv2D 将此层用作模型中的第一层时,请提供关键字参数input_shape(整数元组,不包括样本轴),例如input_shape=(128,128,3),用于数据格式为“channels_last”的128x128 RGB图片 但实际上,在没有输入_形状的情况下,它可以在图形执行和渴望执行环境中工作 在图形执行中 import tensorflow as tf from tensorflow.keras.layers import Conv2D, F

根据on
tf.keras.layers.Conv2D

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

但实际上,在没有输入_形状的情况下,它可以在图形执行和渴望执行环境中工作

在图形执行中

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, Flatten, Dense

class CNN(tf.keras.Model):

    def __init__(self):
        super(CNN, self).__init__()
        self.conv = Conv2D(1, 3, padding='same', data_format='channels_first')
        self.flatten = Flatten()
        self.dense = Dense(1)

    def call(self, inputs):
        x = self.conv(inputs)
        x = self.flatten(x)
        return self.dense(x)


cnn = CNN()
inputs = tf.random_uniform([2, 3, 16, 16])
outputs = cnn(inputs)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    outputs = sess.run(outputs)
    print(outputs)
工作无误,执行迅速

import tensorflow as tf
from tensorflow.keras.layers import Conv2D, Flatten, Dense
tf.enable_eager_execution()

class CNN(tf.keras.Model):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv = Conv2D(1, 3, padding='same', data_format='channels_first')
        self.flatten = Flatten()
        self.dense = Dense(1)

    def call(self, inputs):
        x = self.conv(inputs)
        x = self.flatten(x)
        return self.dense(x)


cnn = CNN()
inputs = tf.random_uniform([2, 3, 16, 16])
outputs = cnn(inputs)
print(outputs)
也有

Q1:tf.keras.layers.Conv2D作为模型中的第一层,是否真的需要指定
input\u shape

问题2:如果没有,何时需要,为什么在正式文件中提到

更新1: 说

输入维度的数量通常是不必要的,因为它可以被推断出来 第一次使用该层时,如果您愿意,可以提供该层 手动指定它,这在某些复杂模型中很有用

更新2:
TensorFlow源代码中docstring的
git Gull
显示该文档是从Keras API(不是TensorFlow Keras API)复制的。

卷积通常不需要输入形状。实际上,您可以为同一网络提供不同的输入形状,但如果您为tensorflow提供一个输入形状,则速度要快得多。我认为原因,为什么会在文件中说明


tensorflow的原始方法甚至没有输入形状的参数。

谢谢!顺便说一句,tensorflow的原始方法是指什么?如果你的答案是正确的,我可以在构建时而不是在初始化时修复输入形状吗?还是应该问另一个问题?在引擎盖下使用
tf.nn.conv2d
。()但是KARS调用C++ API而不是Python。FIX的意思是什么?FIX意味着指定。换句话说,我是否可以指定
input\u shape
不是在初始化时,而是在构建时?