Я недавно начал создавать последовательность к модели последовательности в Керасе, в основном после учебного пособия, ссылка на который приведена здесь: https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html
Несмотря на то, что он работал нормально, используя их метод, мне нужнодобавить слой встраивания в мою модель из-за ограничений памяти на моем устройстве.Когда я попытался добавить слои для встраивания, сеть дала следующий ответ.Я также дал важные фрагменты моего кода ниже.Я надеюсь, что это простая проблема, на которую я смотрю неправильно.Заранее большое спасибо!
Код:
encoder_input_data = np.zeros((len(inputs), max_len))
decoder_input_data = np.zeros((len(outputs), max_len))
decoder_target_data = np.zeros((len(outputs), max_len))
# Define an input sequence and process it.
encoder_inputs = Input(shape=(None,))
embedding = Embedding(num_encoder_tokens, latent_dim)
embeddingOutputs = embedding(encoder_inputs)
encoder = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder(embeddingOutputs)
# We discard `encoder_outputs` and only keep the states.
encoder_states = [state_h, state_c]
# Set up the decoder, using `encoder_states` as initial state.
decoder_inputs = Input(shape=(None,))
# We set up our decoder to return full output sequences,
# and to return internal states as well. We don't use the
# return states in the training model, but we will use them in inference.
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(embedding(decoder_inputs),
initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)
# Define the model that will turn
# `encoder_input_data` & `decoder_input_data` into `decoder_target_data`
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
model.compile(optimizer='rmsprop', loss='categorical_crossentropy')
for i in range(epochs):
# Run training
model.fit([encoder_input_data, decoder_input_data], decoder_target_data,
batch_size=batch_size,
epochs=1)
# Save model
model.save_weights('s2s.h5')
Сообщение об ошибке:
Traceback (most recent call last):
File "newTrain.py", line 182, in <module>
encoder_outputs, state_h, state_c = encoder(embeddingOutputs)
File "/usr/local/lib/python3.6/dist-packages/keras/layers/recurrent.py", line 532, in __call__
return super(RNN, self).__call__(inputs, **kwargs)
File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 414, in __call__
self.assert_input_compatibility(inputs)
File "/usr/local/lib/python3.6/dist-packages/keras/engine/base_layer.py", line 311, in assert_input_compatibility
str(K.ndim(x)))
ValueError: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4