一、神经网络(Neural network)架构torch.nn
1.1 神经网络架构

1.2 卷积神经网络
1.2.1 介绍
- 卷积神经网络(CNN)应用于计算机视觉领域,特征提取方法,任务:图像的分类和检索。
- GPU图像处理单元:GPU做卷积比CPU快得多
- 卷积网络与传统神经网络区别:数据二维->三维
- 整体架构:

1.2.2 输入层
1.2.3 卷积层
-
卷积的任务:图像分割成很多部分,对于不同区域提取出不同特征,经过卷积核计算,计算出每个区域的特征值,将5×5×5-> 3×3×3,卷积可做多次

-
图像颜色通道:3个颜色通道R G B做加法

-
输入与不同的卷积核Filter Wi做内积得到的结果不同,一般做完卷积会加上一个偏置参数bias(下图对应:in_channel=3,out_channel=2,卷积核个数/大小为2/3×3,第一/二个bias为1/0)

-
卷积层一些参数:
1)滑动窗口步长:不同步长得到的输出不同,一般来说步长越小精度越高,但效率会变慢,一般选择1
2)卷积核尺寸:Filter Wi的尺寸,一般选择3×3
3)边缘填充:往上数第二图的输入的图,边界的点被计算的次数少,显然不公平。于是在边界点外侧再填充一些点(灰色部分0)
4)卷积核个数(n):Filter Wi i=0,1…,n-1。要想得到多个特征图,需要设置不同的卷积核。
例:11×11 fileters at stride 4 pade 0表示卷积核尺寸11×11,步长2,填充0




1.2.4 池化层:压缩 筛选


1.2.5 全连接层:卷积层和池化层只做特征提取,全连接层将一个图拉成特征向量
例如:
32×32×10->[10240,5]
带参数计算的才算做一层,卷积(CONV计算) 激活(RELU无计算) 池化(POOL无计算) 全连接(FC计算),所以以下7层神经网络。


1.2.6 经典的架构:
-
12年Alexnet:8层

-
14年Vgg:16/19层,且卷积核3×3,经过maxpolling损失的信息在下一步弥补起来

-
15年Resnet:按理说层数越高效果越好,但是实际并不是这样。于是,提出“同等映射”,在堆叠过程中得到F(x)如果表现不好将F(x)变为0,再在下一步加上原来的同等映射x,即F(x)+x


1.2.7 感受野:越大越好


二、各层的使用
2.1 容器Containers:nn.Module
import torch
from torch import nn
class Mywork(nn.Module):
# 可以使用alt+insert重写/实现方法
def __init__(self):
super().__init__()
# 前向传播
def forward(self, input):
output = input + 1
return output
mywork = Mywork()
x = torch.tensor(1.0)
output = mywork(x)
print(output)
输出:
tensor(2.)
2.2 卷积层Convolution Layers:nn.conv2d
- 代码演示
import torch
import torchvision.datasets
from torch import nn
from torch.nn import Conv2d
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
# 演示卷积层
# 进过卷积操作:64×3×32×32-》64×6×30×30
# 最后因为6通道无法输出,需要变成3通道:64×6×30×30-》128×3×30×30
dataset = torchvision.datasets.CIFAR10("./dataset", train=False,
transform=torchvision.transforms.ToTensor(), download=True)
# 一次取64张图片
dataloader = DataLoader(dataset, batch_size=64)
class Mydata(nn.Module):
def __init__(self):
super(Mydata, self).__init__()
# 卷积设置:输入通道为3,输出通道为6,卷积核大小3×3,步数为1,不填充
self.conv1 = Conv2d(in_channels=3, out_channels=6, kernel_size=3, stride=1, padding=0)
def forward(self, x):
x = self.conv1(x)
return x
mydata = Mydata()
step = 0
writer = SummaryWriter("logs")
for data in dataloader:
imgs, targets = data
output = mydata(imgs)
# torch.Size([64, 3, 32, 32])
# torch.Size([64, 6, 30, 30])
# 可知输入64×3×32×32-》64×6×32×32 (数量,通道,图长,图宽)
print(imgs.shape)
print(output.shape)
writer.add_images("inputImage", imgs, step)
# 这里64×6×30×30无法直接输出,需要变成 yyy×3×30×30
# 下面参数-1表示未知,经过计算可得出为128
output = torch.reshape(output, (-1, 3, 30, 30))
writer.add_images("outputImage", output, step)
step = step + 1
writer.close()
- 结果展示:可以看出经过卷积操作图片的变化

2.3 填充层Padding Layers
2.4 池化层Pooling Layers
- 代码演示
import torchvision.datasets
from torch import nn
from torch.nn import MaxPool2d
from torch.utils.</

本文详细介绍了卷积神经网络(CNN)的基本架构,包括输入层、卷积层、池化层、全连接层以及经典的网络架构如AlexNet、VGG和ResNet。此外,还讨论了卷积层的关键参数,如卷积核大小、步长和填充,并展示了如何在PyTorch中使用nn.Module、nn.Conv2d等构建和应用CNN。同时,提到了非线性激活函数、线性层、Sequential层、损失函数和优化器在模型训练中的作用。
最低0.47元/天 解锁文章
1524

被折叠的 条评论
为什么被折叠?



