Tensorflow 作为模型中的第一层,tf.keras.layers.Conv2D真的需要输入_形状吗?
根据onTensorflow 作为模型中的第一层,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
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
不是在初始化时,而是在构建时?