开始找了很多怎么用自己写的损失函数训练的,我自己老是跑不通,后面发现这样可以。
def dice_coef(y_true, y_pred):
smooth = 1e-5
y_true_f = K.flatten(y_true) # 将 y_true 拉伸为一维.
y_pred_f = K.flatten(y_pred)
intersection = K.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (K.sum(y_true_f * y_true_f) + K.sum(y_pred_f * y_pred_f) + smooth)
def dice_coef_loss(y_true, y_pred):
return 1. - dice_coef(y_true, y_pred)
model.compile(optimizer=Adam(lr=1e-4), loss=dice_coef_loss, metrics=dice_coef)
其他的没区别,主要是这个dice_coef_loss函数在这里后面不跟括号。(什么函数都行,这个损失函数是我网上找的)
前面的我今天试了,可以解决导入带自己的损失函数的模型报错的问题。
关于用自己的损失函数,我之前遇到过一篇博客描述,导入模型的时候可以选择一个参数,选择False之后就是不用之前模型的损失函数,后面可以自己再设置自己的损失函数。(用这个可以先选一个keras自带的损失函数,随便训练下,再保存,再按前面的来,达到用自己损失函数的目的)具体博客找不到了。