簡體   English   中英

Keras ValueError:尺寸必須等於 LSTM

[英]Keras ValueError: Dimensions must be equal LSTM

我正在創建一個雙向 LSTM,但我遇到了以下錯誤

ValueError: Dimensions must be equal, but are 5 and 250 for '{{node Equal}} = Equal[T=DT_INT64, incompatible_shape_error=true](ArgMax, ArgMax_1)' with input shapes: [?,5], [?,250]

我不知道出了什么問題以及如何解決它!

我有一個包含 59k 行的文本數據集來訓練模型,我會將它們分成 15 個類,然后我將根據接收到的新文本的類將它們用於文本相似性。 根據我玩過的另一篇文章,但它仍然沒有解決問題。

這是模型圖:模型圖

順序模型也如下:

model_lstm = Sequential()

model_lstm.add(InputLayer(250,))

model_lstm.add(Embedding(input_dim=max_words+1, output_dim=200, weights=[embedding_matrix],
                         mask_zero=True, trainable= True, name='corpus_embed')) 

enc_lstm = Bidirectional(LSTM(128, activation='sigmoid', return_sequences=True, name='LSTM_Encod'))
model_lstm.add(enc_lstm)

model_lstm.add(Dropout(0.25))

model_lstm.add(Bidirectional(LSTM( 128, activation='sigmoid',dropout=0.25, return_sequences=True, name='LSTM_Decod')))

model_lstm.add(Dropout(0.25))

model_lstm.add(Dense(15, activation='softmax'))


model_lstm.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['Accuracy'])

## Feed the model

history = model_lstm.fit(x=corpus_seq_train,
                         y=target_seq_train,
                         batch_size=128,
                         epochs=50, 
                         validation_data=(corpus_seq_test,target_seq_test),
                         callbacks=[tensorboard],
                         sample_weight= sample_wt_mat)

這是模型摘要:

Model: "sequential"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 corpus_embed (Embedding)    (None, 250, 200)          4000200   
                                                                 
 bidirectional (Bidirectiona  (None, 250, 256)         336896    
 l)                                                              
                                                                 
 dropout (Dropout)           (None, 250, 256)          0         
                                                                 
 bidirectional_1 (Bidirectio  (None, 250, 256)         394240    
 nal)                                                            
                                                                 
 dropout_1 (Dropout)         (None, 250, 256)          0         
                                                                 
 dense (Dense)               (None, 250, 15)           3855      
                                                                 
=================================================================
Total params: 4,735,191
Trainable params: 4,735,191
Non-trainable params: 0
_________________________________

和數據集形狀:

corpus_seq_train.shape, target_seq_train.shape
((59597, 250), (59597, 5, 8205))

最后,這是錯誤:

Epoch 1/50

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
C:\Users\AMIRSH~1\AppData\Local\Temp/ipykernel_10004/3838451254.py in <module>
      9 ## Feed the model
     10 
---> 11 history = model_lstm.fit(x=corpus_seq_train,
     12                          y=target_seq_train,
     13                          batch_size=128,

C:\ProgramData\Anaconda3\lib\site-packages\keras\utils\traceback_utils.py in error_handler(*args, **kwargs)
     65     except Exception as e:  # pylint: disable=broad-except
     66       filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67       raise e.with_traceback(filtered_tb) from None
     68     finally:
     69       del filtered_tb

C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py in tf__train_function(iterator)
     13                 try:
     14                     do_return = True
---> 15                     retval_ = ag__.converted_call(ag__.ld(step_function), (ag__.ld(self), ag__.ld(iterator)), None, fscope)
     16                 except:
     17                     do_return = False

ValueError: in user code:

    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 1051, in train_function  *
        return step_function(self, iterator)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 1040, in step_function  **
        outputs = model.distribute_strategy.run(run_step, args=(data,))
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 1030, in run_step  **
        outputs = model.train_step(data)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 894, in train_step
        return self.compute_metrics(x, y, y_pred, sample_weight)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\training.py", line 987, in compute_metrics
        self.compiled_metrics.update_state(y, y_pred, sample_weight)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\engine\compile_utils.py", line 501, in update_state
        metric_obj.update_state(y_t, y_p, sample_weight=mask)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\utils\metrics_utils.py", line 70, in decorated
        update_op = update_state_fn(*args, **kwargs)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\metrics\base_metric.py", line 140, in update_state_fn
        return ag_update_state(*args, **kwargs)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\metrics\base_metric.py", line 646, in update_state  **
        matches = ag_fn(y_true, y_pred, **self._fn_kwargs)
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\metrics\metrics.py", line 3295, in categorical_accuracy
        return metrics_utils.sparse_categorical_matches(
    File "C:\ProgramData\Anaconda3\lib\site-packages\keras\utils\metrics_utils.py", line 893, in sparse_categorical_matches
        matches = tf.cast(tf.equal(y_true, y_pred), backend.floatx())

    ValueError: Dimensions must be equal, but are 5 and 250 for '{{node Equal}} = Equal[T=DT_INT64, incompatible_shape_error=true](ArgMax, ArgMax_1)' with input shapes: [?,5], [?,250].

問題在於損失函數和 y 標簽形狀。 我們不應該填充 y_label 並且它應該直接適合模型而不需要任何其他過程

暫無
暫無

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

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