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