Layer called with an input that isn't a symbolic tensor keras
Asked Answered
O

3

22

I'm trying to pass the output of one layer into two different layers and then join them back together. However, I'm being stopped by this error which is telling me that my input isn't a symbolic tensor.

Received type: <class 'keras.layers.recurrent.LSTM'>. All inputs to the layers should be tensors.

However, I believe I'm following the documentation quite closely: https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models

and am not entirely sure why this is wrong?

net_input = Input(shape=(maxlen, len(chars)), name='net_input')
lstm_out = LSTM(128, input_shape=(maxlen, len(chars)))

book_out = Dense(len(books), activation='softmax', name='book_output')(lstm_out)
char_out = Dense(len(chars-4), activation='softmax', name='char_output')(lstm_out)

x = keras.layers.concatenate([book_out, char_out])
net_output = Dense(len(chars)+len(books), activation='sigmoid', name='net_output')

model = Model(inputs=[net_input], outputs=[net_output])

Thanks

Overstrain answered 30/6, 2017 at 17:38 Comment(0)
I
26

It looks like you're not actually giving an input to your LSTM layer. You specify the number of recurrent neurons and the shape of the input, but do not provide an input. Try:

lstm_out = LSTM(128, input_shape=(maxlen, len(chars)))(net_input)
Idden answered 30/6, 2017 at 18:3 Comment(3)
I think the same applies to the last Dense.Savino
it could be a typo alsoGale
Yes, if you provide net_input as the input to the LSTM layer and x as the input to the dense layer, everything works without any other modification. The cryptic error is because the graph wasn't connected.Uphemia
O
10

I know, documentation can be confusing, but Concatenate actually only requires "axis" as parameter, while you passed the layers. The layers need to be passed as argument to the result of it as follow:

Line to modify:

x = keras.layers.concatenate([book_out, char_out])

How it should be:

x = keras.layers.Concatenate()([book_out, char_out])

Ooze answered 30/7, 2019 at 21:23 Comment(0)
K
-1

I think you need to add axis=1 to concatenate, Try:

x = keras.layers.concatenate([book_out, char_out], axis=1)
Kali answered 29/11, 2018 at 22:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.