softmax回归的简洁实现

本文介绍了softmax函数在多分类模型中的应用,包括其如何将未规范化预测转换为概率分布,以及与交叉熵损失的配合。通过PyTorch示例展示了如何在Fashion-MNIST数据集上实现softmax回归。
摘要由CSDN通过智能技术生成

什么是softmax?
社会科学家Duncan Luce 于1959年在选择模型理论基础上发明的softmax函数正是这样做的:softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持可导性,为了实现这一目标,我们首先对每个未规范化的预测求幂,这样可以确保输出为非负数。为了确保最终输出的概率值总和为1,我们再让每个求幂后的结果除以结果的总和,如下式:
在这里插入图片描述
这里,对于所有的j总有0⩽ y ˆ \^{ y } yˆ⩽1。因此 y ˆ \^{ y } yˆ可以视为一个正确的概率分布。softmax运算不会改变未规范化的预测o之间的大小次序,只会确定分配给每个类别的概率。尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变化决定,softmax在多分类模型中应用非常广泛。
常与softmax回归伴随出现的还有交叉熵损失,交叉熵损失是所有的标签分布的预期损失值。例如我们通过softmax预测一个三分类结果y为(0.1,0.8,0.1)与实际结果(0,1,0)之间的差值即为交叉熵损失。
交叉熵的公式为:
在这里插入图片描述

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)
#定义网络,输入为28x28=784 输出为10分类
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)
#损失函数为交叉熵损失函数
loss = nn.CrossEntropyLoss(reduction='none')
#随机梯度下降的方式进行参数反向优化
trainer = torch.optim.SGD(net.parameters(),lr=0.1)

num_epochs = 110
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)

110次迭代后的效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值