Python 自定义损失函数取决于Keras中的模型预测

Python 自定义损失函数取决于Keras中的模型预测,python,tensorflow,keras,Python,Tensorflow,Keras,我在TensorFlow后端使用Keras。我试图实现本文中描述的目标函数(基于全局归一化转换的神经网络)。其要点是,我需要一个目标函数,它取决于当前网络及其预测。它获取训练序列并查看网络对该序列的预测程度,并在此基础上在两个目标函数之间切换。最终目标值取决于模型的预测 我已经编写了一个自定义损失函数,允许我访问模型(灵感来自: 并编制了模型: model.compile(loss=global_norm(model), ...) 在开始网络训练后,它会打印一次模型层列表,然后再也不会打印。我

我在TensorFlow后端使用Keras。我试图实现本文中描述的目标函数(基于全局归一化转换的神经网络)。其要点是,我需要一个目标函数,它取决于当前网络及其预测。它获取训练序列并查看网络对该序列的预测程度,并在此基础上在两个目标函数之间切换。最终目标值取决于模型的预测

我已经编写了一个自定义损失函数,允许我访问模型(灵感来自:

并编制了模型:

model.compile(loss=global_norm(model), ...)
在开始网络训练后,它会打印一次模型层列表,然后再也不会打印。我知道损失函数只调用一次,之后它就变成了“梯度”。有没有办法为每个样本调用目标函数?还是我需要一种不同的方法


编辑:澄清一下:它切换的两个目标是渐变,优化器应该沿着这个函数采取渐变步骤。我认为,如果为每个样本调用目标函数,它应该会起作用

目标函数被调用一次以进行编译,然后它成为一个张量,在每个输出上进行计算(批处理)。但我真的不明白你的意思。例如,你的目标函数需要一些控制流吗?我想是的!我希望在每个训练样本中编译目标函数,因为我需要的控制流不能用张量表示(我认为)。使用波束搜索,可以查看训练序列是否在模型预测的波束范围内。为此,我需要每个培训样本的最新型号。但也许有更好的方法让我这么做,比如写我自己的优化器?这样行吗?
model.compile(loss=global_norm(model), ...)