Pytorch构造神经网络的几种等价方式

几种构造方式
比较常用的两种方式
1、通过集成nn.Module()来定义一个神经网络
以LeNet为例

# LeNet:卷积+池化+卷积+池化+全连接+全连接+全连接(两层卷积+三层全连接,一共5层)
class Net(nn.Module):
    def __init__(self):
        super().__init__()
        self.Cv = nn.Sequential(
            nn.Conv2d(1,6,kernel_size= 5),
            nn.MaxPool2d(2,2),
            nn.ReLU(),
            nn.Conv2d(6,16,kernel_size= 5),
            nn.MaxPool2d(2,2),
            nn.ReLU()
        ) 
        self.Linear = nn.Sequential(
            nn.Linear(16*4*4,120),
            nn.ReLU(),
            nn.Linear(120,84),
            nn.ReLU(),
            nn.Linear(84,10)
        )
    def forward(self,x):
        x = self.Cv(x)
        x = self.Linear(x.view(x.shape[0],-1))
        return x
net = Net()

2、当模型的计算就是简单的串联各个层时,可以直接使用nn.Senquential()来构造,直接叠加传播层即可,不需要定义forward函数。

#LeNet
net = nn.Sequential(nn.Conv2d(1,6,kernel_size=5),
                    nn.MaxPool2d(2,2),
                    nn.ReLU(),
                    nn.Conv2d(6,16,kernel_size=5),
                    nn.MaxPool2d(2,2),
                    nn.ReLU(),
                    nn.Flatten(),
                    #这一步的作用就是对输入的image进行扁平化处理,相当于x = x.view(x.shape[0],-1),然后再让我们的X进入Linear
                    nn.Linear(16*4*4,120),nn.ReLU(),nn.Linear(120,84),nn.ReLU(),nn.Linear(84,10))
这样构造的net和上面的net是等价的。
上一篇:高斯分布简述


下一篇:开发板挂载NFS问题及解决