Module
类是nn
模块里提供的一个模型构造类,是所有神经网络模块的基类,我们可以继承它来定义我们想要的模型,MLP
类重载了Module
类的__init__
函数和forward
函数。它们分别用于创建模型参数和定义前向计算。前向计算也即正向传播。
import torch
from torch import nn
class MLP(nn.Module):
# 声明模型参数层
def __init__(self, **kwargs):
# 初始化
# **kwargs 表示函数接收可变长度的关键字参数字典
# super() 用来调用父类
super(MLP,self).__init__(**kwargs)
self.hidden = nn.Linear(784,256) # 声明隐藏层
self.act = nn.ReLU() # 添加激活函数
self.output = nn.Linear(256,10) # 添加输出层
# 定义模型向前计算
def forward(self,x):
a = self.act(self.hidden(x))
return self.output(a)
以上的MLP
类中无须定义反向传播函数。系统将通过自动求梯度而自动生成反向传播所需的backward
函数
X = torch.rand(2,784)
#随机产生两组样本
net = MLP() # 调用父类
print(net) # 查看MLP结构
# 网络模型为:隐藏层Linear(in_features=784, out_features=256, bias=True)
# 激活函数:ReLU()
# 输出层为:Linear(in_features=256, out_features=10, bias=True)
net(X) # 输出结果,输出2行10列的tensor
输出: