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

Machine learning 我可以在keras中使用我自己的成本函数吗?,machine-learning,keras,Machine Learning,Keras,编译模型时,将参数丢失传递给compile函数。例如: compile(loss='mean\u squared\u error',optimizer='adam') 但我很好奇,在Keras中是否有一种方法可以传递我自己的成本函数?是的,你可以。自定义损失可以实现为一个函数,该函数将采用两个张量,即预测的y和基本真值,并返回一个标量。函数使用的数学需要在tensorflow函数上定义,以便模型能够通过这些函数反向传播值。如果需要函数接受的输入多于y_pred和y_pred,则可以将自定义损失封

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

compile(loss='mean\u squared\u error',optimizer='adam')
但我很好奇,在Keras中是否有一种方法可以传递我自己的成本函数?

是的,你可以。自定义损失可以实现为一个函数,该函数将采用两个张量,即预测的y和基本真值,并返回一个标量。函数使用的数学需要在tensorflow函数上定义,以便模型能够通过这些函数反向传播值。如果需要函数接受的输入多于y_pred和y_pred,则可以将自定义损失封装在更广泛的函数中,该函数接受额外的参数并返回一个只需要y_true和y_pred的函数。下面是两个例子。

二元交叉熵与均方误差的混合损失
来自keras.com,输入均方误差,二进制交叉熵
定义我的自定义损失(y_true,y_pred):
mse=均方误差(y_真,y_pred)
交叉熵=二进制交叉熵(y_真,y_pred)
返回mse+交叉熵
加权混合料(包装)
def my_custom_loss_包装(mse_重量、xentropy_重量):
定义我的自定义损失(y_true,y_pred):
mse=均方误差(y_真,y_pred)
交叉熵=二进制交叉熵(y_真,y_pred)
返回mse_权重*mse+xentropy_权重*交叉熵
退还我的\u自定义\u损失

定义自定义损失函数后,是否按如下方式运行代码:compile(loss='my'u custom'u loss',optimizer='adam')no。当loss的参数是字符串时,它将映射到具有默认参数的预定义loss字典。如果要使用自定义丢失或带有非默认参数的默认丢失,必须调用传递函数本身,即loss=my_custom_loss`或
loss=my_custom_wrapper(args)
loss=adam(lr=0.005)
。我发现以下内容非常有用:它没有给@konstantinosKokos的答案添加任何内容,所以我只是作为评论发布。但仍然值得你去读。