Ошибка Keras: объект NoneType’ не имеет атрибута ‘_inbound_nodes’

#python #tensorflow #keras

#python #тензорный поток #keras

Вопрос:

Я пытаюсь запрограммировать тип сети кодировщика-декодера с модулем attention в keras 2.2.4, но у меня следующая ошибка, и я не смог ее исправить. Кто-нибудь, кто может мне помочь с этим?

 def model(Tx, Ty, encoder_unit_size, decoder_unit_size, encoder_embedding_input_size, decoder_embedding_input_size, embedding_size, 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_embedding_input_size -- size of the input embedding in encoder module
decoder_embedding_input_size -- size of the input embedding in decoder module
embedding_size -- embedding size of the decoder input
Returns:
model -- Keras model instance
"""

# Encoder module
encoder_input = Input(shape=(Tx, encoder_embedding_input_size))

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

# Decoder module 

decoder_input = Input(shape=(Ty, decoder_embedding_input_size)) 

# Step 2: Define Deep LSTM Decoder. Hidden and state initialization with last outputs of encoder.
fl_dec_seq = LSTM(decoder_unit_size, 
                  return_sequences=True,
                  unroll= False)(decoder_input, initial_state=[flast_h, flast_s])

sl_dec_seq = LSTM(decoder_unit_size, 
                  return_sequences=True, 
                  unroll= False)(fl_dec_seq, initial_state=[slast_h, slast_s])

# Step 3: Attention module
outputs = [] 

# Iterate for Ty steps
for t in range(Ty):
    context_vector = one_step_attention(sl_enc_seq, sl_dec_seq[:,t,:])
    decoder_context = concatenator([tf.expand_dims(sl_dec_seq[:,t,:], 1), context_vector])

    fc_out = dense_output_layer(decoder_context)

    outputs.append(fc_out)    

output_tensor = Lambda(lambda x:tf.convert_to_tensor(x, dtype=tf.float32))(outputs)
outputs_layer = TimeDistributed(Dense(out_size, activation="softmax"))(output_tensor)
print(outputs_layer.shape)

model = Model(inputs = [encoder_input, decoder_input], outputs = outputs_layer)
return model
  

Это результат:

(50, ?, 1, 1024)


Ошибка атрибута: объект ‘NoneType’ не имеет атрибута ‘_inbound_nodes’

Я думаю, что ошибка возникает при возврате выходных данных:

введите описание изображения здесь

Комментарии:

1. С какими аргументами вы запускали функцию?

2. Я запустил функцию модели со следующими аргументами: encoder_unit_size= 512, decoder_unit_size= 512, encoder_embedding_input_size= 400, decoder_embedding_input_size= 512, embedding_size = 300, Tx = 100, Ty = 50, output_size = 1024 . Как я понял, это могло быть потому, что он возвращал значения, которые не были получены в результате layer, или потому, что он использовал такие функции, как tf.concat, и они должны были быть Keras. Я исправил это, но это не устранило проблему.