python - DICE 损失太低,但预测和标签之间没有重叠
问题描述
我正在尝试使用我在这里找到的 Unet https://github.com/zhixuhao/unet实现对 MRI 图像横截面区域的骨骼分割。标签是一个二进制 png 图像,我打算将其与我的预测进行比较。对于帧,我为我的 DICOM MRI 文件编写了自己的数据加载器
我在 keras 中使用以下骰子损失
def DiceLoss(targets, inputs, smooth=1e-6):
#flatten label and prediction tensors
inputs = K.flatten(inputs)
targets = K.flatten(targets)
intersection = K.sum(K.dot(targets, inputs))
dice = (2*intersection + smooth) / (K.sum(targets) + K.sum(inputs) + smooth)
return 1 - dice
我在 kaggle https://www.kaggle.com/bigironsphere/loss-function-library-keras-pytorch 中看到了它,以及我在那里发现的 Keras 中的其他类似实现。
但是即使预测和标签之间没有重叠,DICE 损失总是太小(10^-4)。为什么是这样?我应该先将我的预测转换为二进制掩码吗?如果是这样,我怎么能在 keras 中做到这一点?我尝试targets
通过执行 targets.numpy() 转换为 numpy 数组,然后应用阈值,但它会引发“张量没有属性 numpy”错误。你还有别的想法吗?
谢谢你
解决方案
推荐阅读
- linux - Azure 功能、消费计划、Linux、缓解“应该需要 FTPS”
- typescript - 模板文字类型不适用于字符串连接
- javascript - html表格列值的总和(动态)
- python - 如何使用 TF 的“ImageDataGenerator.flow_from_dataframe”进行单热编码输出?
- python - 为什么 tensorflow 使用 100% 的所有 CPU 内核?
- aem - 是否可以使用合并模式单独部署一个子文件夹,并在工作区 filter.xml 中使用默认替换模式其余子文件夹
- deep-learning - 在 pytorch 中,是否有任何巧妙的方法可以沿给定的分割图对特征进行平均?
- haskell - 如何删除字符串中的特定最后一个字符
- r - 如何通过 bsub 提交 doMPI 作业?
- time-series - 使用 ARIMAX 进行多变量比特币预测