pytorch深度学习实战lesson23

news2024/11/18 11:19:06

第二十三课 AlexNet

       AlexNet是在2012年被发表的一个金典之作,并在当年取得了ImageNet最好成绩,也是在那年之后,更多的更深的神经网路被提出,比如优秀的vgg,GoogleLeNet.

       其官方提供的数据模型,准确率达到57.1%,top 1-5 达到80.2%. 这项对于传统的机器学习分类算法而言,已经相当的出色。

目录

理论部分

实践部分


理论部分

       机器学习在2000年初期最主流的算法是核方法。其核心是:首先提取特征,然后用核函数计算相关性,也就是说如何判断在高维空间的两个点是如何相关的。核方法是通过拉伸空间把空间变成想要的样子。

       卷积神经网络通常用于处理图片,也就是计算机视觉。计算机视觉是从几何学过来的。

       特征工程在10-15年前是深度学习的主要手段,它探究图片抽取特征的方法。

       过去60年的发展趋势:

       深度神经网络的兴起离不开数据的进步。这里要提到一个非常著名的数据集——ImageNet,它主要用于物体分类,它和mnist数据集的主要区别是:它不是做黑白的手写数字的分类,而是做彩色自然物体的分类,每张图片的大小、样本数还有类数都要比mnist数据集复杂得多。

       因为数据集的扩大和复杂化,因此就允许我使用更深层的网络去抽取里面更复杂的信息。

       下面让我们来看看冠军数据集是如何处理更为复杂的数据集的。

       Alexnet其实本质上是个更深更大的lenet。

Alexnet能获得成功主要在于:

1、构造CNN相对来说比较简单,不需要了解太多计算机方面的知识,它还可以比较方便的跨到不同领域去解决问题;

2、CNN和softmax是一起训练的,可以更加高效。

下面是Alexnet和lenet的对比图:

相比于lenet,Alexnet的核窗口更大,步长更大(否则计算会很难),池化窗口更大,通道更多,层数稍多,隐藏层变大。

实践部分

首先看一下 accuracy ,lenet测试的精度也是0.82,所以现在 Alex net 就直接把我的精度变到了 0.88 ,而且它的好处是没有太多 overfitting 在里面,这是因为学习率比较低,而且我们就跑了 10 epoch 其实loss 还在往下降。所以这一块 Alex 绝对是能够 overfeed 到这个数据集的,只是我们学习率比较低,然后没有跑很多次数据。所以 overfitting 还没有发生在这个地方,大家可以去把那个把学习率改大一点,应该是能看到过过拟合情况。所以但是另外一块就是说主要是我的精度有提升了。

第二个是说代价是什么?lenet训练速度大概是 9 万的,现在Alexnet的训练速度变成了4000,就是慢了 20 倍。所以为什么是说你enet计算量比Alexnet少个 200 倍的样子。但为什么这里只慢了 20 倍呢?是因为lenet太小了,它都无法使用我们的 GPU 的核,我们 GPU 有上千个核,就是说这个 lenet批量很小,然后卷积又很小,它的并行度很差,就是根本无法用上我们 GPU 上千个核。 so ,Alex 相对来说会好一点,但后面的网络更加是适合 GPU 计算。所以 alexnet 相对来说在 GPU 的使用率上,大概是百分之七八十。所以就意味着是我虽然比你计算量多了 200 倍,但实际上也就慢了 20 倍。而且你可以看到Alexnet这个其实不慢,每秒钟能够跑个 4000 个样本。如果你就算是 image net 的话,那么也就120 万个样本的话,那么也就是 3000 秒能跑完,就是将近一个小时能够跑迭代一次数据。在 MG net 上训练100 轮的话,那就是 100 个小时在单卡上也能跑完 100 个小时八九天的样子。所以就是 Alex net 一个性能,所以看到是慢的 20 倍精度从 0.8 涨到了0.88。

 code:

#深度卷积神经网络(AlexNet)
import torch
from torch import nn
from d2l import torch as d2l
import matplotlib.pyplot as plt
net = nn.Sequential(
    nn.Conv2d(1, 96, kernel_size=11, stride=4, padding=1), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Conv2d(96, 256, kernel_size=5, padding=2), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2),
    nn.Conv2d(256, 384, kernel_size=3, padding=1), nn.ReLU(),
    nn.Conv2d(384, 384, kernel_size=3, padding=1), nn.ReLU(),
    nn.Conv2d(384, 256, kernel_size=3, padding=1), nn.ReLU(),
    nn.MaxPool2d(kernel_size=3, stride=2), nn.Flatten(),
    nn.Linear(6400, 4096), nn.ReLU(), nn.Dropout(p=0.5),
    nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5),
    nn.Linear(4096, 10))
#我们构造一个 单通道数据,来观察每一层输出的形状
X = torch.randn(1, 1, 224, 224)
for layer in net:
    X = layer(X)
    print(layer.__class__.__name__, 'Output shape:\t', X.shape)
