深度学习(PyTorch)——多分类问题(Softmax Classifier)

B站up主“刘二大人”视频 笔记

这节课的内容,主要是两个部分的修改:
一是数据集:直接采用了内置的MNIST的数据集,那dataloader和dataset自然也是内置的,那也就不用自己写dataset再去继承Dataset类;
再有是把train和test写成了函数形式,直接在main函数当中调用即可;
除了本节课想要实现的代码,刘老师在本节课前一半讲了这些内容:
下了很大功夫讲清楚了softmax这个函数的机理:y_pred = np.exp(z) / np.exp(z).sum();
还有交叉熵损失函数是什么一回事,非常流畅简洁地给我讲懂了这个公式的意思:loss = (- y * np.log(y_pred)).sum();
根据这两个函数的理论,用numpy的计算法则把公式实现了,之后才去调用了pytorch当中写好了的函数;
还强调了NLL-Loss的概念,并且留了思考题,为什么会:CrossEntropyLoss <==> LogSoftmax + NLLLoss?
到了pytorch当中,里面有Softmax和Softmax_log两个函数版本;

程序如下:

import torch
from torchvision import transforms  # 该包主要是针对图像进行处理
from torchvision import datasets
from torch.utils.data import DataLoader
import torch.nn.functional as F
import torch.optim as optim  # 优化器的包

# prepare dateset

batch_size = 64
transforms = transforms.Compose([transforms.ToTensor(),  # 把输入的图像转变成张量 通道*宽度*高度,取值在(0,1)
                                 transforms.Normalize((0.1307,), (0.3081,))])  # 归一化,0.1307均值和0.3081方差

train_dataset = datasets.MNIST(root='../dataset/mnist/',
                               train=True,
                               download=True,
                               transform=transforms)
train_loader = DataLoader(train_dataset,
                          shuffle=True,
                          batch_size=batch_size)
test_dataset = datasets.MNIST(root='../dataset/mnist/',
                              train=False,
                              download=True,
                              transform=transforms)
test_loader = DataLoader(train_dataset,
                         shuffle=False,
                         batch_size=batch_size)

# design model using class


class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.l1 = torch.nn.Linear(784, 512)  # 输入维度784,输出维度521
        self.l2 = torch.nn.Linear(512, 256)
        self.l3 = torch.nn.Linear(256, 128)
        self.l4 = torch.nn.Linear(128, 64)
        self.l5 = torch.nn.Linear(64, 10)

    def forward(self, x):
        x = x.view(-1, 784)  # -1其实就是自动获取mini_batch,view可以改变张量的形状,输入层拿到了n*784的矩阵
        x = F.relu(self.l1(x))  # 用relu对每一层算出的结果进行激活
        x = F.relu(self.l2(x))
        x = F.relu(self.l3(x))
        x = F.relu(self.l4(x))
        return self.l5(x)  # 最后一层不做激活,不进行非线性变换,这些工作交给交叉熵损失负责


model = Net()

# construct loss and optimizer
criterion = torch.nn.CrossEntropyLoss()  # 构造损失函数,交叉熵损失
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.5)  # 构造优化器 lr为学习率,momentum为冲量来优化训练过程

# training cycle forward, backward, update


def train(epoch):
    running_loss = 0.0
    for batch_idx, data in enumerate(train_loader, 0):
        # 获得一个批次的数据和标签
        inputs, target = data
        optimizer.zero_grad()
        # 获得模型预测的结果(64,10)
        outputs = model(inputs)
        # 交叉熵代价函数outputs(64,10),targe(64)
        loss = criterion(outputs, target)
        loss.backward()
        optimizer.step()

        running_loss += loss.item()
        if batch_idx % 300 == 299:  # 300次迭代输出一次loss
            print('[%d, %5d] loss:%.3f' % (epoch+1, batch_idx+1, running_loss/300))
            running_loss = 0.0


def test():  # 不需要反向传播,只需要正向的
    correct = 0
    total = 0
    with torch.no_grad():  # 不需要计算梯度
        for data in test_loader:
            images, labels = data
            outputs = model(images)
            _, predicted = torch.max(outputs.data, dim=1)  # dim=1 列是第0个维度,行是第1个维度,返回值是每一行最大值和每一行最大值下标
            total += labels.size(0)  #labels.size是一个(N,1)的元组,labels.size(0)=N
            correct += (predicted == labels).sum().item()  # 张量之间的比较运算,然后求和取标量
    print('accuracy on test set:%d %% ' % (100*correct/total))


if __name__ == '__main__':
    for epoch in range(10):
        train(epoch)
        test()

运行结果如下:

视频截图如下: 

 

 

 

 

 

  

 

 ​​​​​

 

 

最后一层不激活,直接给交叉熵损失

 

 

 

 

墨影清泉
关注 关注
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习之图像分类—-多分类支持向量机(Multi-SVM)与softmax分类
01-06
本文学习自该大V 概述: 由于KNN算法的局限性,我们需要实现更强大的方法来实现图像分类,一般情况下该方法包含两个函数,一是评分函数(score function),它是原始图像到每个分类的分值映射,二是损失函数(loss function),它是用来量化预测分类标签的得分与真实标签的一致性的。该方法可以转化为一个最优化问题,在最优化过程中,将通过更新评分函数的参数来最小化损失函数的值,从而使得我们找到一个更好的评分函数(参数W)。 从图像到标签分值的参数化映射 评分函数将图像的像素值映射为各个类别的得分,得分越高说明越有可能属于该类别。 评分函数: 我们定义一个简单的函数映射:$ f(x_i
Softmax Classifier
weixin_33713707的博客
08-27 256
Softmax Classifier softmax分类器和logistics regression有点像,softmax其实就是从logistics发张过来的。由于是多分类了,需要走更多的概率来表示每一个分类softmax的公式: 问题来了,为什么不直接求?而是绕这么大的一圈最后还是求最大值。①我们需要的...
深度学习pytorch——多分类问题(持续更新)
2201_76139143的博客
03-24 1183
1、回归问题的目标是使预测值等于真实值,即pred=y。2、求解回归问题的方法是使预测值和真实值的误差最小,即minimize dist(pred,y),一般我们通过求其2-范数,再平方得到它的最小值,也可以直接使用1-范数。
深度学习——多分类问题(SOFTMAX MNIST)-学习笔记
热门推荐
qq_58152527的博客
04-10 1万+
深度学习——多分类问题 在深度学习里有个经典的数据集MNIST-dataset,它是一个手写的数字照片集合,也是一个经典的做多分类的一个集合。 这个集合是由0~9 10个数组成的集合,我们需求是分析输入的数字对应真实数字的概率是多少,说明需要十个标签,十个分类。 多分类问题 逻辑图 把原来只有一个输出,加到10个每个输出对应一个数字,这样可以得到每个数字对应的概率值,这里每个输出做的都是sigmoid二分类(即是非1即0),所以只要有一项输出为1时,其他非1的输出...
【火炉炼AI】深度学习010-Keras微调提升性能(多分类问题
weixin_33964094的博客
11-15 132
【火炉炼AI】深度学习010-Keras微调提升性能(多分类问题) (本文所使用的Python库和版本号: Python 3.6, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2, Keras 2.1.6, Tensorflow 1.9.0) 前面的文章(【火炉炼AI】深度学习007-Keras微调进一步提升性能)我们对二分类问题用Keras进行了Fin...
深度学习 第九讲 多分类问题
pkapkaever的博客
07-31 329
softmax层如何让输出全部>=0,且和为1
深度学习PyTorch极简入门PDF教程1
08-03
介绍。这里,大家把它看成是一个非线性函数即可。这样,线性感知机和非线性单元就构成了单个神经元。单个神经元描述的是输出与单一变量之间的关系。还是上面的例子,如果房
Pytorch——分类问题
12-22
这次我们也是用最简单的途径来看看神经网络是怎么进行事物的分类. 2.数据准备 import torch import matplotlib.pyplot as plt n_data = torch.ones(200,2) x0 = torch.normal(2*n_data, 1) y0 = torch.zeros(200) x1...
动手学深度学习pytorch.pdf
02-26
动手学深度学习pytorch.全面介绍深度学习的动手学习文档。
python深度学习pytorch水稻图像分类完整案例
最新发布
05-31
本资源提供了一个完整的水稻图像分类案例,涵盖了从数据预处理、数据加载、模型定义、训练到评估的全过程。通过此案例,用户可以学习如何...此案例适合于图像分类任务的初学者以及希望掌握PyTorch深度学习框架的用户。
深度学习 神经网络 Pytorch 动物三分类问题数据集
05-19
train -- (ants:124张图片;bees:121张图片;wasp(黄蜂):130张图片)  val -- (ants:70张图片;bees:83张图片;wasp(黄蜂):86张图片)
PyTorch——深度学习多分类问题
weixin_42603976的博客
08-16 2095
pytorch深度学习关于手写数字识别多分类问题代码解析
PyTorch深度学习实践——9.多分类问题
qq_34745777的博客
08-08 546
课程链接:《PyTorch深度学习实践》9.多分类问题 课上示例 示例程序源代码+注释(根据个人理解) import torch from torchvision import transforms # 图像处理工具 from torchvision import datasets from torch.utils.data import DataLoader import torch.nn.functional as F # 使用 ReLU 作为激活函数 import torc
深度学习09—多分类问题(手写数字识别实战torch版)
m0_55196097的博客
09-30 1476
(2)torchvision.datasets:提供常用的数据集,设计上继承 torch.utils.data.Dataset,主要包括:MNIST、CIFAR10/100、ImageNet、COCO等。这个package包含数据读取预处理的一些类,其中两个最常用的类:class torch.utils.data.Dataset 和 class torch.utils.data.DataLoader。(2) torch.nn.functional中包含的是实现好的函数,直接通过接口调用。
【深度学习】多分类问题和多标签分类问题
milu_ELK的博客
02-17 3776
在之前的课程中,我们学习了二分问题,二分问题中的所有数据会被分类为0和1(或者Ture和False)两种输出标签。但是在大多数情况下,分类问题的输出远远不止两种情况,例如之前在课程中举例的肿瘤问题,肿瘤被分为良性和恶性两种,但实际上会有更多的分类情况,它有可能是A型,B型,C型…我们将这种拥有2种以上输出标签的问题称为多分类问题。虽然输出y依旧只能取值有限的离散值,但是输出标签的种类将会有两个以上。
深度学习-多分类问题- Softmax Classifier-自用笔记8
qq_42764492的博客
01-20 1554
深度学习-多分类问题 -Softmax Classifier-自用笔记8 回顾上一讲我们讲的手动加载文件中的糖尿病数据集的二分类问题 https://blog.csdn.net/qq_42764492/article/details/112750673 糖尿病数据集一共有8个feature,输出的y^为是糖尿病的概率p 训练了一个模型如下图: 基于MNIST Dataset介绍多分类Softmax There are 10 labels in MNIST dataset,Output a Distri
神经网络和深度学习-多分类问题Softmax Classifier
Ricardo_PING的Blog
11-29 1701
神经网络和深度学习-多分类问题Softmax Classifier
PyTorch深度学习实战——多分类问题
weixin_66648679的博客
04-10 514
import torch from torchvision import transforms from torchvision import datasets from torch.utils.data import DataLoader import torch.nn.functional as F import torch.optim as optim batch_size = 64 transforms = transforms.Compose([ transforms.ToTensor.
深度学习多分类问题--路透社数据集
qq_36035111的博客
02-24 3760
环境使用keras为前端,TensorFlow为后端 本次构建一个网络,将路透社新闻划分为46个类别。因为有多个类别,所以这是多分类问题。每个数据点只能划分到一个类别,所以,这是一个单标签,多分类问题。如果每个数据点可以划分到多个类别,那么就是多标签,多分类问题。 首先加载数据集 from keras.datasets import reuters #限定为前10000个最常出现的单词 (...
python softmax分类
08-29
- *2* *3* [《PyTorch深度学习实践》第九讲 Softmax Classifier解决多分类问题](https://blog.csdn.net/weixin_45626133/article/details/129986201)[target="_blank" data-report-click={"spm":"1018.2226.3001....

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 窗函数的介绍以及画出常见窗函数(汉宁窗,矩形窗,汉明窗,布莱克曼窗)的时域图和频谱图 42463
  • 基本的信号——Sa函数(抽样信号) 31616
  • 现代信号处理——自适应滤波器(LMS自适应滤波器) 17208
  • 基本的信号——矩阵脉冲信号(门函数) 16465
  • 信号处理中简单实用的方法——提取信号中的包络 15596

最新评论

  • 现代信号处理——自适应滤波器(离散维纳滤波器)

    book_bbyuan: 写的不够通俗

  • 现代信号处理——自适应滤波器(离散维纳滤波器)

    Wyan--: 比如从升余弦滤波器上采到的数值所组成的,是一个对称且中心为1的序列

  • 现代信号处理——自适应滤波器(离散维纳滤波器)

    墨影清泉: 具体是什么序列呢

  • 现代信号处理——自适应滤波器(离散维纳滤波器)

    Wyan--: 请问复杂序列在matlab中如何进行谱分解得到B(z)

  • 手撕《现代信号处理》——通俗易懂的现代信号处理章节详解集合

    墨影清泉: 参考数字信号处理理论,算法与实现(第三版)胡广书编著。现代信号处理教程(第二版)胡广书编著

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 基于wRLS滤波器和神经网络回声残留抑制的AEC模型——论文翻译
  • 利用深度复数神经网络、非线性幅度压缩和相位信息的声学回声消除_2021
  • 基于wRLS滤波器和神经网络回声残留抑制的AEC模型——FSMN神经网络介绍
2024年6篇
2023年54篇
2022年148篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

深圳SEO优化公司中卫建网站公司邢台优化报价阳江百度关键词包年推广价格甘南外贸网站制作价格张掖建设网站多少钱朝阳网站制作公司济源网站seo优化扬州百度网站优化公司昌吉网页制作哪家好永湖百度标王价格吉林关键词排名包年推广金华企业网站制作推荐珠海网站优化按天扣费报价昌都网页设计日照百度seo推荐固原优化推荐迁安网站制作设计哈密企业网站制作哪家好崇左百度竞价哪家好观澜营销网站推荐石家庄网站优化按天计费哪家好信阳网站推广系统宿迁营销网站多少钱梧州百度seo哪家好垦利网站开发公司眉山关键词按天收费公司宁波网站优化按天收费多少钱聊城网站优化按天收费多少钱景德镇模板网站建设报价横岗建设网站多少钱歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化