【问题标题】:Pytorch with Modified DerivativesPytorch 与改进的衍生物
【发布时间】:2020-07-14 20:07:16
【问题描述】:

我正在重写TRACX2 model,这是一种循环神经网络的变体,用于在连续语音或文本的分词上下文中训练编码。原始代码的作者在 Numpy 中手动编写了网络,而我想用 Pytorch 对其进行优化。然而,他们实现了他们称之为“温度”和“法尔曼偏移”的东西:

这显然不是他们的激活函数之一 tanh(x) 的实际导数,但他们使用了这个导数。我将如何在 Pytorch 中实现这种修改?

【问题讨论】:

    标签: machine-learning pytorch recurrent-neural-network


    【解决方案1】:

    基本上,您可以像这样添加backward hook

    a = Variable(torch.randn(2,2), requires_grad=True)
    m = nn.Linear(2,1)
    m(a).mean().backward()
    print(a.grad) 
    # shows a 2x2 tensor of non-zero values
    temperature = 0.3
    fahlmanOffset = .1
    
    def hook(module, grad_input, grad_output):
        # Use custom gradient output
        return grad_output * temperature + fahlmanOffset
    
    m.register_backward_hook(hook)
    
    a.grad.zero_()
    m(a).mean().backward()
    print(a.grad)
    # shows a 2x2 tensor with modified gradient
    

    (由this answer提供)

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 2010-09-30
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-10-09
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多