Softmax回归

前言

Softmax回归主要用于分类问题,它所解决的是常规分类算法输出值不稳定的问题

比如 有三种类别分类,我对于一组图像输出值为0.1 100 0.1
那很显然,我们第二个输出值较大,可以表明第二类是我们预测的类别

但是如果对于另外一组图片 1000 100 1000 对于这种例子,在刚刚举的例子最大输出值,在这一组就显得比较小,这种误差值比较大,我们难以在后续的优化算法进行优化

所以我们提出的Softmax算法,就是将输出值转换到0–1的概率分布

在这里插入图片描述
这么看可能很难看懂

我举个简单的例子 比如一个输出值为 [ 1, 2, 3]
那么经过softmax转换后
我们输出值1就转换为

e 1 / ( e 1 + e 2 + e 3 ) e^1/(e^1 + e^2 + e^3) e1/(e1+e2+e3)
我们就通过这样一个函数
将输出值映射为0–1的值,并且这些值累加起来等于1

实战

这里我举得例子是动手写深度学习里面的softmax回归实现分类FashionMnist
使用的是mxnet内核

我们要想反向求出梯度
那么我们需要定义一个损失函数

这个损失函数是交叉熵函数

H = − Σ ( y log ⁡ ( y ⋅ ) ) H = -\Sigma(y\log(y·)) H=Σ(ylog(y))
这里y是正确的分类标签,而y`是我们预测出来的分类标签

交叉熵适合衡量两个概率分布的差异

我们这里重点讲一下Softmax回归实现
显然我们是需要求得样本的指数运算值,以及样本指数运算值累加和

def softmax(X):
    X_exp = X.exp()
    partition = X_exp.sum(axis=1, keepdims=True)
    return X_exp / partition

这里运用了广播机制
我们可以进行验证

from mxnet import nd


def softmax(X):
    X_exp = X.exp()
    partition = X_exp.sum(axis=1, keepdims=True)
    return X_exp / partition

X = nd.array([[1, 2, 3], [4, 5, 6]])
print(softmax(X))

输出结果为


[[0.09003057 0.24472848 0.66524094]
 [0.09003057 0.24472846 0.66524094]]
<NDArray 2x3 @cpu(0)>

Process finished with exit code 0

进行简单的实验后我们开始正式进行模型的搭建

import deep_learning_course_d2lzh.d2lzh as d2l
from mxnet import gluon, init
from mxnet.gluon import loss as gloss, nn


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

net = nn.Sequential()
net.add(nn.Dense(10))
net.initialize(init.Normal(sigma=0.01))

loss = gloss.SoftmaxCrossEntropyLoss()
trainer = gluon.Trainer(net.collect_params(), 'sgd', {'learning_rate':0.1})

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

其他的冗余代码就不敲了,本文主要是分析softmax回归的原理以及应用

总的来说softmax回归能让预测值稳定在0-1分布,能更好的进行损失值计算优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值