Python 使用torch.optim时torch.mm显示错误的函数
我是PyTorch的新手。如果这个问题很幼稚,请原谅我。我试图使用PyTorch的optim最小化一个函数。该函数包括矩阵乘法。详情如下 首先我有一个张量:Python 使用torch.optim时torch.mm显示错误的函数,python,pytorch,tensor,gradient-descent,minimization,Python,Pytorch,Tensor,Gradient Descent,Minimization,我是PyTorch的新手。如果这个问题很幼稚,请原谅我。我试图使用PyTorch的optim最小化一个函数。该函数包括矩阵乘法。详情如下 首先我有一个张量: Xv.requires_grad_() XT.requires_grad_() 我的目标职能: def errorFun(x): ax = x[0] ay = x[1] x0 = x[2] y0 = x[3] A = torch.tensor([[ax, 0., x0], [0., ay, y0]
Xv.requires_grad_()
XT.requires_grad_()
我的目标职能:
def errorFun(x):
ax = x[0]
ay = x[1]
x0 = x[2]
y0 = x[3]
A = torch.tensor([[ax, 0., x0], [0., ay, y0], [0., 0., 1.]], dtype=torch.float64)
B = torch.tensor([[b11, b12, b13], [b21, b22, b23], [b31, b32, b33]], dtype=torch.float64)
H = torch.mm(A, B)
Ps = torch.mm(H, X)
px = Ps[0,:]
py = Ps[1,:]
PX = torch.stack([px, py], dim=0)
PX.requires_grad_()
return mseloss(PX, XT)
我是在说:
for ii in range(n_optim_steps):
optimizer.zero_grad()
loss = errorFun(params)
#print('Step # {}, loss: {}'.format(ii, loss.item()))
loss.backward()
# Access gradient if necessary
grad = params.grad.data
optimizer.step()
但我得到了这个错误:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-54-84b874448a25> in <module>()
77 loss.backward()
78 # Access gradient if necessary
---> 79 grad = params.grad.data
80 optimizer.step()
81
AttributeError: 'NoneType' object has no attribute 'data'
---------------------------------------------------------------------------
AttributeError回溯(最近一次呼叫上次)
在()
77.损失向后()
78#如有必要,通道坡度
--->79梯度=参数梯度数据
80优化器。步骤()
81
AttributeError:“非类型”对象没有属性“数据”
提前谢谢。我不确定我是否理解您的任务。但是,您似乎没有按照设计的方式使用Pytork 你必须拥有5件东西:
导入火炬
导入torch.nn作为nn
来自torch.optim进口新加坡元
输入大小=5
模型=nn.线性(输入尺寸,1)
opt=SGD(model.parameters(),lr=0.01)
损失函数=nn.MSELoss()
对于uu范围(100):
数据=torch.rand(批次大小、输入大小)
目标=data.sum(dim=1)
选项0_梯度()
pred=模型(数据)
损失=损失函数(预测,目标)
loss.backward()
选择步骤()
comment'grad=params.grad.data'并查看它是否有效。您共享的代码不清楚它应该如何工作。你能分享一个最小的可复制的例子吗?谢谢@VictorZuanazzi的回答。我试着对这行代码进行注释,代码可以运行,但参数在优化后保持不变。下面的注释中给出了可复制的代码。我不确定您是否在使用Pytork,因为它应该被使用。我建议您先看一下这些教程: