Как вы думаете, что не имеет градиента в этой модели керас? - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь обучить простую модель 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

Это модель в деталях: модель Это резюме модели: резюме

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...