#Fashion-MNIST图像的分辨率 低于ImageNet图像。 我们将它们增加到 224×224
batch_size = 128
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size, resize=224)
#训练AlexNet
lr, num_epochs = 0.01, 10
d2l.train_ch6(net, train_iter, test_iter, num_epochs, lr, d2l.try_gpu())
plt.show()

Conv2d Output shape:     torch.Size([1, 96, 54, 54])
ReLU Output shape:     torch.Size([1, 96, 54, 54])
MaxPool2d Output shape:     torch.Size([1, 96, 26, 26])
Conv2d Output shape:     torch.Size([1, 256, 26, 26])
ReLU Output shape:     torch.Size([1, 256, 26, 26])
MaxPool2d Output shape:     torch.Size([1, 256, 12, 12])
Conv2d Output shape:     torch.Size([1, 384, 12, 12])
ReLU Output shape:     torch.Size([1, 384, 12, 12])
Conv2d Output shape:     torch.Size([1, 384, 12, 12])
ReLU Output shape:     torch.Size([1, 384, 12, 12])
Conv2d Output shape:     torch.Size([1, 256, 12, 12])
ReLU Output shape:     torch.Size([1, 256, 12, 12])
MaxPool2d Output shape:     torch.Size([1, 256, 5, 5])
Flatten Output shape:     torch.Size([1, 6400])
Linear Output shape:     torch.Size([1, 4096])
ReLU Output shape:     torch.Size([1, 4096])
Dropout Output shape:     torch.Size([1, 4096])
Linear Output shape:     torch.Size([1, 4096])
ReLU Output shape:     torch.Size([1, 4096])
Dropout Output shape:     torch.Size([1, 4096])
Linear Output shape:     torch.Size([1, 10])
training on cuda:0
<Figure size 350x250 with 1 Axes>*n
loss 0.327, train acc 0.879, test acc 0.883
1447.3 examples/sec on cuda:0

进程已结束,退出代码0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22297.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

认识计算机中的简单指令集

我们现在有了一个新的寄存器&#xff0c;叫做指令寄存器。它包含一个字节&#xff0c;不同的内容表示控制部分的不同操作模式。也被称为指令代码。指令寄存器是一个字节&#xff0c;因此可能有多达256条不同的指令。所有指令都涉及在总线上移动字节。指令将导致字节进出RAM&…

【JavaEE】PCB和进程调度的基本过程

文章目录什么是进程PCB的组成PID内存指针文件描述符表并行和并发进程调度相关属性进程的状态优先级上下文进程的记账信息什么是进程 进程是正在运行的程序的实例&#xff08;an instance of a computer program that is being executed&#xff09; 进程&#xff08;process&am…

《爱的四十条法则》

《爱的四十条法则》 [土]艾丽芙沙法克 作者用别样的手法间接向我们阐述了爱的四十条法则&#xff0c;每一条都会触及不同阶段的灵魂&#xff0c;我仅将文中感触较深的摘录如下&#xff1a; 1.尽管有人这样说&#xff0c;但是爱绝对不是来的快&#xff0c;去的也快的甜蜜感觉而…

长尾分布系列论文解析(二)Delving into Deep Imbalanced Regression

大纲引言回归问题中的长尾分布LDSFDS实验和结果总结引言 本文是长尾分布系列论文解析的第二篇&#xff0c;前情提要详见长尾分布系列论文解析&#xff08;一&#xff09;Decoupling Representation and Classifier for Long-Tailed Recognition&#xff0c;本篇要介绍的是回归任…

弹性力学之边界条件

作者&#xff1a;张伟伟&#xff0c;来源&#xff1a;力学酒吧 弹性力学基本方程包括平衡方程、几何方程和广义胡克定律&#xff0c;其中平衡方程和几何方程都属于微分方程。我们知道&#xff0c;在求解微分方程时&#xff0c;会出现积分常数&#xff0c;只有确定了积分常数&a…

JS —— js中的节流与防抖

文章目录 前言一、节流 1.什么是节流2.做节流可解决什么问题3.如何做节流二、防抖 1.什么是防抖2.做防抖可解决什么问题3.如何做防抖总结前言 最近有同学问到节流与防抖的相关知识点&#xff0c;于是乎&#xff0c;四处查资料&#xff0c;找一找&#xff0c;看一看&#xff0c…

单元测试:会变化的定义

有一种东西&#xff0c; 如果它太小&#xff0c;需要付出的努力就太大&#xff1b;如果它太大&#xff0c;就很难测试。 没错&#xff01;它是单元。 但是什么才是一个好的单元定义呢?为什么它如此重要? 单元的定义对测试过程有很大的影响&#xff0c;但同时单元的定义也是不…

Transformer总结和梳理

Transformer总结和梳理Positional encodingSelf-attentionMulti--head-attentionAdd&NormAdd操作Norm操作FeedForwardMASKPadding MaskedSelf-Attention Masked首先来看一下Transformer结构的结构&#xff1a;Transformer是由Encoder和Decoder两大部分组成&#xff0c;首先…

