简体   繁体   English

Keras ValueError:尺寸必须等于 LSTM

[英]Keras ValueError: Dimensions must be equal LSTM

I'm creating a Bidirectional LSTM but I faced following error我正在创建一个双向 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]

I have no idea what is wrong and how to fix it!我不知道出了什么问题以及如何解决它!

I have a text dataset with 59k row for train the model and i would divid them into 15 classes which then I would use for text similarity base on classes for the received new text.我有一个包含 59k 行的文本数据集来训练模型,我会将它们分成 15 个类,然后我将根据接收到的新文本的类将它们用于文本相似性。 Based on the other post I played with loss but still it doesn't solve the issue.根据我玩过的另一篇文章,但它仍然没有解决问题。

Here is the model plot:这是模型图:模型图

Also sequential model would be as follow:顺序模型也如下:

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)

This is the model summary:这是模型摘要:

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
_________________________________

and dataset shape:和数据集形状:

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

Finally, here is the error:最后,这是错误:

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].

the problem is because of the Loss function and y-label shape.问题在于损失函数和 y 标签形状。 we should not pad y_label and it should fit the model directly without any other process我们不应该填充 y_label 并且它应该直接适合模型而不需要任何其他过程

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Keras ValueError:尺寸必须相等,但对于'{{node Equal}},尺寸必须是6和9 - Keras ValueError: Dimensions must be equal, but are 6 and 9 for '{{node Equal}} Keras 顺序 - ValueError:尺寸必须相等 - Keras Sequential - ValueError: Dimensions must be equal ValueError:维度必须等于 RNN - Keras - ValueError: Dimensions must be equal RNN - Keras Tensorflow 值错误:尺寸必须相等:LSTM+MDN - Tensorflow ValueError: Dimensions must be equal: LSTM+MDN Tensorflow:ValueError:尺寸必须相等 - Tensorflow : ValueError: Dimensions must be equal Keras ValueError:尺寸必须相等,但对于具有输入形状的“{{node Equal}}”,尺寸为 9 和 400:[?,9], [?,300,400] - Keras ValueError: Dimensions must be equal, but are 9 and 400 for '{{node Equal}}' with input shapes: [?,9], [?,300,400] ValueError:尺寸必须相等,但为 508 和 512 - ValueError: Dimensions must be equal, but are 508 and 512 送入数据-ValueError:尺寸必须相等 - Feeding data - ValueError: Dimensions must be equal ValueError:尺寸必须相等,输入形状 - ValueError: Dimensions must be equal, with input shapes CRF 层 ValueError: 维度必须相等,但分别为 75 和 8 - CRF layer ValueError: Dimensions must be equal, but are 75 and 8 for
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM