簡體   English   中英

AssertionError:無法計算 output 張量(“softmax_layer/Identity:0”,shape=(None, 27, 8870),dtype=float32)

[英]AssertionError: Could not compute output Tensor(“softmax_layer/Identity:0”, shape=(None, 27, 8870), dtype=float32)

我正在嘗試開發具有注意力機制的聊天機器人。 但它給出了這樣的錯誤。 我的 x_train 輸入形狀是 (None, 27) 和 output 形狀是 (None, 27, 8870)。 但我無法正確識別錯誤。

def chatbot_model(embedding_size, max_sentence_length, vocab_size, embedding_matrix, batch_size=None):

  if batch_size:
    encoder_inputs = Input(batch_shape=(batch_size, max_sentence_length, ), name='encoder_inputs')
    decoder_inputs = Input(batch_shape=(batch_size, max_sentence_length, ), name='decoder_inputs')
  else:
    encoder_inputs = Input(shape=(max_sentence_length, ), name='encoder_inputs')
    decoder_inputs = Input(shape=(max_sentence_length, ), name='decoder_inputs')

  embedding_layer = Embedding(vocab_size, embedding_size, weights=[embedding_matrix], input_length=max_sentence_length)
  encoder_inputs_embed = embedding_layer(encoder_inputs)
  decoder_inputs_embed = embedding_layer(decoder_inputs)

  encoder_lstm = Bidirectional(LSTM(embedding_size, return_sequences=True, return_state=True, name='encoder_lstm'), name='bidirectional_encoder')
  encoder_out, encoder_fwd_state_h, encoder_fwd_state_c, encoder_back_state_h, encoder_back_state_c = encoder_lstm(encoder_inputs_embed)
  state_h = Concatenate()([encoder_fwd_state_h, encoder_back_state_h])
  state_c = Concatenate()([encoder_fwd_state_c, encoder_back_state_c])
  enc_states = [state_h, state_c]

  decoder_lstm = LSTM(embedding_size*2, return_sequences=True, return_state=True, name='decoder_lstm')
  decoder_out, decoder_state, *_ = decoder_lstm(
        decoder_inputs_embed, initial_state=enc_states
    )

  attn_layer = AttentionLayer(name='attention_layer')
  attn_out, attn_states = attn_layer([encoder_out, decoder_out])

  decoder_concat_input = Concatenate(axis=-1, name='concat_layer')([decoder_out, attn_out])

  print('decoder_concat_input', decoder_concat_input)

  dense = Dense(vocab_size, activation='softmax', name='softmax_layer')
  dense_time = TimeDistributed(dense, name='time_distributed_layer')
  decoder_pred = dense_time(decoder_concat_input)

  full_model = Model(inputs=[encoder_inputs, decoder_inputs], outputs=decoder_pred)
  full_model.compile(optimizer='adam', loss='categorical_crossentropy')

  full_model.summary()

  """ Inference model """
  batch_size = 1

  encoder_inf_inputs = Input(batch_shape=(batch_size, max_sentence_length, ), name='encoder_inf_inputs')
  encoder_inf_inputs_embed = embedding_layer(encoder_inf_inputs)
  encoder_inf_out, encoder_inf_fwd_state_h, encoder_inf_fwd_state_c, encoder_inf_back_state_h, encoder_inf_back_state_c = encoder_lstm(encoder_inf_inputs_embed)
  inf_state_h = Concatenate()([encoder_inf_fwd_state_h, encoder_inf_back_state_h])
  inf_state_c = Concatenate()([encoder_inf_fwd_state_c, encoder_inf_back_state_c])
  enc_inf_states = [inf_state_h, state_c]
  encoder_model = Model(inputs=encoder_inf_inputs, outputs=[encoder_inf_out, encoder_inf_fwd_state_h, encoder_inf_fwd_state_c, encoder_inf_back_state_h, encoder_inf_back_state_c])

  decoder_inf_inputs = Input(batch_shape=(batch_size, 1, ), name='decoder_word_inputs')
  decoder_inf_inputs_embed = embedding_layer(decoder_inf_inputs)
  encoder_inf_states = Input(batch_shape=(batch_size, max_sentence_length, 2*embedding_size), name='encoder_inf_states')
  decoder_init_state_h = Input(batch_shape=(batch_size, 2*embedding_size), name='decoder_init_state_h')
  decoder_init_state_c = Input(batch_shape=(batch_size, 2*embedding_size), name='decoder_init_state_c')
  decoder_init_states = [decoder_init_state_h, decoder_init_state_c]

  decoder_inf_out, decoder_inf_state_h, decoder_inf_state_c = decoder_lstm(decoder_inf_inputs_embed, initial_state=decoder_init_states)
  decoder_inf_states = [decoder_inf_state_h, decoder_inf_state_c]
  attn_inf_out, attn_inf_states = attn_layer([encoder_inf_states, decoder_inf_out])
  decoder_inf_concat = Concatenate(axis=-1, name='concat')([decoder_inf_out, attn_inf_out])
  decoder_inf_pred = TimeDistributed(dense)(decoder_inf_concat)
  decoder_model = Model(inputs=[encoder_inf_states, decoder_init_states, decoder_inf_inputs],
                        outputs=[decoder_inf_pred, attn_inf_states, decoder_inf_states])

  return full_model, encoder_model, decoder_model

它給出了這樣的錯誤:

AssertionError                            Traceback (most recent call last)

in () ----> 1 full_model.fit(x_train[:1000, :], outs, epochs=1, batch_size=BATCH_SIZE)

AssertionError:在用戶代碼中:

/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:571 train_function  *
    outputs = self.distribute_strategy.run(
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:951 run  **
    return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2290 call_for_each_replica
    return self._call_for_each_replica(fn, args, kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/distribute/distribute_lib.py:2649 _call_for_each_replica
    return fn(*args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/training.py:531 train_step  **
    y_pred = self(x, training=True)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/base_layer.py:927 __call__
    outputs = call_fn(cast_inputs, *args, **kwargs)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py:719 call
    convert_kwargs_to_constants=base_layer_utils.call_context().saving)
/usr/local/lib/python3.6/dist-packages/tensorflow/python/keras/engine/network.py:899 _run_internal_graph
    assert str(id(x)) in tensor_dict, 'Could not compute output ' + str(x)

AssertionError: Could not compute output Tensor("time_distributed_layer/Identity:0", shape=(None, 27, 8870), dtype=float32)

model 訓練成功后不預測? 還是尚未編譯 model?

我在 tensorflow github 頁面上發布了一個問題。

問題的鏈接

在我的情況下,model 在成功訓練后沒有預測數據集。 關注該問題以獲取更多信息。謝謝

full_model.fit(x_train[:1000, :], outs, epochs=1, batch_size=BATCH_SIZE)

在您聲明 2 時僅傳遞 1 個輸入

  full_model = Model(inputs=[encoder_inputs, decoder_inputs], outputs=decoder_pred)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM