keras 无效参数错误:图形执行错误-索引[31,66] = -1不在[0,3345)中

yvfmudvl  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(124)

错误输出:

InvalidArgumentError                      Traceback (most recent call last)
Input In [22], in <cell line: 5>()
      3 cnn.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
      4 print(X_train)
----> 5 cnn.fit(X_train, y_train)
...
Node: 'model/embedding/embedding_lookup'
indices[31,66] = -1 is not in [0, 3345)
     [[{{node model/embedding/embedding_lookup}}]] [Op:__inference_train_function_1090]

我试图做一个文本分类CNN,所以X_train包含-1到1范围内的单词的特征向量(在使用MinMaxScaler之后),y_train是数字标签。
模型总结如下:

Layer (type)                   Output Shape         Param #     Connected to                     
==================================================================================================
 input_3 (InputLayer)           [(None, None)]       0           []                               
                                                                                                  
 embedding_2 (Embedding)        (None, None, 128)    428160      ['input_3[0][0]']                
                                                                                                  
 conv1d_6 (Conv1D)              (None, None, 16)     6160        ['embedding_2[0][0]']            
                                                                                                  
 conv1d_7 (Conv1D)              (None, None, 16)     10256       ['embedding_2[0][0]']            
                                                                                                  
 conv1d_8 (Conv1D)              (None, None, 16)     14352       ['embedding_2[0][0]']            
                                                                                                  
 global_max_pooling1d_6 (Global  (None, 16)          0           ['conv1d_6[0][0]']               
 MaxPooling1D)                                                                                    
                                                                                                  
 global_max_pooling1d_7 (Global  (None, 16)          0           ['conv1d_7[0][0]']               
 MaxPooling1D)                                                                                    
                                                                                                  
 global_max_pooling1d_8 (Global  (None, 16)          0           ['conv1d_8[0][0]']               
 MaxPooling1D)                                                                                    
                                                                                                  
 tf.concat_2 (TFOpLambda)       (None, 48)           0           ['global_max_pooling1d_6[0][0]', 
                                                                  'global_max_pooling1d_7[0][0]', 
                                                                  'global_max_pooling1d_8[0][0]'] 
                                                                                                  
 dense_2 (Dense)                (None, 6)            294         ['tf.concat_2[0][0]']            
                                                                                                  
==================================================================================================
Total params: 459,222
Trainable params: 459,222
Non-trainable params: 0

错误可能源自何处?
谢谢你,谢谢你

yrefmtwq

yrefmtwq1#

如果你的输入不是整数,而是真实的,那么使用Embedding Layer不是一个好主意,因为当你的输入是Keras.utils.preprocessing.text.Tokenizer()的输出时,Keras.layers.Embedding()可以很好地工作。如果你想做一个NLP任务,那么使用Tokenizer();如果你的任务是分类,那么使用word 2 vec,在这种情况下它可以很好地工作。
Keras的嵌入层不接受负数来嵌入矢量,如果你想在最小-最大尺度上对你的特征进行分类,那么就进行word 2 vec矢量化,这就是为什么你要使用Keras嵌入层的原因。但是如果你想使用嵌入层,那么就使用输入应该与嵌入层兼容的管道。

相关问题