首页 > 解决方案 > 使用 Keras 使用权重图自定义二元交叉熵损失

问题描述

我有一个关于为我的神经网络实现自定义损失函数的问题。

我目前正在尝试为一个项目分割单元格,我决定使用 unet,因为它似乎工作得很好。为了改进我当前的模型,我决定遵循 unet ( https://arxiv.org/abs/1505.04597 ) 的原始论文的想法,他们实现了一个权重映射,从而为位于的像素分配更多权重在紧密关联的单元格之间,如图所示:权重图示例

我目前正在为我的 unet 使用 Keras,我的问题是我不知道如何在不产生任何问题的情况下为我的模型赋予权重。我的想法是创建一个包含图像的生成器和一个包含第一个通道中的标签和第二个通道中的权重的 2 通道数组,这样我就可以在我的自定义损失函数中轻松提取我的权重和标签。

我的代码如下所示:

train_generator = zip(image_generator, label_generator, weight_generator)

    for (img, label, weight) in train_generator:
        img, label = adjustData(img, True, label)

        label_weights = np.concatenate((label, weight),axis=3)

        # This is the final generator
        yield (img, label_weights)

正如你所看到的,我用三个之前构建的生成器构建了 train_generator,我调整了一些东西,然后我生成了我的图像并组合了标签和权重。

然后,当我尝试使用 fit_generator 拟合我的模型时,我收到此错误:ValueError: Error when checks model input: The list of Numpy arrays that you are pass to your model is not the size of the model. 预计会看到 2 个数组,但得到了以下 1 个数组的列表。

我真的不知道该做什么以及如何正确实施我想做的事情。

预先感谢您的回答。

标签: kerasconv-neural-networkloss-functionunity3d-unet

解决方案


推荐阅读