打开Pytorch官网,关于神经网络的包都在torch.nn中
其中NN是Neural Network(神经网络)的缩写。
Containers是神经网络的骨架,它下面的都是需要往骨架中填充的东西,比如Convolution Layers(卷积层)、Pooling layers(池化层)、 Padding Layers(填充层)、Non-linear Activations(非线性激活)、 Normalization Layers(正则化层)。
Containers中有6个模块,最常用的是Module模块,Modele模块是所有神经网络的一个基本骨架(类)。
所有的神经网络均继承自MODULE类,MODULE类是神经网络的模版。就像买玩具赛车,MODULE是从商店买回来的原版赛车,而自己写神经网络相当于在这辆赛车上进行改装。
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
super().__init__()
self.conv1 = nn.Conv2d(1, 20, 5)
self.conv2 = nn.Conv2d(20, 20, 5)
def forward(self, x):
x = F.relu(self.conv1(x))
return F.relu(self.conv2(x))
Model是继承自Module的神经网络,重写了init和forward函数,在init方法中,我们必须用super去继承父类的init,然后后面两句是自己额外加的,forward函数即前向传播函数,数据输入神经网络后要经过forward步骤后输出(还有反向传播函数)。
forward参数中的x即我们要输入的东西,我们对x进行了卷积(conv)、非线性处理(relu),然后在进行一次卷积、非线性处理后返回。
我们看一下forward的官方定义
Defines the computation performed at every call.
Should be overridden by all subclasses.
forward定义一个计算,应该在所有子类中进行一个重写。
我们可以尝试写一下神经网络
import torch
from torch import nn
class Tudui(nn.Module):
def __init__(self) -> None:
super().__init__()
def forward(self, input):
output = input + 1
return output
tudui = Tudui()
x = torch.tensor(1.0)
output = tudui(x)
print(output)
在生成类中函数时,我们可以用pycharm自带的Code->generate来生成