P16神经网络基本架构 nn.Module的使用

写在前面:
根据以往的惯例
先看官方文档:
torch.nn
P16神经网络基本架构 nn.Module的使用_第1张图片
其中 container土堆哥认为 翻译成骨架也许更合适。
后面就是向骨架加东西:
卷积层
池化层。
正则化之类

我们点开container

P16神经网络基本架构 nn.Module的使用_第2张图片

点开module
P16神经网络基本架构 nn.Module的使用_第3张图片
我们给的输入 经过forward函数输出(前向传播)


    def forward(self, x):
        x = F.relu(self.conv1(x))     x先经过一次卷积,然后relu(非线性处理)
        return F.relu(self.conv2(x)) 再经历一次卷积,然后relu(非线性处理)

卷积:提取特征。

我们可以继续向下看文档:
P16神经网络基本架构 nn.Module的使用_第4张图片
定义了一个计算
应该再每个子类中都进行重写

一、自己动手

1、一种方法仿照文档

from torch import nn

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()

2、方法二、
P16神经网络基本架构 nn.Module的使用_第5张图片
P16神经网络基本架构 nn.Module的使用_第6张图片

3、这样我们的神经网络模板就创建好了

from torch import nn

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()

    def forward(self,input):
        output = input+1
        return output



然后应用:

from torch import nn
import torch


class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()

    def forward(self,input):
        output = input+1
        return output


tudui=Tudui()
x=torch.tensor(1.0)
output=tudui(x)
print(output)

输出结果:

tensor(2.)

4、需要注意一些东西:
4.1 首先forward是文档里有的,相当于之前学到的__call__方法,所以输入tudui(x)就能输出结果了。
P16神经网络基本架构 nn.Module的使用_第7张图片

4.2 这样的前提是自己创建模板的时候也要 同名 用的是forward!!
假如我们改一下:

class Tudui(nn.Module):
    def __init__(self):
        super(Tudui, self).__init__()

    def ward(self,input):
        output = input+1
        return output

最后不出所料:报错了
raise NotImplementedError(f"Module [{type(self).name}] is missing the required “forward” function")
NotImplementedError: Module [Tudui] is missing the required “forward” function

5、加深理解
5.1 我们可以通过debug看他的过程
P16神经网络基本架构 nn.Module的使用_第8张图片

5.2 按一下可以看到父类的初始化
P16神经网络基本架构 nn.Module的使用_第9张图片

P16神经网络基本架构 nn.Module的使用_第10张图片

5.3 放入xP16神经网络基本架构 nn.Module的使用_第11张图片

5.4
P16神经网络基本架构 nn.Module的使用_第12张图片

5.5 进入forward函数里了
P16神经网络基本架构 nn.Module的使用_第13张图片

你可能感兴趣的:(小土堆,pytorch基础,神经网络,人工智能,深度学习)