笔记小结:Softmax回归预备知识

本文为李沐《动手学深度学习笔记》,用于个人复习记录学习历程,适用于初学者

目录

从回归到分类

对类别进行编码

 定义Softmax操作

交叉熵损失

从回归到分类

回归分类
单值连续输出多个输出
输出预测数值输出i为第i类的置信度
与真实值的区别作为损失通常使用交叉熵损失

对类别进行编码

 

 定义Softmax操作

实现softmax由三个步骤组成:

  1. 对每个项求幂(使用exp);

  2. 对每一行求和(小批量中每个样本是一行),得到每个样本的规范化常数;

  3. 将每一行除以其规范化常数,确保结果的和为1。

表达式为:

softmax(X)_{ij}=\frac{exp(X_{ij})}{\sum_{k}exp(X_{ij})}

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

 正如上述代码,对于任何随机输入,

我们将每个元素变成一个非负数。 此外,依据概率原理,每行总和为1

给出一个简单的例子用于理解:

X = torch.normal(0, 1, (2, 5))
X_prob = softmax(X)
print(X)
print(X_prob)
print(X_prob.sum(1)) #参数0是按列求和,参数1是按行求和

其输出为:

tensor([[-0.2170, -0.1885, -1.1823, -1.5760,  0.2740],
        [ 0.2934,  0.1912,  1.1831, -0.7785, -0.1515]])
tensor([[0.2325, 0.2392, 0.0886, 0.0597, 0.3799],
        [0.1880, 0.1697, 0.4575, 0.0643, 0.1205]])
tensor([1., 1.])

交叉熵损失(重点)

由于我们是对类别进行了一位有效编码(正确的类为1,其他为0),故而交叉熵损失函数变成了真实正确的那类的概率区负对数。 

这里我们用一个简单的函数实现交叉熵损失: 

def cross_entropy(y_hat, y):
    return - torch.log(y_hat[range(len(y_hat)), y])

 配一个简单的例子用于理解:

y = torch.tensor([0, 2])
y_hat = torch.tensor([[0.1, 0.3, 0.6], 
                      [0.3, 0.2, 0.5]])

y_hat[[0, 1], y]  #输出tensor([0.1000, 0.5000])

cross_entropy(y_hat, y) #输出tensor([2.3026, 0.6931])

在这里,总共有3类,对两个问题进行了分类,y表示正确的类别,在这里是第0、2类,y_hat表示第一次第二次对问题的分类给出的概率,y_hat[[0, 1], y]表示实际上正确的类被预测为正确的类的概率,cross_entropy(y_hat, y)表示交叉熵,可以看到,第一个较大而第二个较小,这是符合实际的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值