【发布时间】:2019-06-27 16:06:45
【问题描述】:
我正在使用 keras 开发机器学习模型,我注意到可用的损失函数在我的测试集上并没有给出最好的结果。
我使用的是 Unet 架构,其中我输入 (16,16,3) 图像,网络还输出 (16,16,3) 图片(自动编码器)。我注意到,也许改进模型的一种方法是,如果我使用一个损失函数来比较净输出和地面实况之间的梯度(拉普拉斯算子)上的像素与像素。但是,我没有找到任何可以处理这种应用程序的教程,因为它需要对来自网络的每个输出图像使用 opencv 拉普拉斯函数。
损失函数是这样的:
def laplacian_loss(y_true, y_pred):
# y_true already is the calculated gradients, only needs to compute on the y_pred
# calculates the gradients for each predicted image
y_pred_lap = []
for img in y_pred:
laplacian = cv2.Laplacian( np.float64(img), cv2.CV_64F )
y_pred_lap.append( laplacian )
y_pred_lap = np.array(y_pred_lap)
# mean squared error, according to keras losses documentation
return K.mean(K.square(y_pred_lap - y_true), axis=-1)
有人做过类似的损失计算吗?
【问题讨论】:
-
请花点时间格式化您的代码示例,使用 3 个反引号 (`) 表示代码块的开始和结束。
-
检查以下是否有帮助:stackoverflow.com/questions/56750620/…
-
我认为这有帮助,但我真的不知道 y_true 和 y_pred 的形状和类型。我的模型训练批量大小等于 256。它会改变什么吗?
-
K.shape(tensor)返回一个带有形状的张量。
标签: python-3.x opencv keras computer-vision