欢迎访问宙启技术站
智能推送

使用PyTorch的Parameter()类优化神经网络的可训练参数

发布时间:2024-01-20 06:57:55

在PyTorch中,可以使用Parameter()类创建可训练参数。Parameter()是一个Tensor的子类,它会被自动注册为模块的可训练参数。当应用优化器进行梯度更新时,仅对已注册为可训练参数的张量进行更新。

下面是一个使用Parameter()类优化神经网络可训练参数的示例:

import torch
import torch.nn as nn

# 定义神经网络模型
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(10, 20)
        self.fc2 = nn.Linear(20, 1)
        self.relu = nn.ReLU()

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x

# 创建模型实例
model = Net()

# 打印模型参数
print("初始模型参数:")
for name, param in model.named_parameters():
    print(name, param.size())

# 创建优化器,指定要优化的参数
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

# 优化过程
input_data = torch.randn(100, 10)  # 创建随机输入数据
target = torch.randn(100, 1)  # 创建随机目标值

for epoch in range(100):
    optimizer.zero_grad()  # 每轮迭代前清零梯度
    output = model(input_data)  # 前向传播
    loss = nn.MSELoss()(output, target)  # 计算损失
    loss.backward()  # 反向传播
    optimizer.step()  # 更新参数

# 打印优化后的模型参数
print("
优化后的模型参数:")
for name, param in model.named_parameters():
    print(name, param.size())

在上述示例中,首先定义了一个简单的神经网络模型Net,它具有两个全连接层和一个ReLU激活函数。然后,创建了一个模型实例model

在创建优化器时,使用了model.parameters()来获取模型中所有的可训练参数,并传递给优化器。这样,优化器就会自动更新这些参数。

在训练循环中,首先调用optimizer.zero_grad()清零梯度。然后,进行前向传播、计算损失、反向传播和参数更新的步骤。

最后,打印出优化后的模型参数。

总结:

使用PyTorch的Parameter()类可以方便地定义模型的可训练参数,并配合优化器进行参数更新。通过该类,我们可以更灵活地控制模型的参数。