numpy tensorflow异常:ValueError:形状(None,1)和(None,5)不兼容

g6ll5ycj  于 2023-08-05  发布在  其他
关注(0)|答案(1)|浏览(134)

我尝试用“BBC新闻档案”的数据进行训练。因此,要训练的序列具有以下形状:训练序列:(1780,120),验证序列:(445,120)
标签具有以下形状:标签培训:(1780,1)标签确认:(445,1)
我的模型摘要看起来像这样(我只想得到5个最常见的标签):

Layer (type)                Output Shape              Param #   
=================================================================
 embedding_2 (Embedding)     (None, 120, 16)           16000     
                                                                 
 global_average_pooling1d_2   (None, 16)               0         
 (GlobalAveragePooling1D)                                        
                                                                 
 dropout_4 (Dropout)         (None, 16)                0         
                                                                 
 dense_4 (Dense)             (None, 512)               8704      
                                                                 
 dropout_5 (Dropout)         (None, 512)               0         
                                                                 
 dense_5 (Dense)             (None, 5)                 2565      
                                                                 
=================================================================
Total params: 27,269
Trainable params: 27,269
Non-trainable params: 0

字符串
当我尝试拟合它时,我得到以下异常:
ValueError:Shapes(None,1)和(None,5)不兼容
模型是用Keras创建的:

*model = tf.keras.Sequential([ 
    tf.keras.layers.Embedding(num_words, embedding_dim, input_length = maxlen),
    tf.keras.layers.GlobalAveragePooling1D(),
    tf.keras.layers.Dropout(0.25),
    tf.keras.layers.Dense(512, activation = 'relu'),
    tf.keras.layers.Dropout(0.1),
    tf.keras.layers.Dense(5, activation ='sigmoid')
    ])

model.compile(loss = 'categorical_crossentropy',
              optimizer = 'adam',
              metrics = ['accuracy']) *``


有人知道我该怎么做吗?

tquggr8v

tquggr8v1#

您的预测层有5个单元,而每个数据样本只有1个标签。这里有一个明显的不匹配。替换最后一层:

tf.keras.layers.Dense(5, activation ='sigmoid')

字符串
用这个:

tf.keras.layers.Dense(1, activation ='sigmoid')


这至少可以帮助您解决形状不匹配的问题。

**附加:**从标签的形状和最终的激活函数(= sigmoid)来看,我假设您正在执行二进制分类任务。在这种情况下,你的损失函数需要改变如下:

model.compile(loss = 'binary_crossentropy',
          optimizer = 'adam',
          metrics = ['accuracy'])

相关问题