动手学习深度学习-跟李沐学AI-自学笔记(3)

一、深度学习硬件-CPU和GPU

芯片:Intel or AMD

内存:DDR4

显卡:nVidia

芯片可以和GPU与内存通信

GPU不能和内存通信

1. CPU

能算出每一秒能运算的浮点运算数(大概0.15左右)

1.1 提升CPU利用率

1.1.1 提升缓存
  • 再计算a+b之前,需要准备数据(CPU可能计算的快,但是内存很慢)
    • 主内存->L3->L2->L1->寄存器(进入寄存器才能开始运算,和主频一样,速度最快)
    • L1访问延时:0.5ns
    • L2访问延时:7ns
    • 主内存访问延时:100ns
  • 提升空间和时间的内存本地性(缓存效率更高)
    • 时间:重用数据使得保持它们在缓存里
    • 空间:按序读写数据使得可以预读取
1.1.2 提升并行

超线程:将一个CPU物理核分给两个超线程,但是对计算密集型的没用

  • 高端CPU有几十个核
  • 并行来利用所有核:超线程不一定提升性能,因为它们共享寄存器
例子:

在这里插入图片描述

2. GPU

能看到一个:xx TFLOPS(比CPU高很多)

显存会低一点点

2.1 提升GPU利用率

对于GPU来讲,一个大核包含很多小核,一个小核包含很多计算单元,一个计算单元可以开一个线程。虽然每个计算单元的计算速度可能比CPU慢,但是并行很强,总体看快。

  • 并行
    • 使用数千个线程(向量至少1000维)
  • 内存本地性
    • 缓存更小,架构更简单
  • 少用控制语句
    • 支持有限
    • 同步开销很大

3. CPU vs GPU

本质区别:核的个数&带宽(限制峰值,每一次需要从主存里读东西),GPU的代价就是内存不能很大(太贵),控制流很弱(跳转)
在这里插入图片描述

3.1 CPU/GPU带宽

在这里插入图片描述

任务本质上还是在CPU上做的,CPU到GPU带宽不高,而且经常需要同步

因此开销很大,不要频繁在CPU核GPU之间传数据(一次传完):带宽限制,同步开销

3.2 更多的CPUs和GPUs

  • CPU:AMD,ARM
  • GPU:AMD,Intel,ARM,Qualcomm

3.3 CPU/GPU高性能计算编程

  • CPU:C++或者任何高性能语言
    • 编译器成熟
  • GPU:
    • Nvidia上用CUDA:编译器和驱动很成熟
    • 其他用OpenCL:质量取决于硬件厂商
总结:
  • CPU:可以处理通用计算,性能优化考虑数据读写效率和多线程
  • GPU:使用更多的小核和更好的内存带宽,适合能大规模并行的计算任务
补充:

第31节QA

二、TPU和其他

第32节

三、单机多卡并行

第33节

四、多GPU训练实现

第34节

五、分布式训练

第35节

六、数据增广

1. 一般专注于图片

  • 在已有的数据集上,增加数据多样性。
  • 一般是在线生成。
  • 常见:翻转(建筑物就不用反转了)、切割(在图像中切割一块(可以是随机高宽比、随机大小、随机位置),然后变形到固定形状(卷积神经网络的输入形状一般都是一样的))、颜色(改变色调、饱和度、明亮度(一般取0.5~1.5,即增加或减少50%))。
  • 提供了多种数据增强方法:https://github.com/aleju/imgaug
  • 从部署数据集可能有什么数据反推使用什么方法。
总结:
  • 增加模型泛化性。

2. 代码实现

在这里插入图片描述

  • aug:图像增广的方法,有很多随机色温、色调、等等!在这里插入图片描述

  • 可以很多一起用:在这里插入图片描述

  • scale:将图片扩大或缩小

  • 就是将图像增广的方法执行多次(num_rows行num_cols列)

  • 图片增广最后一般都会接一个totensor。

  • 应用:在这里插入图片描述

图片进行增广是一件不便宜的事,最好多开几个num_workers。

  • 一般都可以防止过拟合!测试集的精度会更高~
  • 训练时只有load时加上拟合函数:在这里插入图片描述
