torch.nn.parameter.Parameter()在多层感知机中的应用
发布时间:2023-12-24 05:11:25
在多层感知机中,torch.nn.parameter.Parameter()是一个常用的类,用于定义模型的可学习参数。它是Tensor的一个子类,会自动添加到模型的参数列表中,并且被优化器用于参数更新。下面是一个使用torch.nn.parameter.Parameter()的多层感知机的例子:
import torch
import torch.nn as nn
class MLP(nn.Module):
def __init__(self, input_dim, output_dim, hidden_dims):
super(MLP, self).__init__()
self.hidden_layers = nn.ModuleList()
# 添加隐藏层
for i in range(len(hidden_dims)):
if i == 0:
self.hidden_layers.append(nn.Linear(input_dim, hidden_dims[i]))
else:
self.hidden_layers.append(nn.Linear(hidden_dims[i-1], hidden_dims[i]))
# 输出层
self.output_layer = nn.Linear(hidden_dims[-1], output_dim)
# 初始化参数
self.initialize_parameters()
def forward(self, x):
for layer in self.hidden_layers:
x = torch.relu(layer(x))
x = self.output_layer(x)
return x
def initialize_parameters(self):
for name, param in self.named_parameters():
if 'weight' in name:
nn.init.xavier_uniform_(param)
elif 'bias' in name:
nn.init.constant_(param, 0.1)
# 创建一个多层感知机模型
input_dim = 100
output_dim = 10
hidden_dims = [64, 32, 16]
model = MLP(input_dim, output_dim, hidden_dims)
# 打印模型的可学习参数
print(model.parameters())
# 输出:
# <generator object Module.parameters at 0x7f95d003f1d0>
# 计算模型的输出
input_data = torch.randn(32, input_dim)
output_data = model(input_data)
# 打印模型的输出
print(output_data)
# 输出:
# tensor([[-0.1309, 0.0059, 0.0660, ..., 0.0331, -0.1615, 0.0357],
# [-0.0823, -0.0060, -0.1020, ..., 0.0321, -0.1470, 0.0080],
# [-0.0925, -0.0479, 0.1457, ..., -0.0747, -0.1703, -0.0807],
# ...,
# [-0.0729, 0.0337, -0.1457, ..., 0.0305, -0.1737, 0.0149],
# [-0.0722, 0.0244, 0.0011, ..., 0.0389, -0.1275, -0.0310],
# [-0.0509, -0.0455, -0.1536, ..., 0.0766, -0.1413, 0.0384]],
# grad_fn=<AddmmBackward>)
在上面的例子中,我们定义了一个三层的多层感知机模型。torch.nn.parameter.Parameter()用于定义每个隐藏层和输出层的权重和偏置参数。在initialize_parameters方法中,我们使用nn.init.xavier_uniform_初始化权重参数,使用nn.init.constant_初始化偏置参数。
通过调用model.parameters()方法,我们可以获取模型的可学习参数列表。在模型的forward方法中,我们按顺序通过每个隐藏层,并使用ReLU激活函数激活隐藏层的输出,最后通过输出层获得最终的模型输出。
最后,我们通过输入数据计算模型的输出,得到一个大小为(32, 10)的输出张量。
