Keras:InputLayer和Input的区别

knsnq2tg  于 2023-08-06  发布在  其他
关注(0)|答案(5)|浏览(130)

我用Keras和Tensorflow做了一个模型。我将Inputlayer与以下几行代码一起使用:

img1 = tf.placeholder(tf.float32, shape=(None, img_width, img_heigh, img_ch))
first_input = InputLayer(input_tensor=img1, input_shape=(img_width, img_heigh, img_ch)) 
first_dense = Conv2D(16, 3, 3, activation='relu', border_mode='same', name='1st_conv1')(first_input)

字符串
但我得到这个错误:

ValueError: Layer 1st_conv1 was called with an input that isn't a symbolic tensor. Received type: <class 'keras.engine.topology.InputLayer'>. Full input: [<keras.engine.topology.InputLayer object at 0x00000000112170F0>]. All inputs to the layer should be tensors.


当我像这样使用Input时,它工作得很好:

first_input = Input(tensor=img1, shape=(224, 224, 3), name='1st_input')
first_dense = Conv2D(16, 3, 3, activation='relu', border_mode='same', name='1st_conv1')(first_input)


InputlayerInput之间有什么区别?

dbf7pr2w

dbf7pr2w1#

  • InputLayer是一个层。
  • Input是Tensor。

你只能调用层传递Tensor给它们。

思路是:

outputTensor = SomeLayer(inputTensor)

字符串
因此,只能传递Input,因为它是Tensor。
老实说,我不知道InputLayer存在的原因。可能是内部使用的。我从来没有用过它,似乎我永远也不需要它。

izkcnapc

izkcnapc2#

根据tensorflow网站,“通常建议通过Input使用功能层API,(这会创建一个InputLayer),而不直接使用InputLayer。”

czfnxgou

czfnxgou3#

输入:用于创建功能模型

inp=tf.keras.Input(shape=[?,?,?])
x=layers.Conv2D(.....)(inp)

字符串
输入层:用于创建顺序模型

x=tf.keras.Sequential()
x.add(tf.keras.layers.InputLayer(shape=[?,?,?]))


另一个区别是
在Keras Sequential模型中使用InputLayer时,可以通过将input_shape参数移动到InputLayer之后的第一个层来跳过它。
也就是说,在连续模型中,您可以跳过InputLayer,直接在第一层中指定形状。即从这个

model = tf.keras.Sequential([
tf.keras.layers.InputLayer(input_shape=(4,)),
tf.keras.layers.Dense(8)])


到这个

model = tf.keras.Sequential([
tf.keras.layers.Dense(8, input_shape=(4,))])

6ojccjat

6ojccjat4#

用简单的话来定义它:
keras.layers.Input用于示例化KerasTensor。在这种情况下,你的数据可能不是一个tfTensor,可能是一个np数组。
另一方面,keras.layers.InputLayer是一个层,其中您的数据已经定义为tfTensor类型之一,即可以是不规则Tensor或常量或其他类型。
希望这对你有帮助!

bn31dyow

bn31dyow5#

只是补充已经说过的内容,我测试了它们,它们似乎并不等同(类似的布局不会产生完全相同的结果)。因此,按照建议使用input_shape可能会更好。


的数据


相关问题