softmax回归的简洁实现
一、前言
1、通过深度学习框架的高级API能更方便地实现分类模型。
2、使用Fashion-MNIST数据集,并保持批量大小为256。
#通过pytorch中nn的模型来实现softmax回归 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)
二、初始化模型参数
1、softmax回归的输出层是一个全连接层
2、为了实现模型,我们只需要在 Sequential
中添加一个带有10个输出的全连接层
# PyTorch不会隐式地调整输入的形状。因此,我们在线性层前定义了展平层(flatten),来调整网络输入的形状 # Flatten()将任何维度的tensor转化为2D的tensor # Linear(784, 10)定义线性层,输入是784,输出是10 # nn.Sequential:一个时序容器。Modules 会以他们传入的顺序被添加到容器中 net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10)) def init_weights(m): if type(m) == nn.Linear: # normal_正态分布 nn.init.normal_(m.weight, std=0.01) # apply()用途:当一个函数的参数存在于一个元组或者一个字典中时,用来间接的调用这个函数,并肩元组或者字典中的参数按照顺序传递给参数 # 意思也就是在每层跑一下该函数 net.apply(init_weights);
三、损失函数定义
在交叉熵损失函数中传递未归一化的预测,并同时计算softmax及其对数
loss = nn.CrossEntropyLoss()
四、优化算法
使用学习率为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)