算法流程
-
首先导入了需要使用的库和模块:
import torch from torch import nn from main import load_data_fashion_mnist, train_ch3
这些库和模块包含了构建和训练模型所需的功能。load_data_fashion_mnist, train_ch3两个函数具体可看 深度学习实践2
-
定义了一个包含两个全连接层的神经网络模型
net
:net = nn.Sequential(nn.Flatten(), nn.Linear(784, 256), nn.ReLU(), nn.Linear(256, 10))
这个模型包含一个将输入展平的
Flatten
层,一个输入维度为784、输出维度为256的全连接层,一个ReLU激活函数,以及一个输入维度为256、输出维度为10的全连接层。 -
定义了一个函数
init_weights
用于初始化模型的权重:def init_weights(m): if type(m) == nn.Linear: nn.init.normal_(m.weight, std=0.01)
这个函数接收一个模块
m
,如果模块是nn.Linear
类型的,则对其权重进行正态分布初始化。 -
使用
apply
方法将初始化权重的操作应用到模型net
的所有模块上:net.apply(init_weights)
这样可以确保模型的权重被正确初始化。
-
设置了一些训练的超参数:
batch_size, lr, num_epochs = 256, 0.1, 10
这里设置了批次大小为256,学习率为0.1,迭代周期数为10。
-
定义了损失函数
loss
为交叉熵损失:loss = nn.CrossEntropyLoss()
这个损失函数用于计算模型预测结果与真实标签之间的交叉熵损失。
-
定义了优化器
trainer
为随机梯度下降(SGD)优化器:trainer = torch.optim.SGD(net.parameters(), lr=lr)
这个优化器用于更新模型的参数,其中
net.parameters()
返回模型中所有需要学习的参数。 -
使用
load_data_fashion_mnist
函数加载Fashion-MNIST数据集:train_iter, test_iter = load_data_fashion_mnist(batch_size)
这里将训练集和测试集的数据加载器分别赋值给
train_iter
和test_iter
。 -
调用
train_ch3
函数进行模型训练:train_ch3(net, train_iter, test_iter, loss, num_epochs, trainer)
这里传入模型
net
、训练数据加载器train_iter
、测试数据加载器test_iter
、损失函数loss
、迭代周期数num_epochs
和优化器trainer
进行训练。
结果
1 (0.7864819016138712, 0.7459166666666667, 0.7754)
2 (0.5714084996541341, 0.8120833333333334, 0.7976)
3 (0.5254668966929118, 0.82495, 0.8052)
4 (0.501056636873881, 0.8320666666666666, 0.8246)
5 (0.4861722059249878, 0.8368333333333333, 0.8247)
6 (0.4742358523050944, 0.8391666666666666, 0.8264)
7 (0.46462928047180174, 0.84315, 0.8117)
8 (0.4579755872090658, 0.8445166666666667, 0.8314)
9 (0.45267214221954344, 0.8464166666666667, 0.8326)
10 (0.44778603076934814, 0.8480833333333333, 0.8019)