Softmax分类器

回顾

上节课利用糖尿病数据集做了二分类任务
在这里插入图片描述
MNIST数据集有10个类别我们又该如何进行分类呢?
在这里插入图片描述

使用Sigmoid构建多分类器?

之前二分类使用的是sigmoid函数进行分类,它可以把输出归一化到[0,1]之间。如果使用Sigmoid激活函数进行多分类,会出现一个问题:每个类别的概率都是[0,1]之间,他们加起来的概率和可能就不为1.我们想要的结果是满足一个分布:概率P>=0;并且概率之和=1.
在这里插入图片描述
在这里插入图片描述

SoftMax函数

其实就是对输出值y取对数,然后再除以输出的对数之和
在这里插入图片描述
在这里插入图片描述

交叉熵损失函数

标签采用One-hot编码,与预测的概率值计算损失。

  • 后面部分叫做NLLLoss
    在这里插入图片描述
    在这里插入图片描述
  • pytorch的CrossEntropyLoss=softmax+NLLLoss

在这里插入图片描述

例子

在这里插入图片描述

MINIST多分类器

数据集

MINIST数据是一个28*28像素的矩阵,如果把它线性隐射到[0,1]之间
在这里插入图片描述

步骤

在这里插入图片描述

实现

1.数据集

transforms.ToTensor()

  • transform进行图像变换,将PIL图像变换为C*W *H大小的的Tensor。
  • PIL库会将图片像素由[0,255]映射到[0,1]之间,方便pytorch进行运算。
transform=transforms.Compose([transforms.ToTensor(),#Convert the PIL Image to Tensor.
                              transforms.Normalize((0.1307,),(0.3081,))])#The parameters are mean and std respectively.

在这里插入图片描述
图像我们通常会有通道这个概念,可以理解为一个通道就是一个图像的矩阵。

  • 灰度图片只有一个通道;
  • 彩色图片:R、G、B三个通道;
  • 所以一张图片其实可以表示成WHC,在Pytorch中我们需要转换为CWH,即通道数C要放在最前面。
    在这里插入图片描述
    在这里插入图片描述
    transforms.Normalize((0.1307,),(0.3081,))
  • 归一化,参数分别是均值和标准差
  • 在这里插入图片描述

2.构建模型

  • 将输入图像进行view,变成(N,784),然后进行训练。
  • 注意最后一层线形层不需要激活函数,因为交叉熵损失函数包含了softmax激活函数。
    在这里插入图片描述
class Net(torch.nn.Module):
    def __init__(self):
        super(Net,self).__init__()
        self.linear1=torch.nn.Linear(784,512)
        self.linear2=torch.nn.Linear(512,256)
        self.linear3=torch.nn.Linear(256,128)
        self.linear4=torch.nn.Linear(128,64)
        self.linear5=torch.nn.Linear(64,10)

    def forward(self, x):
        x=x.view(-1,784)#把每一张图片的像素都拼接起来,然后变成二维(N,748)(748=28*28)
        x=F.relu(self.linear1(x))
        x
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值