Python 如何在Keras中创建依赖于历元数的损失函数参数?
我有一个自定义的丢失函数,带有一个超参数Python 如何在Keras中创建依赖于历元数的损失函数参数?,python,tensorflow,keras,deep-learning,loss-function,Python,Tensorflow,Keras,Deep Learning,Loss Function,我有一个自定义的丢失函数,带有一个超参数alpha,我想在训练期间每隔20个时期更改一次。损失函数类似于: def custom_loss(x, x_pred): loss1 = binary_crossentropy(x, x_pred) loss2 = (x, x_pred) return (alpha)* loss1 + (1-alpha)*loss2 根据我的研究,创建一个自定义回调是一个不错的选择。我已经研究了一个类似问题的解决方案,但是这些解决方案没有实现
alpha
,我想在训练期间每隔20个时期更改一次。损失函数类似于:
def custom_loss(x, x_pred):
loss1 = binary_crossentropy(x, x_pred)
loss2 = (x, x_pred)
return (alpha)* loss1 + (1-alpha)*loss2
根据我的研究,创建一个自定义回调是一个不错的选择。我已经研究了一个类似问题的解决方案,但是这些解决方案没有实现回调解决方案,这正是我想要实现的
我试图通过更改来自的LearningRateScheduler
回调来创建自定义回调
但是,我不确定alpha值是否与损失函数中的alpha值对应。在任何情况下,当我将changeapha
回调放在model.fit
方法中时,我收到一个属性错误
有人能帮我编辑回调,使它在一定的时间后改变我的
alpha
参数吗 我理解你的想法。我认为问题在于损失函数中的alpha不是指changeAlpha类的成员。您可以这样尝试:
instance = changeAlpha()
def custom_loss(x, x_pred):
loss1 = binary_crossentropy(x, x_pred)
loss2 = (x, x_pred)
return (instance.alpha*)* loss1 + (1-instance.alpha)*loss2
或者,您可以将alpha作为类变量而不是安装变量,然后按如下所示更改loss函数:
def custom_loss(x, x_pred):
loss1 = binary_crossentropy(x, x_pred)
loss2 = (x, x_pred)
return (changeAlpha.alpha*)* loss1 + (1-changeAlpha.alpha)*loss2
希望它能帮助您。在我看来,这只有在启用了“急切执行”时才起作用,这会使它变得非常缓慢。
def custom_loss(x, x_pred):
loss1 = binary_crossentropy(x, x_pred)
loss2 = (x, x_pred)
return (changeAlpha.alpha*)* loss1 + (1-changeAlpha.alpha)*loss2