在 PyTorch 中,nn.Parameter
是 torch.nn
模块提供的一个类,用于将张量包装成可训练的参数。nn.Parameter
是 torch.Tensor
的子类,但它与普通的张量有一些特殊的属性,使其在神经网络的参数优化过程中更为方便。
记住一句话:放在nn.Parameter才可反向传播并更新。
创建 nn.Parameter
:
通常,nn.Parameter
用于包装需要在模型训练中进行优化的权重和偏置等参数。
示例:
import torch
import torch.nn as nn
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
self.weight = nn.Parameter(torch.rand(3, 3)) # 创建一个可训练的权重参数
model = MyModel()
在上面的例子中,nn.Parameter(torch.rand(3, 3))
创建了一个3x3的可训练权重参数,并将其赋值给模型中的 self.weight
。
反传示例:
import torch
import torch.nn as nn
import torch.optim as optim
class MyModel(nn.Module):
def __init__(self):
super(MyModel, self).__init__()
# 使用 nn.Parameter 创建可训练参数
self.weight = nn.Parameter(torch.rand(3, 3), requires_grad=True)
model = MyModel()
# 定义一个优化器
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 模拟训练过程
for epoch in range(num_epochs):
# 模型的前向计算
output = model(some_input)
# 计算损失
loss = compute_loss(output, target)
# 清零梯度
optimizer.zero_grad()
# 反向传播
loss.backward()
# 更新参数
optimizer.step()
在上述代码中,self.weight
是一个通过 nn.Parameter
创建的可训练参数。在训练过程中,通过计算损失和反向传播,优化器将使用梯度信息来更新 self.weight
的值。这样,只有通过 nn.Parameter
创建的参数才能在优化过程中被更新。