我有一个神经网络,该神经网络的最后一层是扁平层,可以提供曲线输出。该曲线可能具有一个或多个局部最大值,但是我只对找到全局最大值感兴趣。我拥有的基本事实是全局最大值的整数索引(或参数)。我试图这样在Keras中编写自定义损失:
def custom_loss(y_output,y_idx_pred):
return K.mean(K.sum((K.argmax(y_output)-y_idx_pred)**2))
我也将整数转换为float32。但是,我发现存在“无”渐变的错误。我搜索了一个答案,发现argmax没有任何定义的渐变。我发现的建议是创建自定义Argmax图层或改用softmax。
我什至在这里如何使用softmax? Softmax仅向我提供[0 0 1... ]
的近似值,而不是整数索引本身。我应该如何处理?我什至尝试通过将基本事实转换为[0 1 0... ]
并使用交叉熵来将问题视为分类问题,但是网络无法学到任何东西。当我刚添加了致密的(1)层然后训练模型时,效果更好。分类似乎平等地对待所有参数,但事实并非如此。我需要欧几里得l2距离。
在哪里可以找到有关创建自定义Argmax图层的正确说明?对我的情况有帮助吗?是否可以实现可区分的自定义损失函数?我该怎么办?