Keras: difference of InputLayer and Input

2020-06-16 05:45发布

I made a model using Keras with Tensorflow. I use Inputlayer with these lines of code:

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)

But I get this error:

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.

When I use Input like this, it works fine:

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)

What is the difference between Inputlayer and Input?

2条回答
兄弟一词,经得起流年.
2楼-- · 2020-06-16 06:16

According to tensorflow website, "It is generally recommend to use the functional layer API via Input, (which creates an InputLayer) without directly using InputLayer." Know more at this page here

查看更多
成全新的幸福
3楼-- · 2020-06-16 06:17
  • InputLayer is a layer.
  • Input is a tensor.

You can only call layers passing tensors to them.

The idea is:

outputTensor = SomeLayer(inputTensor)

So, only Input can be passed because it's a tensor.

Honestly, I have no idea about the reason for the existence of InputLayer. Maybe it's supposed to be used internally. I never used it, and it seems I'll never need it.

查看更多
登录 后发表回答