编译模型时,将参数丢失传递给编译函数 . 例如:
model.compile(loss ='mean_squared_error',optimizer ='adam')但我很好奇Keras是否有办法通过我自己的成本函数?
是的你可以 . 自定义丢失可以实现为需要两个张量的函数,即预测的y和基础事实,并返回标量 . 函数使用的数学需要在张量流函数上定义,以便模型能够通过它们反向传播值 . 如果你需要你的函数接受比y_pred和y_true更多的输入,你可以将自定义损失包装在一个更广泛的函数中,它接受额外的参数并返回一个只需要y_true和y_pred的函数 . 以下是两个例子 .
from keras.losses import mean_squared_error, binary_crossentropy def my_custom_loss(y_true, y_pred): mse = mean_squared_error(y_true, y_pred) crossentropy = binary_crossentropy(y_true, y_pred) return mse + crossentropy
def my_custom_loss_wrapper(mse_weight, xentropy_weight): def my_custom_loss(y_true, y_pred): mse = mean_squared_error(y_true, y_pred) crossentropy = binary_crossentropy(y_true, y_pred) return mse_weight * mse + xentropy_weight * crossentropy return my_custom_loss
1 回答
是的你可以 . 自定义丢失可以实现为需要两个张量的函数,即预测的y和基础事实,并返回标量 . 函数使用的数学需要在张量流函数上定义,以便模型能够通过它们反向传播值 . 如果你需要你的函数接受比y_pred和y_true更多的输入,你可以将自定义损失包装在一个更广泛的函数中,它接受额外的参数并返回一个只需要y_true和y_pred的函数 . 以下是两个例子 .
二进制交叉熵和mse之间的混合损失
加权混合物(包裹)