使用torch.optim时torch.mm显示错误的函数

2024-10-03 21:29:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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], [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'

提前谢谢


Tags: 函数datatorchpytorchparamsaxoptimoptimizer
1条回答
网友
1楼 · 发布于 2024-10-03 21:29:23

我不确定我是否理解你的任务。但是,您似乎没有按照设计的方式使用Pytork

你必须拥有5件东西:

  1. 培训数据
  2. 你感兴趣的任务
  3. 参数化模型(如神经网络)
  4. 要最小化的成本函数
  5. 优化器

考虑一个简单的例子:

  1. 数据:包含随机数的向量
  2. 任务:求向量的和
  3. 模型:线性回归(即:1层神经网络)
  4. 成本函数:均方误差
  5. 优化器:随机梯度下降

实施:

import torch
import torch.nn as nn
from torch.optim import SGD

input_size = 5
model = nn.Linear(input_size, 1)
opt = SGD(model.parameters(), lr=0.01)
loss_func = nn.MSELoss()


for _ range(100):
    data = torch.rand(batch_size, input_size)
    target = data.sum(dim=1)
    
    opt.zero_grad()
    pred = model(data)
    loss = loss_func(pred, target)
    loss.backward()
    opt.step()

相关问题 更多 >