为了账号安全,请及时绑定邮箱和手机立即绑定

ValueError:logits 和标签必须具有相同的形状 ((None, 14)

ValueError:logits 和标签必须具有相同的形状 ((None, 14)

一只斗牛犬 2023-01-04 14:24:14
我正在创建一个 CNN,它使用 14 个可以共存的不同类别对 CXR 进行多标签分类。( https://stanfordmlgroup.github.io/competitions/cheexpert/ )。我将 Python 与 Keras 和 Tensorflow 一起使用,现在我正在尝试让代码工作(使用小型测试 CNN),但我收到错误“ValueError:logits 和标签必须具有相同的形状((None,14)vs(无,1))”我使用了具有二元交叉熵损失的 sigmoid 激活函数。我认为创建训练和验证数据集可能会出现问题。如图所示,我将 ImageDataGenerator.flow_from_dataframe 函数与 pandas 数据框一起使用,所有 14 个标签(0 或 1)都有一列。 熊猫数据框结构我在 stackoverflow/github 上搜索了同样的问题,但他们大多不使用 ImageDataGenerator 并且必须调整 X 或 Y 的大小,但我不知道我将如何做到这一点。有谁知道出了什么问题?提前致谢!我的代码如下。import pandas as pdimport tensorflow as tffrom tensorflow import kerasfrom tensorflow.keras.preprocessing.image import ImageDataGeneratorfrom tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense, Dropout, Activation, Flattenfrom tensorflow.keras.layers import Conv2D, MaxPooling2Dfrom tensorflow.keras.callbacks import TensorBoardimport timeimport h5pydf = pd.read_csv('D:\\Milou\\CheXpert-v1.0-small\\train.csv', usecols = [0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18])df = df.fillna(0)           # Change NaN values to 0df = df.convert_dtypes()    # Change datatypes from float to integer if possibledf = df.replace({-1 : 0})   # Regard the uncertain labels '-1' as negativeprint(df.head(5))label_names = ["No Finding", "Enlarged Cardiomediastinum", "Cardiomegaly", "Lung Opacity", "Lung Lesion", "Edema", "Consolidation", "Pneumonia", "Atelectasis", "Pneumothorax", "Pleural Effusion", "Pleural Other", "Fracture", "Support Devices"]datagen=ImageDataGenerator(rescale=1./255, validation_split=0.2)第一次在 stackoverflow 上提问,所以请不要犹豫,就缺少的信息等提供反馈!
查看完整描述

3 回答

?
呼如林

TA贡献1798条经验 获得超3个赞

因为你有 2 个不同的类别,你应该在你的最后dense一层有 2 个神经元,而不是你有观察的数量。不应在您的神经网络架构中指定观察次数。



查看完整回答
反对 回复 2023-01-04
?
月关宝盒

TA贡献1772条经验 获得超5个赞

使用 class_mode = 'raw' 如下:

train_generator=datagen.flow_from_dataframe(dataframe=df,
                                            directory="D:\\Milou",
                                            x_col="Path",
                                            y_col=label_names,
                                            subset="training",
                                            class_mode="raw",
                                            target_size=(100,100),
                                            batch_size=64)


查看完整回答
反对 回复 2023-01-04
?
慕娘9325324

TA贡献1783条经验 获得超5个赞

你需要在最后一层之前展平你的网络,因为这种不展平的输入你会得到所有这些类型的错误。实际上在最后一层你传递的是多维数组

tf.keras.layers.Flatten()


查看完整回答
反对 回复 2023-01-04
  • 3 回答
  • 0 关注
  • 215 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号