鄙人生医转码,道行浅薄请谅解~
导入库和数据的操作还是没变的:
import torch
from torch import nn
from d2l import torch as d2l
batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
一、初始化模型参数
这里初始化实在是太简单了,感受一下(下面每一个chap我都想写这么一句):
# PyTorch不会隐式地调整输入的形状。因此,
# 我们在线性层前定义了展平层(flatten),来调整网络输入的形状
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
def init_weights(m):
if type(m) == nn.Linear:
nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights)#到每一层都跑一下去初始化函数
二、重新审视softmax的实现
虽然这部分书上写了很多,但是实际上就只有一行代码,没有原本的分类精度,也没有原本的交叉熵损失的一步步定义,这么看好像之前的工作都没了意义,但我觉得相比于一知半解的走进研究生阶段,又和这过去3年的以及过去9年的应试教育又有何区别?我很喜欢重新审视这个短语,虽然现在学的只是深度学习的皮毛,但是没有重新审视这个过程,在某一刻就永远无法突破,虽然这里审视的是softmax的规范化问题啦~
loss = nn.CrossEntropyLoss(reduction='none')
三、优化算法
优化算法依旧与我们在线性回归例子中的相同,这也说明了优化器的普适性
trainer = torch.optim.SGD(net.parameters(), lr=0.1)
四、训练
训练启动!
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
这就没了?亏内,实在是精简太多了,我也要成为调库侠···