补充:
  • 数据足够多可以不再增广,但是泛化性不强还是得增广。一般正确增广都是有效的。
  • CPU几个核决定了num_worker大小。CPU不能太弱,要不数据处理可能跟不上,起码得是8核以上。可以测试来确定。
  • 异常检测,都可以进行重采样、数据增广。
  • 测试一般不做数据增广。(也可以,例如图像大小,按比例保留短边切掉长边,变为想要的大小。一般只留中间的,也可以再取点别的地方的)实际应用不用,竞赛可以使用,因为预测成本增加了。
  • 实验可以固定随即种子,gap一般都不会减少,总是会过拟合的
  • 因为是随机的,因此数据分布是不变的,只是多样性增加了(均值不变,方差变大了)。
  • 图神经网络,训练难,但是强大。
  • 增广是可以拼接图片的,但是label也需要拼接。
  • 特定场景,需要针对特定场景单独采集数据,重新打标训练;也可以将不行的(分类错误)数据,重新label加入训练集再来训练。(可能叫主动学习~持续学习)
  • 增广就是为了让训练集长得更像测试集。
  • mix-up确实有用~具体为什么不知道(label叠加)
  • torchvision和albumentation都可以

七、微调(迁移学习的一种)

  • 可以说是对计算机视觉,深度学习最重要的技术。
  • 首先标注一个数据集很贵!我们没有那么多的数据,想要训练好模型,可以先在大数据集上训练好,对于小数据集,简单学学就会了。

1. 网络架构

  • 一个神经网络一般可以分成两块:
    • 特征抽取:将原始像素变成容易线性分割的特征。
    • 线性分类器:(softmax回归)来做分类。
  • 微调:就是在源数据集(一般比较大)上已经训练好了一个模型,那么可以认为特征抽取那一块对于我们的目标数据集也可以使用(但是必须要和预训练好模型的是一样的架构,直接copy来权重即可),起码比随机好一点,但是线性分类器就不能直接使用了(随机初始化,反正这一层在最上面,loss直接就过来了,这样训练是比较快的)因为标号可能变了。然后根据自己的数据集稍微训练一下即可。使用在大数据集上预训练好的模型来初始化模型权重,完成精度的提升。预训练模型的质量很重要,需要在很大的模型上训练过。通常数度更快,精度更高。

2. 训练

  • 是一个目标数据集上的正常训练任务,但是使用更强的正则化:

    • 因为我们通常会使用更小的学习率(已经和最优解比较接近了,不需要特别长的学习率。微调对学习率不敏感,直接使用一个比较小的学习率就行了)。
    • 使用更少的数据迭代(需要训练的epoch没有那么多了,训练太过很可能over fit)。
  • 源数据集远复杂于目标数据(类别、数量、样本个数要百倍大于目标数据集),通常微调效果更好。没有特别优于目标数据集的不如自己从头开始训练。

3. 重用分类器权重

  • 源数据集可能也有目标数据集中的部分标号。
  • 这样线性分类器就可以使用预训练好的模型分类器中对应标号对应的向量(也可以重用其中的好几个类,还能再加上自己新建的类,但是只有重复的类能重用,而且只能手动提取权重。其余的无关标号的权重直接删除!)来做初始化。(实际用的不多)
  • 没有的标号只能随机。

