使用Pytorch搭建神经网络
nn.Moudle
nn.Moudle含义
nn.Moudle是所有神经网络模型的父类,我们自己定义的模型应当是nn.Moudle的子类,在我们编写自己的模型时,务必要记得继承该类。同时,我们必须重写init方法与forward前向传播方法,以完成我们自己的网络。
代码实战
import torch.nn as nn
import torch.nn.functional as F
class Model(nn.Module):
def __init__(self):
super(Model, self).__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类,继承了nn.Moudle。
卷积层
卷积层含义
卷积层对于计算机视觉研究者十分重要,其核心理论在CS231N笔记中,目前我们只讨论编程细节。因为输入的特征图为图像,所以目前暂时只讨论CONV2D方法。
官网文档解释如下:
根据上图的公式,我们可以得知在torch.nn.Conv2d函数中有一些重要的参数如下,参数较为常见:
卷积层重要公式
假设我们的特征输入图各参数表示如下:
i n p u t : ( N , C i n , H i n , W i n ) input:\left( N,C_{in},H_{in},W_{in} \right) input:(N,Cin,Hin,Win)
其中N为BatchSize的数量,C为通道数,H,W为特征图长、宽。
假设我们的特征输出图各参数表示如下:
o u t p u t : ( N , C o u t , H o u t , W o u t ) output:\left( N,C_{out},H_{out},W_{out} \right) output:(N,Cout,Hout,Wout)
由卷积核的各个参数,我们可以得到输出图像的大小为:
H o u t = H i n + 2 × P − K S + 1 H_{out}=\frac{H_{in}+2×P-K}{S}+1 Hout=SHin+2×P−K+1
不同卷积操作对比
Blue maps are inputs, and cyan maps are outputs.
动态演示详见:https://github.com/vdumoulin/conv_arithmetic/blob/master/README.md
代码实战
import torch
import torchvision
from torch.utils.data import DataLoader
from torch import nn
dataset = torchvision.datasets.CIFAR10("../../data",train=False,transform=torchvision.transforms.ToTensor(),download=False)
dataloader = DataLoader(dataset,batch_size = 64)
class mrp(nn.Module):
def __init__(self):
super(mrp, self).__init__()<