张量流异常:ValueError:形状(无,1)和(无,5)不兼容

问题描述 投票:0回答:1

我尝试使用“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:形状(无,1)和(无,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']) *``

有人知道我必须做什么吗?

python numpy tensorflow keras word-embedding
1个回答
0
投票

您的预测层有 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']) 
© www.soinside.com 2019 - 2024. All rights reserved.