4. 固定一些层

  • 神经网络通常学习有层次的特征表示:
    • 低层次的特征更加通用(与底层细节相关,理解数据,我们认为这是通用的
    • 高层次的特征则更跟数据及相关(更加语义化一些,与标号更相关)
  • 可以固定底部一些层的参数,不参与更新(这样模型复杂度降低),可以认为是一种更强的正则。对于数据集很小时很有用。但是怎么样最好是需要调的,最极端的是其余固定住,只训练最后一个全连接层,另一个极端就是全部的层一起动。

5. 代码实现

(训练集测试集)进行了数据增广,注意如果预训练模型做了norm,微调前也需要做同样的norm。模型输入大小要一样。要是有数据增强也是需要一样的。

  • 下模型:(下载时,下列参数为true,说明不仅下模型定义下下来,还有训练好的parameter也一起拿下来)下一行代码是拿出最后一层。在这里插入图片描述

  • 更改输出层:并对最后一层的weight随机初始化
    在这里插入图片描述

  • 如果param_group为true:将非最后一层的参数取出,其他层lr小,fc层lr大。
    在这里插入图片描述

  • 不适用预训练:从零开始训练。
    在这里插入图片描述

补充:
  • 数据不平衡(也可以理解成标号不平衡)问题对特征提取的影响相对较小,对越往上层的影响越大,尤其是分类器。
  • 要找预训练模型在和所使用的数据集相似的源数据集(可以更大,种类更多,但是要相似,当然不是源数据集必须包含目标数据集哦)上训练的,要不相差太大可能还不如从头开始训练。
  • 标号要找对应的字符串(label的名称字符串,还要注意语义匹配不同,数据集上叫的名字可能不同),因为标号肯定是按照顺序来的,没什么意义。
  • 微调中的归一化很重要,可以认为是网络中的一块,是可以换成batchnoralize就不需要这个了,但是我们copy时是没有copy这一块的,因此需要我们手动弄过去,但是如果预训练模型中有,那就不需要我们代码中自己搞的normalize了(源数据集的训练结构也做了归一化)。
  • normalize参数是从源数据集上算出来的,finetune需要更改normalization的参数为自己数据集的均值和方差。
  • auto-gluon会加入微调的(使用微调一般不会让模型变差,可能不会变好,但是一般不会变差)。
  • 常用的CV预训练模型有imagenet上预训练的resnet系列。
  • 微调是需要重新搞一下label和对应标号关系的,可以看课后习题有讲解
  • 自己预训练一个分类模型是有用的,因为可以用到其他图像技术上,反正都需要抽取特征的。

八、竞赛-树叶分类结果

第38节,略

九、实战-图像分类kaggle比赛

o-gluon会加入微调的(使用微调一般不会让模型变差,可能不会变好,但是一般不会变差)。

  • 常用的CV预训练模型有imagenet上预训练的resnet系列。
  • 微调是需要重新搞一下label和对应标号关系的,可以看课后习题有讲解
  • 自己预训练一个分类模型是有用的,因为可以用到其他图像技术上,反正都需要抽取特征的。

八、竞赛-树叶分类结果

第38节,略

九、实战-图像分类kaggle比赛

第39节40节,略

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vite4、Vue3、Axios 针对请求模块化封装搭配自动化导入(简单易用)

针对请求模块化封装搭配自动化导入(简单易用) 目标目录目标代码前提步入正题src / utils / index.jssrc /api / index.jssrc /api / request.jssrc /api / service.jssrc /api / utils.jssrc /api / modules / demo.js 自动化配置vite.config.jseslint 校…

2023中医药国际传承传播大会暨中医药图片和非遗艺术展隆重揭幕

由世界针灸学会联合会、中新社国际传播集团、中国新闻图片网、中国民族医药学会、中国针灸学会联合主办的“2023中医药国际传承传播大会”3日在广东省深圳市举办,“中医药国际传承传播图片展”与“非遗艺术展”在大会举办期间开展迎客。会议聚焦非遗健康、非遗传承等…

案例049:基于微信小程序的校园外卖平台设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

【vue】点击导航菜单切换局部页面,打开展示默认栏目,页面刷新等问题

非专业前端,局限性较高,有些问题看起来很小,但是初次接触很棘手,需要查找很多博客,内容也很杂。以下只是过程中总结下来的,要解决的就是标题中的三个问题。 这是我需要达成的效果。 1.第一个是进入导航菜单…

LeetCode:2646. 最小化旅行的价格总和(dfs + 树形dp C++、Java)

目录 2646. 最小化旅行的价格总和 题目描述: 实现代码与解析: DFS DP 原理思路: 2646. 最小化旅行的价格总和 题目描述: 现有一棵无向、无根的树,树中有 n 个节点,按从 0 到 n - 1 编号。给你一个整数…

团队git操作流程

项目的开发要求:(1)项目组厉员代码提交不少于20次 (2)项目组厉员每天提交不少于20次 (3)企业项目开发代码的每天的提交一般提交3-5次 (4)代码仓库的管理 git的基础操作流…

案例042:基于微信小程序的居住证申报系统

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

OpenCV-python numpy和基本作图

文章目录 一、实验目的二、实验内容三、实验过程Numpy1.NumPy 操作2.NumPy Ndarray 对象3.NumPy 基本类型4.NumPy 数组属性ndarray.ndimndarray.shapendarray.itemsizendarray.flags 5.NumPy 创建数组numpy.emptynumpy.zerosnumpy.ones 6.NumPy 从已有的数组创建数组numpy.asar…

【Python】Python读Excel文件生成xml文件

目录 ​前言 正文 1.Python基础学习 2.Python读取Excel表格 2.1安装xlrd模块 2.2使用介绍 2.2.1常用单元格中的数据类型 2.2.2 导入模块 2.2.3打开Excel文件读取数据 2.2.4常用函数 2.2.5代码测试 2.2.6 Python操作Excel官方网址 3.Python创建xml文件 3.1 xml语法…

HCL Domino 12系统管理员考试

大家好,才是真的好。 12月份的某一天,趁着风和日丽,天朗气清, 下了舍弃100多美金的狠心,在Pearson Vue官网上报了HCL Domino 12系统管理员考试的名 。时隔十五年后,骑着电动车风风火火地前往某一当地考试中…

AI Pika 生成进击的巨人动漫分镜案例

背景介绍 Pika 是一个使用 AI 生成和编辑视频的平台。它致力于通过 AI 技术使视频制作变得简单和无障碍。 Pika 1.0 是 Pika 的一个重大产品升级,包含了一个新的 AI 模型,可以在各种风格下生成和编辑视频,如 3D 动画,动漫,卡通和电影风格。…

pytorch中的transpose用法

注意:维数从0开始,0维 1维2维…,负数代表从右往左数,-1代表第一维,以此类推 import torch import numpy as np# 创建一个二维数组 arr torch.tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]]) print("原始数组:"…

深入理解 Java 虚拟机(JVM)从入门到精通

目录 一、JVM内存结构1、堆(Heap)(1)特点(2)堆内存分配(3)晋升到老年代的方式(4)堆内存检验方式2、虚拟机栈(VM Stack)(1&…

Vis.js教程(二):基础关系图实现

首先引用所需要的css和js文件 <link href"https://cdn.bootcdn.net/ajax/libs/vis-network/9.1.6/dist/dist/vis-network.min.css" rel"stylesheet"> <script src"https://cdn.bootcdn.net/ajax/libs/vis-network/9.1.6/standalone/umd/vis-…

python+requests+excel 接口测试

1、EXCEL文件接口保存方式&#xff0c;如图。 2、然后就是读取EXCEL文件中的数据方法&#xff0c;如下&#xff1a; 1 import xlrd2 3 4 class readExcel(object):5 def __init__(self, path):6 self.path path7 8 property9 def getSheet(self): 10 …

前端编码中快速填充内容--乱数假文

写前端页面的时候&#xff0c;如果要快速插入图片&#xff0c;可以使用 https://picsum.photos/ 详见笔者这篇博文&#xff1a; 工具网站&#xff1a;随机生成图片的网站-CSDN博客 可是&#xff0c;如果要快速填充文字内容该怎么做呢&#xff1f; 以前&#xff0c;我们都是…

【GAMES101】二维变换和齐次坐标

这几天都在抽空学OpenGL、敲leetcode和看games&#xff0c;这里留点笔记给以后复习 games101第一节课在吹水&#xff0c;第二节课讲了线性代数的入门知识&#xff0c;比较简单&#xff0c;这里稍微回顾一下重点&#xff0c;然后开始讲第三节课的二维变换和齐次坐标 目录 向量…

ACM32F42X系列芯片有何性能?为什么可以应用在工业控制 中等产品上

ACM32F42X 芯片的内核基于 ARMv8-M 架构&#xff0c;支持 Cortex-M33 和 Cortex-M4F 指令集。内核支持一 整套 DSP 指令用于数字信号处理&#xff0c;支持单精度 FPU 处理浮点数据&#xff0c;同时还支持 Memory Protection Unit &#xff08;MPU&#xff09;用于提升应用的安全…

C++[面向对象的程序设计]_基础入门(上)(万字总结)(建议收藏!!!)

目录 1. C基础入门 1.1 变量 1.2 常量 1.3 关键字 1.4 标识符命名规则 1.5 数据类型 1.5.1 整型 1.5.2 sizeof 关键字 1.5.3 实型&#xff08;浮点型&#xff09; 1.5.4 字符型 1.5.5 转义字符 1.5.6 字符串类型 1.5.7 布尔类型 1.5.8 数据的输入 1.6 运算符 …

ps快捷键和常见项目总结

处理以像素构成的位图的软件 Mac笔记本快捷键&#xff1a; 打开文件&#xff1a;commandO 图像缩放&#xff1a;command 多个文件切换&#xff1a;同一桌面中&#xff1a;command (英文状态下输入) 切换屏幕模式&#xff1a;F,全屏模式下Tab键可进行切换 首选项—性能&a…