ValueError:登录和标签在Tensorflow 2中必须具有相同的形状((无,4)与(无,1))

2024-05-15 05:12:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个多标签分类问题,我正试图用Tensorflow 2神经网络解决这个问题

问题-我试图预测一个cause及其对应的severity。我可以有n个原因,每个原因可能有m个严重性

为了简单起见

  • 原因数量=2
  • 每种原因的数量可能的严重性=2
  • 所以我们基本上有4种可能的输出
  • 我们还有4种可能的输入特性

我写了下面的代码-

import tensorflow as tf
from tensorflow.keras.layers import Dense, Flatten, Dropout
from tensorflow.keras import Model
from tensorflow.keras.callbacks import ModelCheckpoint

def get_model_multilabel(n_inputs, n_outputs):
    opt = tf.keras.optimizers.SGD(lr=0.01, momentum=0.9)
    model = tf.keras.models.Sequential([
        #input layer
        Dense(10, input_dim=n_inputs, kernel_initializer='he_uniform', activation='relu'),
        ## two hidden layer
        Dense(10, kernel_initializer='he_uniform', activation='relu'),
        Dropout(0.2),
        Dense(5, kernel_initializer='he_uniform', activation='relu'),
        Dropout(0.2),
        ## output layer
        Dense(n_outputs, activation='sigmoid')
    ])
    model.compile(loss='binary_crossentropy', optimizer=opt, metrics=['accuracy'])
    return model

n_inputs = 4 # because we have 4 features
n_outputs = 4 # because we have 4 labels

mlmodel = get_model_multilabel(n_inputs, n_outputs)

## train the model
mlmodel.fit(X_train,y_train, epochs=50, batch_size=32, validation_split = 0.2, callbacks=callbacks_list)

X_train.shape(1144, 4)y_train.shape(1144,)

注意最后一层中的sigmoid激活和binary_crossentropy丢失函数,因为我正在尝试对多标签分类问题建模。参考How do I implement multilabel classification neural network with keras

当我训练这个时,它会抛出错误

ValueError: logits and labels must have the same shape ((None, 4) vs (None, 1))

不知道我在这里错过了什么。请建议


Tags: fromimportmodeltftensorflow原因trainoutputs
1条回答
网友
1楼 · 发布于 2024-05-15 05:12:05

您的Y_序列的形状不正确,它应该是(1144,n_outputs),而不是(1144,),如果重新整形,则是(1144,1)。您的代码不知道样本数,因此它成为(None,1)。它必须与输出形状或(None,4)匹配。您加载的数据不正确

相关问题 更多 >

    热门问题