web-dev-qa-db-ja.com

シンボリックテンソルケラスではない入力で呼び出されるレイヤー

1つのレイヤーの出力を2つの異なるレイヤーに渡してから、それらを再び結合しようとしています。ただし、このエラーによって停止され、入力がシンボリックテンソルではないことがわかります。

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

しかし、私は非常に密接にドキュメントに従っていると信じています: https://keras.io/getting-started/functional-api-guide/#multi-input-and-multi-output-models

そして、なぜこれが間違っているのか完全にはわかりませんか?

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])

ありがとう

18
tryingtolearn

LSTMレイヤーに実際に入力を与えているわけではないようです。回帰ニューロンの数と入力のshapeを指定しますが、入力は提供しません。試してください:

lstm_out = LSTM(128, input_shape=(maxlen, len(chars)))(net_input)
23
Aditya Gune

ドキュメントはわかりにくいかもしれませんが、Concatenateは実際にはパラメーターとして「軸」のみを必要としますが、レイヤーを渡します。レイヤーは、次のようにその結果の引数として渡す必要があります。

変更する行:

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

方法:

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

3
Alessio Mauro

連結するにはaxis = 1を追加する必要があると思います。試してください:

x = keras.layers.concatenate([book_out, char_out], axis=1)
0
Tina