### 1. Inception 块的基础结构

Inception 结构中采用1×13×35×5三种卷积核的卷积层进行并行提取特征，这可以加大网络模型的宽度，不同大小的卷积核也就意味着原始Inception 结构可以获取到不同大小的感受野，上图中的最后合并就是将不同尺度特征进行深度融合。

Inception块中可以自定义的超参数是每个层的输出通道数，以此来控制模型复杂度。

import time
import torch
from torch import nn, optim
import torch.nn.functional as F
import sys
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
class Inception(nn.Module):
# c1 - c4为每条线路里层的输出通道数
def __init__(self, in_c, c1, c2, c3, c4):
super(Inception, self).__init__()
# 线路1，单1 x 1卷积层
self.p1_1 = nn.Conv2d(in_c, c1, kernel_size=1)
# 线路2，1 x 1卷积层后接3 x 3卷积层
self.p2_1 = nn.Conv2d(in_c, c2[0], kernel_size=1)
self.p2_2 = nn.Conv2d(c2[0], c2[1], kernel_size=3, padding=1)
# 线路3，1 x 1卷积层后接5 x 5卷积层
self.p3_1 = nn.Conv2d(in_c, c3[0], kernel_size=1)
self.p3_2 = nn.Conv2d(c3[0], c3[1], kernel_size=5, padding=2)
# 线路4，3 x 3最大池化层后接1 x 1卷积层
self.p4_2 = nn.Conv2d(in_c, c4, kernel_size=1)
def forward(self, x):
p1 = F.relu(self.p1_1(x))
p2 = F.relu(self.p2_2(F.relu(self.p2_1(x))))
p3 = F.relu(self.p3_2(F.relu(self.p3_1(x))))
p4 = F.relu(self.p4_2(self.p4_1(x)))
return torch.cat((p1, p2, p3, p4), dim=1)  # 在通道维上连结输出

b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),
nn.ReLU(),
nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

b2 = nn.Sequential(nn.Conv2d(64, 64, kernel_size=1),
nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

b3 = nn.Sequential(Inception(192, 64, (96, 128), (16, 32), 32),
Inception(256, 128, (128, 192), (32, 96), 64),
nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

b4 = nn.Sequential(Inception(480, 192, (96, 208), (16, 48), 64),
Inception(512, 160, (112, 224), (24, 64), 64),
Inception(512, 128, (128, 256), (24, 64), 64),
Inception(512, 112, (144, 288), (32, 64), 64),
Inception(528, 256, (160, 320), (32, 128), 128),
nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

b5 = nn.Sequential(Inception(832, 256, (160, 320), (32, 128), 128),
Inception(832, 384, (192, 384), (48, 128), 128),
d2l.GlobalAvgPool2d())
net = nn.Sequential(b1, b2, b3, b4, b5,
d2l.FlattenLayer(), nn.Linear(1024, 10))

net = nn.Sequential(b1, b2, b3, b4, b5, d2l.FlattenLayer(), nn.Linear(1024, 10))
X = torch.rand(1, 1, 96, 96)
for blk in net.children():
X = blk(X)
print('output shape: ', X.shape)

output shape:  torch.Size([1, 64, 24, 24])
output shape:  torch.Size([1, 192, 12, 12])
output shape:  torch.Size([1, 480, 6, 6])
output shape:  torch.Size([1, 832, 3, 3])
output shape:  torch.Size([1, 1024, 1, 1])
output shape:  torch.Size([1, 1024])
output shape:  torch.Size([1, 10])

batch_size = 128
# 如出现“out of memory”的报错信息，可减小batch_size或resize
lr, num_epochs = 0.001, 5
d2l.train_ch5(net, train_iter, test_iter, batch_size, optimizer, device, num_epochs)

training on  cuda
epoch 1, loss 0.0087, train acc 0.570, test acc 0.831, time 45.5 sec
epoch 2, loss 0.0032, train acc 0.851, test acc 0.853, time 48.5 sec
epoch 3, loss 0.0026, train acc 0.880, test acc 0.883, time 45.4 sec
epoch 4, loss 0.0022, train acc 0.895, test acc 0.887, time 46.6 sec
epoch 5, loss 0.0020, train acc 0.906, test acc 0.896, time 43.5 sec

### 5.总结

• Inception块相当于一个有4条线路的子网络。它通过不同窗口形状的卷积层和最大池化层来并行抽取信息，并使用1 × 1 1\times 11×1卷积层减少通道数从而降低模型复杂度。

|
6天前
|

【7月更文挑战第16天】 使用Python实现深度学习模型：视频处理与动作识别
41 17
|
8天前
|

【7月更文挑战第14天】 使用Python实现深度学习模型：文本生成与自然语言处理
36 12
|
5天前
|

【7月更文第17天】当我们谈论人工智能时，神经网络常常是那个闪亮的明星。从最初的简单模型——感知机，到当今复杂而强大的深度学习系统，这场技术革命正以前所未有的方式改变着我们的世界。今天，咱们就用通俗易懂的语言，搭配一些简单的代码示例，来一场《深入神经网络：从感知机到深度学习》的探索之旅。
20 8
|
7天前
|

41 9
|
3天前
|

【YOLOv8改进- Backbone主干】YOLOv8更换主干网络之ConvNexts，纯卷积神经网络，更快更准，，降低参数量！
YOLOv8专栏探讨了针对目标检测的ConvNet创新，提出ConvNeXt模型，它挑战Transformer在视觉任务中的主导地位。ConvNeXt通过增大卷积核、使用GeLU激活、切换到LayerNorm和改进下采样层，提升了纯ConvNet性能，达到与Transformer相当的准确率和效率。论文和代码已公开。
18 4
|
5天前
|

【7月更文挑战第17天】 使用Python实现深度学习模型：图像超分辨率与去噪
19 4
|
3天前
|

【YOLOv8改进- Backbone主干】YOLOv8 更换主干网络之 PP-LCNet，轻量级CPU卷积神经网络，降低参数量
15 2
|
9天前
|

21 9
|
3天前
|

【YOLOv8改进- Backbone主干】YOLOv8 更换主干网络之EfficientNet，高效的卷积神经网络，降低参数量
YOLOv8专栏探讨了目标检测的创新改进，包括模型扩展和神经架构搜索。提出的新方法使用复合系数平衡网络的深度、宽度和分辨率，产生了EfficientNets系列，其在准确性和效率上超越了先前的ConvNets。EfficientNet-B7在ImageNet上达到84.3%的顶级准确率，同时保持较小的模型大小和更快的推理速度。文章提供了论文和代码链接，以及核心的EfficientNet模型构建Python代码。
17 1
|
3天前
|

【7月更文挑战第19天】 使用Python实现深度学习模型：语音合成与语音转换
17 1