自定义块
- 将输入数据作为其前向传播函数的参数。
- 通过前向传播函数来生成输出。请注意,输出的形状可能与输入的形状不同。例如,我们上面模型中的第一个全连接的层接收一个20维的输入,但是返回一个维度为256的输出。
- 计算其输出关于输入的梯度,可通过其反向传播函数进行访问。通常这是自动发生的。
- 存储和访问前向传播计算所需的参数。
- 根据需要初始化模型参数。
import torch
from torch import nn
from torch.nn import functional as F
X = torch.rand(2, 20)
# 包含一个多层感知机.具有256个隐藏单元和一个10维输出层
class MLP(nn.Module):
# nn.module中继承一些函数,最重要的两个函数init及forward
# 定义模型中所有需要的层(模型参数声明).
# 申明两个全连接层
def __init__(self):
# 调用父类(module),初始化。一些内部参数设置
super().__init__()
# 定义隐藏层,输入20,输出256
self.hidden = nn.Linear(20, 256)
# 输出层
self.out = nn.Linear(256, 10)
# 定义前向传播,即如何根据输入X返回所需的模型输出
def forward(self, X):
# 给定输入,做输出.
# 使用的nn.functional中定义的RELU函数
#
return self.out(F.relu(self.hidden(X)))
# 使用模型
net = MLP()
print(net(X))
输出:
tensor([[-0.1409, -0.1516, 0.0982, 0.0272, -0.0247, 0.2336, -0.1758, 0.0137,
-0.0634, 0.0327],
[-0.0325, -0.0577, 0.0931, 0.0048, -0.0506, 0.3069, -0.1862, -0.0315,
-0.1100, 0.0783]], grad_fn=<AddmmBackward0>)