动手学深度学习(Pytorch版)代码实践 -卷积神经网络-26网络中的网络NiN

26网络中的网络NiN

python 复制代码
import torch
from torch import nn
import liliPytorch as lp
import matplotlib.pyplot as plt

# 定义一个NiN块
def nin_block(in_channels, out_channels, kernel_size, strides, padding):
    return nn.Sequential(
        # 传统的卷积层
        nn.Conv2d(in_channels, out_channels, kernel_size, strides, padding),
        nn.ReLU(),  # 激活函数ReLU
        # 1x1卷积层
        nn.Conv2d(out_channels, out_channels, kernel_size=1),
        nn.ReLU(),  
        # 另一个1x1卷积层
        nn.Conv2d(out_channels, out_channels, kernel_size=1),
        nn.ReLU()   
    )

# 设置dropout的概率
dropout = 0.5 

# 定义NiN模型
net = nn.Sequential(
    # 第一个NiN块,输入通道数为1,输出通道数为96
    nin_block(1, 96, kernel_size=11, strides=4, padding=0),
    # 最大池化层
    nn.MaxPool2d(kernel_size=3, stride=2),
    # 第二个NiN块,输入通道数为96,输出通道数为256
    nin_block(96, 256, kernel_size=5, strides=1, padding=2),
    # 最大池化层
    nn.MaxPool2d(kernel_size=3, stride=2),
    # 第三个NiN块,输入通道数为256,输出通道数为384
    nin_block(256, 384, kernel_size=3, strides=1, padding=1),
    # 最大池化层
    nn.MaxPool2d(kernel_size=3, stride=2),
    # Dropout层,用于防止过拟合
    nn.Dropout(dropout),

    # 最后一个NiN块,输入通道数为384,输出通道数为10
    nin_block(384, 10, kernel_size=3, strides=1, padding=1),
    # 全局平均池化层,将特征图的每个通道的空间维度调整为1x1
    nn.AdaptiveAvgPool2d((1, 1)),
    nn.Flatten()
)

X = torch.rand(size=(1, 1, 224, 224))
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__,'output shape:\t', X.shape)
"""
Sequential output shape:         torch.Size([1, 96, 54, 54])
MaxPool2d output shape:  torch.Size([1, 96, 26, 26])
Sequential output shape:         torch.Size([1, 256, 26, 26])
MaxPool2d output shape:  torch.Size([1, 256, 12, 12])
Sequential output shape:         torch.Size([1, 384, 12, 12])
MaxPool2d output shape:  torch.Size([1, 384, 5, 5])
Dropout output shape:    torch.Size([1, 384, 5, 5])
Sequential output shape:         torch.Size([1, 10, 5, 5])
AdaptiveAvgPool2d output shape:  torch.Size([1, 10, 1, 1])
Flatten output shape:    torch.Size([1, 10])
"""

lr, num_epochs, batch_size = 0.1, 10, 128
train_iter, test_iter = lp.loda_data_fashion_mnist(batch_size, resize=224)
lp.train_ch6(net, train_iter, test_iter, num_epochs, lr, lp.try_gpu())
plt.show()  # 显示绘图
# loss 0.342, train acc 0.873, test acc 0.871
# 1395.1 examples/sec on cuda:0

运行结果:

相关推荐
Easy_API2 小时前
2.8万亿参数,编程反超GPT-6 Astra:Kimi K3.1 Pro把开源模型推到了哪一步
大数据·人工智能·gpt·深度学习
智购科技自动售货机厂家10 小时前
让AI经营自动售货机:从Project Vend看工具权限与业务规则~YH
大数据·服务器·单片机·嵌入式硬件·深度学习
用户0807759078512 小时前
第三方并行库"静默算错":一次 ring attention 的排查记录
深度学习
陈嘿萌12 小时前
ACM MM 2026|告别密集交互!ProtoHGF-Net:基于原型超图的RGBT目标检测新范式
图像处理·人工智能·深度学习·目标检测·计算机视觉·学术研究与理论基础
FanfanZainuli12 小时前
减肥APP智能化技术演进:从“内容推荐“到“AI驱动的个性化闭环“
人工智能·深度学习·机器学习
试剂界的爱马仕13 小时前
α-Cyano-4-hydroxycinnamic acid(CHCA)用作 MALDI-TOF 基质的配制与使用
大数据·人工智能·深度学习·学习
大熊背13 小时前
人工智能中的数学之美---从向量角度理解深度学习中的感知机
人工智能·深度学习
小蒋观天下14 小时前
网络抖动、乱序、丢包:UDP/RTSP/TCP对AI抓拍、轨迹跟踪的不同影响
大数据·人工智能·深度学习
高洁0114 小时前
大模型检索增强生成(RAG)的技术原理与架构设计
人工智能·深度学习·机器学习·django·迁移学习
数聚天成DeepSData14 小时前
两份名录里的同名机构,主键该怎么合并
人工智能·深度学习·机器学习·数据集·deepsdata