模型训练报错:ValueError: logits and labels must have the same shape ((150, 17) vs (150, 1))

参考:https://stackoverflow.com/questions/60593469/logits-and-labels-must-have-the-same-shape-294-6-vs-6-1

输出层和损失函数:

    # # FC层和softmax层              softmax   sigmoid
    outputs = tf.keras.layers.Dense(classification,activation='sigmoid')(x)       

    model_def = tf.keras.Model(inputs=inputs, outputs=outputs)

    # 编译模型,确定优化方法,损失函数等
    # https://blog.csdn.net/qq_34418352/article/details/106341446
    # loss='categorical_crossentropy'主要用在二分类问题上,将标签以one_hot的形式呈现,涉及到两个或者更多个标签类别的时候使用该损失函数
    # loss='sparse_categorical_crossentropy'将标签表示为整数类型
    # loss='binary_crossentropy'  loss=tf.keras.losses.binary_crossentropy 处理二分类问题时使用该交叉熵损失    与sigmoid搭配使用
    # 多标签分类    loss=tf.losses.binary_crossentropy
    #             loss = tf.keras.losses.binary_crossentropy()('y_true','y_pred')
    #               loss = tf.nn.sigmoid_cross_entropy_with_logits
    # loss_func = tf.nn.sigmoid_cross_entropy_with_logits()
    model_def.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy']) 

报错:

ValueError: logits and labels must have the same shape ((150, 17) vs (150, 1))

原因:
1、二分类和多标签分类,最后一层使用sigmoid,损失函数使用loss='binary_crossentropy'时,标签需为one_hot形式
(loss='categorical_crossentropy'时,标签也应为one_hot形式)

2、多分类,最后一层使用softmax,损失函数使用loss='sparse_categorical_crossentropy'时,标签需为[0,2,6,3,...,4,7,0]形式

3、上述报错,将loss改为'sparse_categorical_crossentropy'即可运行,但是理论上应该还存在问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容