深度学习(六)——神经网络的基本骨架:nn.Module的使用

发布时间 2023-07-14 22:56:04作者: 码头牛牛

一、torch.nn简介

官网地址:

torch.nn — PyTorch 2.0 documentation

1. torch.nn中的函数简介

  • Containers:神经网络的骨架

  • Convolution Layers:卷积层

  • Pooling layers:池化层

  • Padding Layers:Padding

  • Non-linear Activations:非线性激活

  • Normalization Layers:正则化层

还有其他函数,详情可以看官方文档。以上这些函数构成了神经网络的基本操作。

2. torch.nn中Containers函数的介绍

Containers一共有六个模块:

  • Module:对于所有神经网络提供一个基本的骨架,一般定义一个神经网络用如下代码。其中,Model代表模型的名称,nn.Module就是继承了这个类的模板。然后我们先用__init__初始化,其中super(Model,self).__init__()指的是对父类进行初始化,后面的部分是根据自己构建的神经网络个性化定制的。之后我们使用forword函数对输入数据进行计算,也可以这么理解:对于一个神经网络,首先输入数据-->使用forword函数计算数据-->输出数据,这个过程也叫前向传播
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))
  • Sequential

  • ModuleList

  • ModuleDict

  • ParameterList

  • ParameterDict

二、实操nn.Module

1. 构建一个简单的神经网络

  • 一些小技巧:在写__init__super函数时,pycharm点击下面这个按钮就可以自动补全:

  • 下面构建一个很简单的神经网络,具体作用就是把输入数据+1然后返回,之后调用这个神经网络:

from torch import nn
import torch

#构建一个叫Demo的神经网络
class Demo(nn.Module):
    def __init__(self):
        super().__init__()

    def forward(self,input):
        output=input+1  #对输入神经网络的数据+1,然后返回
        return output

#调用神经网络
demo=Demo()
x=torch.tensor(1.0)  #输入神经网络的数据
output=demo(x)
print(output)  #输出神经网络的数据

[Run] tensor(2.)

2. 神经网络运行过程

为了更好地说明上面代码的运行过程,把debug打到第14行的demo=Demo()代码上,并点击Step into My Code

之后一直点击Step into My Code,就可以看到代码的运行过程如下:

  • 在调用demo=Demo()后,首先使用super().__init__()\(nn.Module\)进行初始化

  • 然后设定输入值x,并使用demo(x)将该值传入到forword函数中

  • forword函数将该值进行加一,并返回output

  • 最后将返回的output输出