“优化器参数列表为空”,菜菜,求带带

初学pytorch,我按照视频教程写了代码,但是没有成功的运行,实在不知道问题出在哪里。
import torch
import numpy as np
import matplotlib.pyplot as plt

把numpy数据变成张量tensor数据

x_data = torch.FloatTensor(x_data)
y_data = torch.FloatTensor(y_data)

构建网络模型

inputs = Variable(x_data)
target = Variable(y_data)

class LinearRegression(nn.Module):
# 初始化,定义网络结构
# 一般把网络中具有可学习的参数的层放在初始化的里面,int()中
def int(self):
super(LinearRegression, self).init()
self.fc = nn.Linear(1, 1)
# 定义网络计算

def forward(self, x):
    out = self.fc(x)
    return out

实例化模型

model = LinearRegression()

定义代价函数

mse_loss = nn.MSELoss()

定义优化器

optimizer = optim.SGD(model.parameters(), lr=0.1)

查看模型参数

for name, parameters in model.named_parameters():
print('name:{},parameters:{}'.format(name, parameters))

从你提供的代码来看,缺少了 import 语句,它们包括 nn 和 optim,这些都是PyTorch提供的模块,需要首先导入才能使用。

此外,看起来代码中缺少了关键步骤,如定义输入和目标张量,以及计算损失、梯度和更新权重的循环。以下是修复后的代码示例,供您参考:


import torch
import torch.nn as nn
import torch.optim as optim
from torch.autograd import Variable
import numpy as np
import matplotlib.pyplot as plt

# 定义数据
x_data = np.random.rand(100, 1).astype(np.float32)
y_data = 2 * x_data + 1

# 转换为张量
x_data = torch.from_numpy(x_data)
y_data = torch.from_numpy(y_data)

# 定义输入和目标
inputs = Variable(x_data)
target = Variable(y_data)

# 定义模型
class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.fc = nn.Linear(1, 1)

    def forward(self, x):
        out = self.fc(x)
        return out

# 实例化模型
model = LinearRegression()

# 定义代价函数
mse_loss = nn.MSELoss()

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.1)

# 训练模型
num_epochs = 1000
for epoch in range(num_epochs):
    inputs = Variable(x_data)
    target = Variable(y_data)

    # 前向传播
    out = model(inputs)
    loss = mse_loss(out, target)

    # 反向传播
    optimizer.zero_grad()
    loss.backward()
    optimizer.step()

    # 打印损失值
    if (epoch+1) % 50 == 0:
        print('Epoch[{}/{}], loss: {:.6f}'.format(epoch+1, num_epochs, loss.item()))

# 打印模型参数
for name, parameters in model.named_parameters():
    print('name:{},parameters:{}'.format(name, parameters))


在这个例子中,我们首先定义了一些训练数据,然后将它们转换为PyTorch张量。然后,我们定义了一个 LinearRegression 类,它继承了 nn.Module 类,并包含了一个线性层。在实例化模型时,我们创建了一个新的 LinearRegression 对象。接下来,我们定义了损失函数和优化器。最后,我们在一个循环中迭代训练模型,计算损失、梯度和更新权重,然后打印出损失值和模型参数。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^