softmax回归的简洁实现(softmax-regression-pytorch)(代码片段)

ZSYL ZSYL     2023-01-27     355

关键词:

Softmax回归的简洁实现

我们在上篇(线性回归的简洁实现)中已经了解了使用Pytorch实现模型的便利。下面,让我们再次使用Pytorch来实现一个softmax回归模型。首先导入所需的包或模块。

import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l

获取和读取数据

我们仍然使用Fashion-MNIST数据集和上一节中设置的批量大小。

batch_size = 256
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)

定义和初始化模型

在3.4节(softmax回归)中提到,softmax回归的输出层是一个全连接层,所以我们用一个线性模块就可以了。因为前面我们数据返回的每个batch样本x的形状为(batch_size, 1, 28, 28), 所以我们要先用view()x的形状转换成(batch_size, 784)才送入全连接层。

num_inputs = 784
num_outputs = 10

class LinearNet(nn.Module):
    def __init__(self, num_inputs, num_outputs):
        super(LinearNet, self).__init__()
        self.linear = nn.Linear(num_inputs, num_outputs)
    def forward(self, x): # x shape: (batch, 1, 28, 28)
        y = self.linear(x.view(x.shape[0], -1))
        return y
    
net = LinearNet(num_inputs, num_outputs)

我们将对x的形状转换的这个功能自定义一个FlattenLayer并记录在d2lzh_pytorch中方便后面使用。

# 本函数已保存在d2lzh_pytorch包中方便以后使用
class FlattenLayer(nn.Module):
    def __init__(self):
        super(FlattenLayer, self).__init__()
    def forward(self, x): # x shape: (batch, *, *, ...)
        return x.view(x.shape[0], -1)

这样我们就可以更方便地定义我们的模型:

from collections import OrderedDict

net = nn.Sequential(
    # FlattenLayer(),
    # nn.Linear(num_inputs, num_outputs)
    OrderedDict([
        ('flatten', FlattenLayer()),
        ('linear', nn.Linear(num_inputs, num_outputs))
    ])
)

然后,我们使用均值为0、标准差为0.01的正态分布随机初始化模型的权重参数。

init.normal_(net.linear.weight, mean=0, std=0.01)
init.constant_(net.linear.bias, val=0) 

softmax和交叉熵损失函数

如果做了上一节的练习,那么你可能意识到了分开定义softmax运算和交叉熵损失函数可能会造成数值不稳定。因此,PyTorch提供了一个包括softmax运算和交叉熵损失计算的函数。它的数值稳定性更好。

loss = nn.CrossEntropyLoss()

定义优化算法

我们使用学习率为0.1的小批量随机梯度下降作为优化算法。

optimizer = torch.optim.SGD(net.parameters(), lr=0.1)

训练模型

接下来,我们使用上一节中定义的训练函数来训练模型。

num_epochs = 5
d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size, None, None, optimizer)

输出:

epoch 1, loss 0.0031, train acc 0.745, test acc 0.790
epoch 2, loss 0.0022, train acc 0.812, test acc 0.807
epoch 3, loss 0.0021, train acc 0.825, test acc 0.806
epoch 4, loss 0.0020, train acc 0.832, test acc 0.810
epoch 5, loss 0.0019, train acc 0.838, test acc 0.823

小结

  • PyTorch提供的函数往往具有更好的数值稳定性。
  • 可以使用PyTorch更简洁地实现softmax回归。

注:本节除了代码之外与原书基本相同,原书传送门

本人出于学习的目的,引用本书内容,非商业用途,推荐大家阅读此书,一起学习!!!


加油!

感谢!

努力!

深度学习——线性神经网络(代码片段)

...计时的Python类二.线性回归的实现三.线性回归简洁实现四.softmax回归的实现五.softmax回归简洁实现一.用以计时的Python类classTimer:"" 查看详情

softmax回归的从零开始实现(softmax-regression-scratch)(代码片段)

《动手学深度学习》Softmax回归的从零开始实现Softmax回归的从零开始实现获取和读取数据初始化模型参数实现softmax运算定义模型定义损失函数计算分类准确率训练模型预测小结Softmax回归的从零开始实现这一节我们来动手实现softm... 查看详情

haskell手撸softmax回归实现mnist手写识别

Haskell手撸Softmax回归实现MNIST手写识别前言初学Haskell,看的书是LearnYouaHaskellforGreatGood,才刚看到MakingOurOwnTypesandTypeclasses这一章。为了加深对Haskell的理解,便动手写了个Softmax回归。纯粹造轮子,只用了base。显示图片虽然用了OpenG... 查看详情

