大佬教程收集整理的这篇文章主要介绍了当我使用“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,请注明来意。