我是Keras的新手,如果这个问题很愚蠢,我很抱歉。
我在这里找到了执行多类语义分割的deeplabv3+模型。我需要将这段代码调整到另一个目的,因为我需要在医学图像上执行二进制语义分割。改成这样对吗
NUM_CLASSES = 20
NUM_CLASSES = 1?
如果我把NUM_CLASSES = 2,我得到一个关于logits和标签之间不匹配的错误。
关于损失函数,代码行是loss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)
我想把它改成
损失= keras.losses.BinaryCrossentropy(from_logits=True)
但是损失变成了负值。我应该添加其他东西吗?
谢谢!
编辑:多类语义分割的deeplabv3+在最后一层使用keras.activations.linear(x)。对于我的目的,我应该使用softmax而不是BinaryCrossEntropy的keras.activations.linear(x)并放入from_logits=False吗?
发布于 2021-10-01 10:00:09
我解决了这个问题,如果有人需要答案:“……对于二进制分割,最好保持NUM_CLASS =1,因为你正在尝试预测一个代表背景中单个类的二进制掩码。如果你想预测一个单热编码的分割掩码(在当前上下文中,设置NUM_CLASS = 2),那么只有这样才能使用softmax激活和稀疏分类交叉熵损失,否则使用sigmoid激活和二进制交叉熵。”
https://stackoverflow.com/questions/69343688
复制相似问题