我可以在keras中使用自己的成本函数吗?

Hye*_*hoi 2 machine-learning keras

编译模型时,将参数丢失传递给编译函数.例如:

model.compile(loss ='mean_squared_error',optimizer ='adam')但是我很好奇Keras是否有办法通过我自己的成本函数?

Kon*_*kos 6

是的你可以.自定义丢失可以实现为需要两个张量的函数,即预测的y和基础事实,并返回标量.函数使用的数学需要在张量流函数上定义,以便模型能够通过它们反向传播值.如果您需要的功能,接受的不仅仅是y_pred更多的投入和y_true,你可以在更广泛的功能,这需要额外的参数,并返回只需要y_true和y_pred功能包自定义的损失.以下是两个例子.

二元交叉熵和mse之间的混合损失

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
Run Code Online (Sandbox Code Playgroud)

加权混合物(包裹)

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
Run Code Online (Sandbox Code Playgroud)

  • 定义我的自定义丢失函数后,我是否按如下方式运行代码?:model.compile(loss ='my_custom_loss',optimizer ='adam') (2认同)
  • 不.当loss的参数是一个字符串时,它将使用默认参数映射到预定义损失的字典.当你想使用非默认参数的自定义损失或默认损失时,你必须调用函数本身的传递,即loss = my_custom_loss`或`loss = my_custom_wrapper(args)`或`loss = adam(lr = 0.005) `. (2认同)