我尝试在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进行编译。我尝试过检查输入是否是占位符,并用零张量替换它们,但这给了我其他错误。在
如何在损失函数中使用卷积(图像处理函数,而不是层)而不得到这些错误?在
这里的问题是对conv2d函数的误解,它不是简单的二维卷积。它是多通道的批处理二维卷积。因此,虽然您可能希望*2d函数接受二维张量,但输入实际上应该是4个维度(批处理大小、高度、宽度、通道),过滤器也应该是4个维度(过滤器高度、过滤器宽度、输入通道、输出通道)。可在TF docs中找到详细信息
相关问题 更多 >
编程相关推荐