写作动机
第一篇主要从数学建模的角度总结了近期自学神经网络的成果,但纸上得来终觉浅,不通过代码实现一遍很多东西终究只是空中楼阁。所以本篇总结主要从代码角度回顾总结自学成果。
尽量做到每日一次总结。
行文思路
仿照鱼书的风格,先给出计算图,再一步一步根据计算图搭建代码。
使用框架
因为笔者是一名医学生,所以选择现有的框架——pytorch进行代码的实现。
参考书籍
《动手学深度学习2.0》
2024/3/3——NiN
在每个像素的通道上都分别使用多层感知机。
确定模型
和之前一样,还是Fashion-MNIST。
计算图
代码实现
import torch
from torch import nn
from d2l import torch as d2l
def NiN_BLOCK(input_nums, output_nums, kernel_size, strides, padding):
return nn.Sequential(
nn.Conv2d(input_nums, output_nums, kernel_size, strides, padding),
nn.ReLU(),
nn.Conv2d(ouput_nums, output_nums, kernel_size=1),
nn.ReLU(),
nn.Conv2d(output_nums, output_nums, kernel_size=1),
nn.ReLU()
)
应用
先确定输入和输出:
batch_size = 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
然后搭建网络:
NiN_net = nn.Sequential(
NiN_BLOCK(1, 96, kernel_size=11, strides=4, padding=0),
nn.MaxPool2d(3, stride=2),
NiN_BLOCK(96, 256, kernel_size=5, strides=1, padding=2),
nn.MaxPool2d(3, stride=2),
NiN_BLOCK(256, 384, kernel_size=3, stride=1, padding=1),
nn.MaxPool2d(3, stride=2),
nn.Dropout(0.5),
NiN_BLOCK(384, 10, kernel_size=3, stride=1, padding=1),
nn.AdaptiveAvgPool2d((1,1)),
nn.Flatten()
)
万事俱备,只欠数据:
lr = 0.1
num_epochs = 10
d2l.train_ch6(NiN_net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
结果是: