当前位置:   article > 正文

使用pytorch实现CNN

pytorch实现cnn

使用pytorch构建神经网络系列

第四章 使用pytorch实现CNN


1.卷积层

input channel = 1
Number of kernel = 3
kernel_size=3* 3
stride=1
padding=0

layer = nn.Conv2d(1,3,kernel_size=3, stride=1, padding=0) # 1 指的是input channel,3指的是kernel数量
x = torch.rand(1,1,28,28)
out = layer.forward(x)
out.shape
  • 1
  • 2
  • 3
  • 4
torch.Size([1, 3, 26, 26])
  • 1

padding = 1

layer = nn.Conv2d(1,3,kernel_size=3, stride=1, padding=1) # 1 指的是input channel,3指的是kernel数量
x = torch.rand(1,1,28,28)
out = layer.forward(x)
out.shape
  • 1
  • 2
  • 3
  • 4
torch.Size([1, 3, 28, 28])
  • 1

stride=2, padding=1

layer = nn.Conv2d(1,3,kernel_size=3, stride=2, padding=1) # 1 指的是input channel,3指的是kernel数量
x = torch.rand(1,1,28,28)
out = layer(x)
out.shape
  • 1
  • 2
  • 3
  • 4
torch.Size([1, 3, 14, 14])
  • 1

Inner weight & bias

layer.weight
  • 1
Parameter containing:
tensor([[[[ 0.2707, -0.0963,  0.1320],
          [-0.3079,  0.2748, -0.2578],
          [-0.2599, -0.2093,  0.1575]]],


        [[[-0.1442, -0.1604, -0.0696],
          [-0.1756, -0.2574, -0.0920],
          [-0.0144,  0.2705,  0.1098]]],


        [[[-0.2493, -0.1132,  0.3068],
          [-0.0886, -0.1119,  0.2752],
          [ 0.0672, -0.2881, -0.1102]]]], requires_grad=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
layer.weight.shape, layer.bias.shape
  • 1
(torch.Size([3, 1, 3, 3]), torch.Size([3]))
  • 1

2.Pooling

reduce size
在这里插入图片描述
Max pooling
在这里插入图片描述

y = out
layer = nn.MaxPool2d(2,stride=2)
out = layer(y)
y.shape,out.shape
  • 1
  • 2
  • 3
  • 4
(torch.Size([1, 3, 14, 14]), torch.Size([1, 3, 7, 7]))
  • 1

upsampling
放大采样:

x = out
out = F.interpolate(x, scale_factor=2, mode='nearest')
out.shape
  • 1
  • 2
  • 3
torch.Size([1, 3, 14, 14])
  • 1

3.ReLU

在这里插入图片描述
inplace= True 节省内存空间

layer = nn.ReLU(inplace= True)
  • 1

4.batch norm

利于我们搜索最优解
在这里插入图片描述
Feature scaling
image Normalization:
RGB三通道数据分别减去均值除以标准差:
在这里插入图片描述
Normalization:
在这里插入图片描述
Batch Normalization
belta 和 gama 需要记录信息进行梯度更新,均值方差不需要
在这里插入图片描述

x = torch.rand(100,16,784) #16 channels
layer = nn.BatchNorm1d(16)
out = layer(x)
layer.running_mean, layer.running_var
  • 1
  • 2
  • 3
  • 4
(tensor([0.0500, 0.0502, 0.0500, 0.0499, 0.0501, 0.0501, 0.0500, 0.0499, 0.0501,
         0.0498, 0.0500, 0.0497, 0.0502, 0.0501, 0.0500, 0.0499]),
 tensor([0.9083, 0.9083, 0.9083, 0.9084, 0.9084, 0.9083, 0.9083, 0.9083, 0.9083,
         0.9084, 0.9083, 0.9083, 0.9084, 0.9083, 0.9084, 0.9083]))
  • 1
  • 2
  • 3
  • 4

Pipeline:
在这里插入图片描述在这里插入图片描述
'affine’设置为True表示需要梯度更新belta 和 gama

只在training的时候更新belta 和 gama,在test的时候要切换到evaluation:

layer.eval()
  • 1

Advantages
​Converge faster
Better performance
Robust

5.ResNet

在这里插入图片描述
在这里插入图片描述

6.nn.modules

直接调用一些基本的类
nn.Linear
nn.BatchNorm2d
nn.Conv2d
在这里插入图片描述

Every Layer is nn.Module
Container
net(x)
在这里插入图片描述
parameters
查看参数:
在这里插入图片描述
modules
modules: all nodes
children: direct children
嵌套
在这里插入图片描述在这里插入图片描述
to(device)
在这里插入图片描述
save and load
在这里插入图片描述
train/test
在这里插入图片描述
implement own layer
可以在Sequential 中直接调用:
在这里插入图片描述
own linear layer
是创建自己的网络层
在这里插入图片描述

7.数据增强

Flip,Rotate,Random Move & Crop,GAN
torchvision包:
transforms.Compose
Flip
在这里插入图片描述
Rotate

在这里插入图片描述
缩放:
transforms.Resize
裁剪:
transforms.RandomCrop
增加noise
!Data argumentation will help But not too much

参考:网易云课程

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/194174
推荐阅读
相关标签
  

闽ICP备14008679号