Pytorch 实现 MLP

torch.nn是专门为神经网络设计的模块化接口。nn构建于 Autograd之上,可用来定义和运行神经网络。
nn.functional,这个包中包含了神经网络中使用的一些常用函数,这些函数的特点是,不具有可学习的参数(如ReLU,pool,DropOut等),这些函数可以放在构造函数中,也可以不放,但是这里建议不放。

定义一个网络

PyTorch中已经为我们准备好了现成的网络模型,只要继承nn.Module,并实现它的forward方法,PyTorch会根据autograd,自动实现backward函数。

import torch
import torch.nn as nn
import torch.nn.functional as F


class MLP(nn.Module):
    def __init__(self, user_num, user_dim, layers=[32, 16, 8]):
        super(MLP, self).__init__()  # 子类函数必须在构造函数中执行父类构造函数
        self.user_Embedding = nn.Embedding(user_num, user_dim)

        self.mlp = nn.Sequential() 
        for id in range(1, len(layers)):  # 这样可以实现MLP层数和每层神经单元数的自动调整
            self.mlp.add_module("Linear_layer_%d" % id, nn.Linear(layers[id - 1], layers[id]))
            self.mlp.add_module("Relu_layer_%d" % id, nn.ReLU(inplace=True))

        self.predict = nn.Sequential(
            nn.Linear(layers[-1], 1),
            nn.Sigmoid(),
        )

    def forward(self, x):
        user = self.user_Embedding(x)
        user = self.mlp(user)
        score = self.predict(user)
        return score


model = MLP(1000, 64)
print(model)
MLP(
  (user_Embedding): Embedding(1000, 64)
  (mlp): Sequential(
    (Linear_layer_1): Linear(in_features=32, out_features=16, bias=True)
    (Relu_layer_1): ReLU(inplace=True)
    (Linear_layer_2): Linear(in_features=16, out_features=8, bias=True)
    (Relu_layer_2): ReLU(inplace=True)
  )
  (predict): Sequential(
    (0): Linear(in_features=8, out_features=1, bias=True)
    (1): Sigmoid()
  )
)
for parameters in model.parameters():
    print(parameters)
Parameter containing:
tensor([[ 0.4192, -1.0525,  1.4208,  0.5376,  2.1371,  0.7074,  0.1017,  0.9701, 1.2824, -0.0436],
        [-0.6374,  0.0153, -0.1862, -0.6061,  0.5522, -1.1526,  0.3913,  0.3103,
         -0.1055,  0.6098],
        [-0.0367, -0.9573, -0.5106, -1.2440,  1.2201, -0.5424,  0.2045,  0.2208,
         -0.7557, -0.7811],
        [ 0.5457,  0.3586,  0.9871, -0.2117,  1.0885,  1.7162, -0.2125,  0.2652,
         -0.3262,  0.3047],
        [ 0.1039,  0.8132,  0.6638,  0.2618,  0.8552,  0.8300,  0.2349,  1.8830,
         -0.5149, -1.0468]], requires_grad=True)
Parameter containing:
tensor([[-0.2395,  0.1461, -0.0161,  0.0267, -0.0353,  0.2085,  0.0046, -0.1572],
        [ 0.2267,  0.0129, -0.3296, -0.2270,  0.2268,  0.1771, -0.0992,  0.2148],
        [ 0.1906,  0.1896, -0.2703, -0.3506,  0.0248,  0.1949, -0.3117,  0.0721],
        [-0.3197,  0.2782, -0.1553,  0.2509,  0.0279,  0.2040, -0.1478,  0.2943]],
       requires_grad=True)
Parameter containing:
tensor([ 0.0808, -0.3252, -0.0015, -0.0666], requires_grad=True)
Parameter containing:
tensor([[-0.3243,  0.4393, -0.2430,  0.4330]], requires_grad=True)
Parameter containing:
tensor([-0.0739], requires_grad=True)
for name,parameters in model.named_parameters():
    print(name,':',parameters.size())
user_Embedding.weight : torch.Size([5, 10])
mlp.Linear_layer_1.weight : torch.Size([4, 8])
mlp.Linear_layer_1.bias : torch.Size([4])
predict.0.weight : torch.Size([1, 4])
predict.0.bias : torch.Size([1])

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值