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

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)的输出张量。