mysql安装与配置及四大引擎和数据类型、建表以及约束、增删改查、常用函数、聚合函数以及合并

目录 一.mysql安装与配置 1.mysql简介 2.mysql 安装 安装MySQL&#xff08;8.0的版本&#xff09; 安装MySQL&#xff08;5.7的版本&#xff09; 删除MySQL&#xff08;这是5.5版本的卸载方式&#xff09; 3.命令行登陆及权限修改 一.启动方式 二.停止 三.重启 wind…

LeetCode每日一题——808. 分汤

LeetCode每日一题系列 题目&#xff1a;808. 分汤 难度&#xff1a;普通 文章目录LeetCode每日一题系列题目示例思路题解题目 有 A 和 B 两种类型 的汤。一开始每种类型的汤有 n 毫升。有四种分配操作&#xff1a; 提供 100ml 的 汤A 和 0ml 的 汤B 。 提供 75ml 的 汤A 和…

大衣哥在《火火的情怀》后,和孟文豪张成军推出《新时代的农民》

最近一段时间&#xff0c;因为《火火的情怀》版权问题&#xff0c;农民歌唱家大衣哥&#xff0c;被著名导演兼编剧谷传民起诉。话说大衣哥因为被谷传民起诉&#xff0c;也被推上了舆论的风口浪尖&#xff0c;同时也让《火火的情怀》又一次大火。 在谷传民起诉大衣哥的案件当中&…

注册会计师怎么注册非执业?注会执业与非执业有何区别

注册会计师怎么注册非执业?以下就是关于注册会计师怎么注册非执业等等的介绍&#xff0c;希望对您有所帮助! 一、申请注册为非执业会员 取得注册会计师考试已合格&#xff0c;但尚未在中国境内从事审计业务工作二年以上者&#xff0c;可以自行向取得全科合格证书省级注册会计…

调研主板,树莓派 VS RK3288板子,还是 RK的主板香,但是只支持 anrdoid 7系统,估计也有刷机成 armbian或者

1&#xff0c;目前树莓派好贵啊&#xff01;Pi4bB 2G卖810 现在价格是&#xff1a;800多啊&#xff0c;疯了 哎真叫贵。 但是有个东西叫做 广告机的板子&#xff0c;是批量生产放到商场&#xff0c;地铁播视频的。 再配上一个屏幕&#xff0c;就可以直接播放广告了。 不同的地…

计算机网络4小时速成:传输层,功能,UDP协议,TCP协议,三次握手,传输数据,四次握手,超时重传,流量控制

计算机网络4小时速成&#xff1a;传输层 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;oracle&#xff0c…

【云原生】Kubernetes(k8s)Calico 客户端工具 calicoctl

文章目录一、概述二、calicoctl 安装三、calicoctl 简单使用1&#xff09;认证信息配置2&#xff09;查看 IP 资源池3&#xff09;配置 IP 池4&#xff09;IP 资源池示例演示5&#xff09;固定 IP 示例演示6&#xff09;网络策略&#xff08;NetworkPolicy&#xff09;四、Kube…

盘点MySQL的八大日志,你知道哪些?

前言 日志对于任何系统应用来说都承载着至关重要的作用&#xff0c;借助日志&#xff0c;我们可以发现系统运行错误的原因&#xff0c;从而解决问题。MySQL也不例外&#xff0c;也会记录各种各样的日志信息。那么你知道MySQL都有哪些日志吗&#xff1f;每种日志的作用是干吗吗…

【Ajax】全面详细了解git的基础操作【万字教学+面试常客】

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 ajax学习 文章目录学习目标起步——关于版本的控制  文件的版本  版本控制软件  使用版本控制软件的好…

UDP和TCP两大协议的区别,让你快速高效掌握

UDP和TCP两大协议的区别 谈起UDP与TCP两大协议的异同&#xff0c;有人说我喜欢用TCP不喜欢用UDP&#xff0c;也有人说我喜欢用UDP而不喜欢用TCP&#xff0c;使用TCP的人说&#xff0c;我使用使用的协议比较可靠、不容易粘包、不容易丢包;使用UDP的人说&#xff0c;我使用的协议…

电脑没有声音了怎么恢复?恢复声音的6个方法【图解】

如今&#xff0c;很多电脑用户都会购买上各种不同品牌的音效产品&#xff0c;以便在必要时可以用来作为背景音乐。但在使用电脑过程中&#xff0c;总会遇到一些声音问题。有些朋友可能会因为声音问题而导致电脑无法正常使用。那么&#xff0c;电脑没有声音了怎么恢复&#xff1…

SpringSecurity框架【详细教学】

SpringSecurity 文章目录 文章目录SpringSecurity文章目录1、概述2、Spring Security、[Apache](https://so.csdn.net/so/search?qApache&spm1001.2101.3001.7020) Shiro 选择问题2.1、Shiro2.1.1、shiro的优点2.1.2、shiro的缺点2.2、Spring Security2.2.1、spring-secu…