Я пытаюсь обучить простую модель Encoder Decoder. В этом случае кодер является двунаправленной сетью, а декодер - нет. Поэтому я инициализирую декодер только с последними скрытыми состояниями кодера только в одном направлении (для соответствия размерам). Когда я компилирую, все выглядит нормально, но когда я пытаюсь тренироваться, я получаю следующую ошибку: Операция имеет None
для градиента. Пожалуйста, убедитесь, что все ваши операции имеют определенный градиент (то есть, дифференцируемы). Обычные операции без градиента: K.argmax, K.round, K.eval.
Кажется, все указывает на то, что в моей модели есть что-то, чему нельзя обучить, но я не знаю, что это может быть.
Может кто-нибудь сказать мне, что происходит?
Я пытался обучить сеть с реальными данными моей проблемы. Вот размеры используемых параметров:
params = {
"encoder_unit_size" : 16,
"decoder_unit_size" : 16,
"encoder_input_size" : 59400,
"decoder_input_size" : 165,
"embedding_size" : 100,
"Tx" : 162,
"Ty" : 13,
"vocab_out_size": 165
}
def model_train(Tx, Ty, encoder_unit_size, decoder_unit_size, encoder_input_size, decoder_input_size, embedding_size, vocab_out_size):
"""
Arguments:
Tx -- length of the input sequence
Ty -- length of the output sequence
encoder_unit_size -- hidden state size of the Bi-LSTM
decoder_unit_size -- hidden state size of the LSTM
encoder_input_size -- size of the input encoder module
decoder_input_size -- size of the input decoder module
embedding_size -- embedding size of the decoder input
vocab_out_size -- Size of vocabulary in decoder module
Returns:
model -- Keras model instance
"""
# Encoder module
encoder_input = Input(shape=(Tx, encoder_input_size))
#coded_input = Dense(vocab_out_size*2)(encoder_input)
# Step 1: Define Deep Bi-LSTM Enconder
fl_enc_seq, flast_h, flast_s, _, _ = Bidirectional(LSTM(encoder_unit_size,
return_sequences=True,
return_state=True),
merge_mode="concat")(encoder_input)
sl_enc_seq, slast_h, slast_s, _, _ = Bidirectional(LSTM(encoder_unit_size,
return_sequences=True,
return_state=True),
merge_mode="concat")(fl_enc_seq)
encoder_states = [[flast_h, flast_s],
[slast_h, slast_s]
]
# Decoder module
decoder_input = Input(shape=(Ty,decoder_input_size))
#decoder_embedding = Embedding(vocab_out_size,embedding_size, input_length=[Ty,decoder_input_size])(decoder_input)
dec_firts_layer, h_f_layer, c_f_layer = LSTM(decoder_unit_size,
return_state = True,
return_sequences = True,
)(decoder_input, initial_state= encoder_states[0])
dec_second_layer, h_s_layer, c_s_layer = LSTM(decoder_unit_size,
return_state = True,
return_sequences = True,
)(dec_firts_layer, initial_state= encoder_states[1])
outputs_layer = TimeDistributed(Dense(vocab_out_size, activation="softmax"))(dec_second_layer)
decoder_states = [[h_f_layer, c_f_layer],
[h_s_layer, c_s_layer]
]
model = Model(inputs = [encoder_input, decoder_input], outputs = outputs_layer)
plot_model(model, to_file='model.png', show_shapes=True)
return model, encoder_states, sl_enc_seq, decoder_states, dec_second_layer
Это модель в деталях: модель
Это резюме модели: резюме