程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重?

开发过程中遇到当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重的问题如何解决?下面主要结合日常开发的经验,给出你关于当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重的解决方法建议,希望对你解决当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重有所启发或帮助;

我的模型需要学习某些参数来解决这个函数:

self.a * (r > self.b) * (self.C) 

哪里

self.a,self.b,and self.c  

是可学习的参数。 我的问题是 b 在梯度更新期间不会改变。我认为这是因为该功能是不连续的。不过,它是一个阶梯函数,所以我不知道如何修改它。

任何想法/提示将不胜感激

我的代码是

import torch
import torch.nn as nn
import torch.optim as optim

class model(nn.ModulE): 
        def __init__(self):
            super(model,self).__init__()
            self.a = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))
            self.b = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))
            self.c = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))

model_net = model()
#function to learn = 5 * (r > 2) * (3) 
optimizer = optim.Adam(model_net.parameters(),lr = 0.1)

for epoch in range(10):
  for r in range(10):
    optimizer.zero_grad()
    loss = 5 * (r > 2) * (3) - model_net.a * (r > model_net.b) * (model_net.C)
    loss.BACkWARD()
    optimizer.step()
  print(model_net.a)
  print(model_net.b)
  print(model_net.C)
  print()

更新 1:
我发现 this 问题非常相似。这个人也有一个不连续的函数,似乎可以用 tanh 来解决。不过,我还没有找到使用相同方法的方法。 我还浏览了@seraph 建议的 tutorial,但我没有在那里找到不连续的函数。

解决方法

正如其他人提到的,我们需要对非连续函数进行近似。这个怎么样?

import torch
import torch.nn as nn
import torch.optim as optim

class model(nn.ModulE): 
        def __init__(self):
            super(model,self).__init__()
            self.a = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))
            self.b = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))
            self.c = torch.nn.Parameter(torch.rand(1,requires_grad=TruE))

model_net = model()
#function to learn = 5 * (r > 2) * (3) 
optimizer = optim.Adam(model_net.parameters(),lr = 0.1)

for epoch in range(10):
  for r in range(10):
    optimizer.zero_grad()
    loss = 5 * (r > 2) * (3) - model_net.a * torch.tanh((r - model_net.b)) * (model_net.C) #this is the change -- you can try tanh/sigmoid/etc and see which one works better for you
    loss.BACkWARD()
    optimizer.step()
  #print(model_net.a)
  print(model_net.b)
  #print(model_net.C)
  print()

大佬总结

以上是大佬教程为你收集整理的当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重全部内容,希望文章能够帮你解决当我使用“if 语句”之类的函数时,PyTorch optimizer.step() 不会更新权重所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: