本文是《动手学深度学习课程》中Softmax回归简洁实现的笔记,仅用于个人学习记录。
Softmax回归的简洁实现:
首先导入需要使用的包,并设置好batch-size,以及得出训练集和测试集
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)
接着可以定义模型,因为Softmax的输出层是一个全连接层,所以我们用一个线性模块就行。并编写init_weights函数来对模型参数进行初始化,使用均值为0,方差为0.01的正态分布来随机初始化权重参数。
# Pytorch不会隐式地调节输入的形状,可以加入展平层Flatten来讲输入的形状改成所需要的28*28=784
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)
接下来就是定义损失函数。Pytorch中提供了CrossEntropyLoss方法,集成了Softmax运算和交叉熵函数损失计算。
# 将在交叉熵损失函数中传递未进行归一化的预测结果,并同时计算softmax及其对数
loss = nn.CrossEntropyLoss()
定义优化方法,仍使用SGD小批量随机梯度下降这一优化算法,学习率为0.1
trainer = torch.optim.SGD(net.parameters(), lr=0.1)
最后,进行训练
num_epochs = 10
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
以下即为训练结果。
?
|