【发布时间】:2019-05-29 16:14:06
【问题描述】:
我有一个神经网络,它接受输入 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
是的,这真的很奇怪,但在我的工作中是必要的。在我之前的没有符号功能的工作中,它运行良好。但是,当我添加sign函数的时候,发现程序可以运行,但是loss并不能减少,我认为是因为sign(W)的梯度为零,导致了这个问题。
所以我想使用一些梯度不为零的替代平滑函数来代替符号函数,以便我的损失可以继续减少。有没有合适的功能?有没有什么有效的方法可以在 Keras 或 tensorflow 中自定义梯度。
提前致谢。
【问题讨论】:
-
tanh函数怎么样?
-
我觉得是个不错的选择,但是函数曲线能不能再陡一点?
-
是的,您可以使用
tanh(ax)控制陡度,a越高越陡 -
谢谢,我认为这是一个很好的解决方案
-
我会添加这个作为答案
标签: tensorflow keras deep-learning gradient gradient-descent