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)

  

posted @ 2021-07-27 20:05  小秦同学在上学  阅读(391)  评论(0编辑  收藏  举报