使用Keras使用权重图自定义二进制交叉熵损失

时间:2018-12-03 16:24:34

标签: keras conv-neural-network loss-function unity3d-unet

我对我的神经网络的自定义损失函数的实现有疑问。

我目前正在尝试对项目的单元进行细分,因此我决定使用unet,因为它似乎工作得很好。为了改进当前模型,我决定遵循unet(https://arxiv.org/abs/1505.04597)原始论文的想法,在他们的论文中实现了权重图,从而为位于紧密相邻的像元之间的像素分配了更多权重关联,如您在此图片中看到的:Example of a weight map

我目前正在为我的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:检查模型输入时出错:传递给模型的Numpy数组列表与模型预期的大小不符。预计会看到2个数组,但获得了以下1个数组的列表。

我真的不知道该怎么办以及如何正确实现我想做的事。

预先感谢您的回答。

0 个答案:

没有答案