【问题标题】:Which deep learning network structure should I refer?我应该参考哪种深度学习网络结构?
【发布时间】:2021-11-08 18:13:13
【问题描述】:

我正在制作一个深度学习网络,可以在 3d 空间中找到多个点。

输入是一堆灰度1024 x 1024图像(图像数量从5到20不等),输出是64 x 64 x 64空间。输出的每个体素都有 0 或 1,但在我的数据集中只有 2000 个 1,因此通过观察训练损失很难判断我的网络是否训练良好。

例如,如果我的网络只输出np.zeros((64,64,64)) 作为输出,那么准确度仍然是1-2000/(64x64x64)~=99.9%

所以我想问我应该选择哪个深度学习网络来从 3d 空间中找到非常少的答案。输入大小变为 (1024 x 1024 x #img),输出大小变为 (64 x 64 x 64)。我现在正在使用 2D Unet-like net / 3D Unet-like net 进行实验,并带有 ReLU-with-ceiling end activation。

请有人推荐一些可以参考的东西,非常感谢。

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    类似 Unet 的网络似乎是个好主意。您的问题不是来自网络本身,而是来自您使用的损失和指标。 Indead,如果您使用二元交叉熵损失和准确度作为指标,由于您的类的不平衡特性,您的分数仍将接近 100%。

    我建议您对度量和/或损失使用 Dice 或 Jaccard 系数(在这种情况下损失是 1-Dicecoef),并且您只对感兴趣的项目进行计算,而不是在背景上计算。

    根据您使用的框架,您应该很容易找到这些指标的现有实现。然后修改代码,避免在后台计算。

    例如对于 python/tensorflow,使用您的卷:

    def dice_coef(y_true, y_pred, smooth=1):
        y_true_f = K.flatten(y_true)
        y_pred_f = K.flatten(y_pred)
        y_true_f = K.one_hot(K.cast(y_true_f, np.uint8), 2)
        y_pred_f = K.one_hot(K.cast(y_pred_f, np.uint8), 2)
        intersection = K.sum(y_true_f[:,1:]* y_pred_f[:,1:], axis=[-1])
        union = K.sum(y_true_f[:,1:], axis=[-1]) + K.sum(y_pred_f[:,1:], axis=[-1])
        dice = K.mean((2. * intersection + smooth)/(union + smooth), axis=0)
        return dice
    

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 2018-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2018-10-05
      • 1970-01-01
      • 2015-03-30
      • 2018-01-09
      相关资源
      最近更新 更多