自定义Keras损失函数中的conv2d

2024-09-29 23:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在Keras中实现一个自定义的丢失函数,TF后端基于两个图像的Laplacian。在

def blur_loss(y_true, y_pred):
    #weighting of blur loss
    alpha = 1
    mae = losses.mean_absolute_error(y_true, y_pred)
    lapKernel = K.constant([0, 1, 0, 1, -4, 1, 0, 1, 0],shape = [3, 3])

    trueLap = K.conv2d(y_true, lapKernel)
    predLap = K.conv2d(y_pred, lapKernel)
    trueBlur = K.var(trueLap)
    predBlur = K.var(predLap)
    blurLoss = alpha * K.abs(trueBlur - predBlur)
    loss = (1-alpha) * mae + alpha * blurLoss
    return loss

当我试图编译模型时,我得到了这个错误

^{pr2}$

在阅读了其他问题之后,我的理解是,这个问题源于使用占位符张量对yüu true和y_pred进行编译。我尝试过检查输入是否是占位符,并用零张量替换它们,但这给了我其他错误。在

如何在损失函数中使用卷积(图像处理函数,而不是层)而不得到这些错误?在


Tags: 函数alphatruevar错误maelosspred
1条回答
网友
1楼 · 发布于 2024-09-29 23:17:27

这里的问题是对conv2d函数的误解,它不是简单的二维卷积。它是多通道的批处理二维卷积。因此,虽然您可能希望*2d函数接受二维张量,但输入实际上应该是4个维度(批处理大小、高度、宽度、通道),过滤器也应该是4个维度(过滤器高度、过滤器宽度、输入通道、输出通道)。可在TF docs中找到详细信息

相关问题 更多 >

    热门问题