Keras: difference of InputLayer and Input

2020-06-16 05:57发布

问题:

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?

回答1:

  • 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.



回答2:

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