【问题标题】:How to self-define the gradient of sign function in Keras or Tensorflow?如何在 Keras 或 Tensorflow 中自定义符号函数的梯度?
【发布时间】: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


【解决方案1】:

tanh(ax)函数是一个近似的、平滑的、可微的函数,你可以通过控制a来控制陡度,a越高越陡

【讨论】:

  • 谢谢!这对我很有帮助!
猜你喜欢
  • 2021-03-11
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2018-10-28
  • 2017-12-29
  • 2021-02-24
相关资源
最近更新 更多