如何在Keras或Tensorflow中自定义符号函数的梯度?

时间:2019-01-03 03:45:39

标签: tensorflow keras deep-learning gradient gradient-descent

我有一个神经网络,它接受输入I并输出一个实向量W。对于某些特殊情况,我需要向W添加一个符号函数,然后将其放入损失函数以计算损失。即:

W = NN(I);   #the output of the neural network
W = sign(W); #can be realized by the Lambda layer in keras
loss = loss_func(W) #compute the loss with the result after sign function

是的,这确实很奇怪,但是在我的工作中是必需的。在我之前的无符号功能的作品中,它运作良好。但是,当我添加符号函数时,发现程序可以运行,但是损失却无法减少,我认为这是因为符号(W)的梯度为零,从而导致了问题。

因此,我想使用梯度不为零的替代平滑函数代替正负号函数,以便可以继续减少损失。有适当的功能吗?并有任何有效的方法可以自定义Keras或张量流中的梯度。

谢谢。

1 个答案:

答案 0 :(得分:0)

tanh(ax)函数将是一种近似,平滑和可微的函数,您可以通过控制a来控制陡度,a越陡峭