搞定《动手学深度学习》-(李牧)pytorch版本的所有内容

...回归3.2线性回归的从零开始实现3.3线性回归的简洁实现3.4softmax回归3.5图像分类数据集(Fashion-MNIST)3.6softmax回归的从零开始实现3.7softmax回归的简洁实现3.8多层感知机3.9多层感知机的从零开始实现3.10多层感知机的简洁实现... 查看详情

python逻辑回归(logisticregressionlr)底层代码实现bgd梯度下降算法softmax多分类

...录逻辑回归前言一、多0-1分类器1.OVO2.OVR3OvOvsOvR:二、softmax多分类softmax函数预测函数损失函数参数θ\\thetaθ对损失函数的导数关系softmax多分类逻辑回归底层代码实现及可视化参考前言逻辑回归模型(LogisticRegressionModel࿰... 查看详情

softmax-fork(代码片段)

softmax和分类模型内容包含:softmax回归的基本概念如何获取Fashion-MNIST数据集和读取数据softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集中的图像数据进行分类的模型使用pytorch重新实现softmax回归模型 softmax的基本... 查看详情

tensorflow实现softmax回归(模型存储与加载)(代码片段)

1#-*-coding:utf-8-*-2"""3CreatedonThuOct1818:02:26201845@author:zhen6"""78fromtensorflow.examples.tutorials.mnistimportinput_data9importtensorflowastf1011#mn.SOURCE_URL="http://yann.lecun.com/exdb/mni 查看详情

softmax回归(代码片段)

Softmax回归 Contents [hide]1 简介2 代价函数3 Softmax回归模型参数化的特点4 权重衰减5 Softmax回归与Logistic回归的关系6 Softmax回归vs.k个二元分类器7 中英文对照8 中文译者简介在本节中,我们介绍Soft... 查看详情

机器学习:logistic回归原理及其实现

...的一个方法,主要用于解决二分类问题,它是多分类问题softmax的基础,而softmax在深度学习中的网络后端做为常用的分类器,接下来我们将从原理和实现来阐述该算法的思想。1.原理a.问题描述考虑二分类问题,利用回归的思想,... 查看详情

softmax回归(与logistic回归的联系与区别)

SoftMax回归(与Logistic回归的联系与区别)SoftMax试图解决的问题SoftMax回归模型是Logistic回归模型在多分类问题上的推广,即在多分类问题中,类标签y可以取两个以上的值对于Logistic回归的假设函数(h_ heta(x)=frac11+exp(-x)),它的输出结果将被... 查看详情

softmax回归(代码片段)

在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值。Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10... 查看详情

softmax回归

简介在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值。Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问... 查看详情

从softmax回归到logistic回归

  Softmax回归是Logistic回归在多分类问题上的推广,是有监督的。  回归的假设函数(hypothesisfunction)为,我们将训练模型参数,使其能够最小化代价函数:        在Softmax回归中,我们解决的是多分类问题,类标y... 查看详情

softmax回归(转载)

简介在本节中,我们介绍Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值。Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问... 查看详情

softmax和分类模型(代码片段)

softmax和分类模型内容包含:softmax回归的基本概念如何获取Fashion-MNIST数据集和读取数据softmax回归模型的从零开始实现,实现一个对Fashion-MNIST训练集中的图像数据进行分类的模型使用pytorch重新实现softmax回归模型softmax的基本概念... 查看详情

①softmax回归mnist手写数字识别(代码片段)

Softmax在机器学习中有着非常广泛的应用,他计算简单而且效果显著。假设有两个数a和b,且a>b>c如果取max,结果是a如果取softmax,则softmax(a)>softmax(b)>softmax(c),softmax把所有的选项都给出概率。MNIST手写... 查看详情

《动手学深度学习》softmax回归(pytorch版)

softmax-regression1分类问题2softmax回归模型3单样本分类的矢量计算表达式4小批量样本分类的矢量计算表达式5交叉熵损失函数6模型预测及评价小结前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中,模型输... 查看详情

《动手学深度学习》softmax回归(pytorch版)

softmax-regression1分类问题2softmax回归模型3单样本分类的矢量计算表达式4小批量样本分类的矢量计算表达式5交叉熵损失函数6模型预测及评价小结前几节介绍的线性回归模型适用于输出为连续值的情景。在另一类情景中,模型输... 查看详情