我有一个神经网络,它接受输入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或张量流中的梯度。
谢谢。
答案 0 :(得分:0)
tanh(ax)
函数将是一种近似,平滑和可微的函数,您可以通过控制a
来控制陡度,a
越陡峭