百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

2023-10-26

百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

一开始报名参与这个课程还是信心满满,然而最终没有顺利结课,也是备受打击,课程学习博客更新到第二节,也不会有后续的几节直播课的笔记,这篇就是对前一段深度学习的总结;

今天这篇文章,完全手码的,无他,仅为对前一阶段的AI学习划个句号,分享自己的收获和心得;

课程回顾

如果算上后来的大作业讲解,应该有连续8天的直播课,内容的质量对不同人群的表现也不尽相同;对于我个人而言,受益良多;虽然前文只书了两节,但是所书内容还是很值得一看的(类似内容我之前学的时候,基于TensorFlow的我读了3遍,要结合来看吧,只读这两节可能很多概念的理解会有问题);

接下来回顾下过往的学习;

预习内容:

重点:

  • 深度学习基础概念;
  • 深度学习的数学基础;

这是在正式直播课开始之前,在课程页面提供的基础性内容,对于没有任何基础的同学,很值得细细阅读,主要内容包括了深度学习的简介、深度学习的数学基础、Python基础、Notebook的基础操作、PaddlePaddle的快速入门;一般的,我们在学习一门编程语言的时候,接触的第一行代码就是打印一个hello world,在深度学习中,也存在一个类似的,就是基于MNIST数据集手写数字识别;预习内容中也给出了相应的代码实现;这一过程中也能感受到,飞桨团队对授课前内容的不断调整,一开始应该是基于1.0版本的实现,最后调整为基于2.0高层API的版本,代码实现简洁直观;

我在之前曾对TensorFlow2.0进行过简单入门,公司有一小部分业务需要使用深度学习处理一个简单的二分类问题,基于音频的音乐段/非音乐段识别,一开始入门也是通过训练MINIST数据集来完成手写数字识别的任务开始的,结合自己的实践经验来看,PaddlePaddle在预习阶段给了我很好的感官体验,至少在代码层面表现良好,同时由AI Studio提供的免费算力,也为没有GPU资源的同学提供了一个高效的计算环境;

第一天直播课:

重点:

  • pillow图片处理包;
  • 深度学习的实践场景;
  • 深度学习的一般过程;
  • 手写数字识别案例中PaddlePaddle2.0高层API的使用;
  • 静态图和静态图的区别:
    • 动态图是为了微调的
    • 静态图是为了部署的
    • 动态图模型:边构图 边计算 很灵活的调试运行(training=True)
    • 静态图模型:部署的使用使用的(training=False)
    • 一般用于部署的模型,保存时可指定trainning参数为False,即保存为静态图模型,运算更快;

第一天的直播课内容就确定了基于框架的分析处理实际问题的“万能公式”,这是一种以“雨哥”为首的老师一再强调的可作为标准的开发流程:问题定义、数据准备、模型选择和开发、模型训练和调优、模型评估测试、模型部署上线;

同时这一节也介绍了常用的业务场景、讲了大量的基础概念,由于之前实践过分类问题,因而这一部分内容让我对之前的许多概念细节有了更加深刻的理解,毕竟是直播课,还可以互动,有的从一开始就不理解的地方,直接就向老师请教了,收获颇丰;

最后介绍了主角PaddlePaddle,相关教程我们在第一节的学习博客已经附上了相关链接;并基于PaddlePaddle2.0,按照万能公式,演示了手写数字识别的模型训练;

第二天直播课:

重点:

  • 图像的预处理,可以对数据进行增强,有利于模型的训练;
  • 数据的归一化处理,可以使梯度图更加规整,梯度下降更快;
  • 卷积层计算之后的shape宽高计算:
    • 参数:Xw是输入的数据矩阵宽,Pw是宽向填充大小,Fw是卷积核宽,Sw是宽向步长;
    • W = (Xw + 2Pw - Fw)/Sw + 1/W = (Xw + Pw1 + Pw2 - Fw)/Sw + 1
    • H = (Xh + 2Ph - Fh)/Sh + 1/H = (Xh + Ph1 + Ph2 - Fh)/Sh + 1
    • 在矩阵外围做0填充,并不会影响特征的提取
  • 平均池化 和 最大池化:
    • 现在一般都用最大池化,因为它能更好的反应特征;
    • 池化并不会改变已提取特征的通道数
    • 池化步长 和 卷积核大小有关 一般用2
    • 池化的作用:下采样,减少计算量
  • 激活函数的作用:
    • 非线性变换,可以进行更好的梯度变换;
    • sigmoid 右侧曲线的梯度越来越平缓 最终消失
    • relu 小于0时 梯度会消失

有了前两节课对深度学习的背景、概念、HelloWorld,这一节直播课的案例是十二生肖分类;

本质上这个案例和手写数字识别是同类型的,都是分类问题,手写数字识别是10分类问题,这个是12分类问题;区别在于,这里输入的图片是多通道的,而MNIST数据集中的图片都是灰度图,是单通道;

作为第二节要演示的分类问题,“雨哥”选用的案例,还是相对简单的,比多分类更复杂如多标签识别;对比手写数字识别,很大一点不同是在数据准备时,对输入图片的处理要更加多元,如随机剪裁、随机调整角度,主要目的还是增加训练数据的多样性;(训练集越丰富,训练得到的模型往往泛化能力更好)

卷积神经网络(CNN)是这节重点知识,他在图片分类问题、边缘检测、图形分割等研究方向应用广泛;

基于卷积层构建的卷积神经网络有很多,构建上有关注网络加深的、也有关注增强卷积模块功能,结合两者的如ResNet,它可以有效解决梯度传播过程中的退化问题,ResNet50+的模型,残差模块会有变化,主要是为了减少参数,又不减弱效果;

我在公司的分类问题上用的就是ResNet18;值得一提的是,网络的构建方式对模型的训练结果影响很大,目前一般都是基于较为成功的网络进行模型的训练,完全自行构建的效果往往不太好;这里说下对PaddlePaddle使用的一点体会,首先是AI Studio平台提供的算力、PaddlePaddle提供的可视化的功能、更便捷的API,都很优秀,但是对于之前音乐段/非音乐段分类问题我成功构建的模型,想在PaddlePaddle2.0框架进行实现,却遇到了层层阻力,最终大作业也被坑到了,具体的我们在大作业一节再说;

案例的最终结果是可以完成一组十二生肖图片的准确预测;

总的来说,第二节直播课,老师带我们演示了一个实际分类问题的使用卷积神经网络是如何解决的;

第三天直播课:

重点:

  • 归一化层:单独的对层次中的参数,进行归一化处理;
  • 分类VS回归:
    • 分类是定性问题(属于那一分类,离散),回归是定量问题(计算特征,连续);
    • 图像分类问题的损失函数:CrossEntropyLoss 信息熵的计算
    • 人脸关键点检测的损失函数:SmoothL1Loss 距离的计算
  • NME评估指标的计算:IPN表示两眼瞳孔间举例、ION表示两眼外眼角间的距离,二者选一作为NME评估指标的计算参数;

本节演示的案例是 人脸关键点检测,列举了一些现在直播、短视频领域的常见的面部贴纸、美颜的应用场景,任务的本质是找到一个最优算法,让机器能够找出每个人脸照片的关键点,是一个基于图像的回归任务;

无论是人脸关键点检测还是回归任务,其实只要理解了卷积神经网络就很容易理解;模型就好像是一个参数特别多的大函数,我们目前接触的深度学习都是有监督的,所谓有监督就是,数据集中,一个输入对应的标准输出,都要送入模型进行训练;一个输入信号在进行数据转换之后,对应的就是这个大函数的很多个自变量,这个大函数的输出,就是因变量;模型训练的过程,实际就是在为所有的自变量和函数本身寻找一组参数,这组参数可以使训练集中的一个输入经计算得到的输出,与训练集的监督标签之间误差最小;训练结束之后,我们得到的模型就可以为我们提取任意类似场景输入的有效特征,在手写数字识别中,这个有效特征表征了分类,在本节的人脸关键点检测,这个特征表征的就是一张图中一些有效的特征点坐标(如鼻子、眼睛、嘴巴);

训练集举例:一张人像图,对应的标签就是这张图上人五官的一些坐标点,目前常用的人脸关键点标注点数有5、21、68、98等;图像的预处理包括:图像大小统一、格式统一、数据量较小时进行有效的数据增强,具体的包括灰度化、归一化(加快收敛)、重新设置尺寸、随机剪裁、修改通道格式(对应模型的输入结构);如果标注不到位,预处理阶段除了处理image,有时也需要处理label;

案例的最终结果完成一张人像面部的特征关键点坐标提取;

第四天直播课:

重点:

  • 词汇表的使用
  • 可训练的Embedding
  • LSTM 序列建模法
    • 谷歌-预训练模型

按照课程安排,接下来就要介绍RNN了,即循环神经网络,其实听课的时候我也挺惊讶的,我之前用了1个月入门的东西,3天就讲完了…完了…了;

本节接触的第一个概念就是NLP,即情感识别,属于自然语言处理的一种;

关于NLP,我又要自行理解,开启白话:所谓情感识别,说白了就是提取语义特征,一个句子是一组有序文字/单词的连续的组合,这个组合表征了一个语义,比如说表现了喜悦、悲伤等情感;或者一段文本中我们要提取数字,其实就是在提取语义相关的特定内容;一般在文章、视频推荐应用广泛;

那具体要怎么做呢,我们先不管神经网络的部分,依旧是把它看成是一个大函数,输入呢,可以是一个字、词、句子、篇章等,这里以句子分类任务为例,标签为这个句子提现的语义:积极、消极;

一个句子,再输入到循环神经网络前,还需要进行分词、并转换为词向量;这两步很重要,首先分词是提现句子语义的基本单位,一般会有一些公共的词汇表可以用,这些词汇表可以把词和一个数字进行对应,通过词汇表可以完成句子向一组数字的转换;转词向量就是把前面的一组数字,编码为一组词向量,这些词向量为了能够完整覆盖词向量空间,往往都有几百维;

转词向量可以直接使用Embedding层进行,得到的结果shape为 batch_size * token_num * dim_num,对应的就是 有几个句子,每个句子有多少个分词(句子长度不足的会被填充,长度多余的会被截取),每个分词被表示成多少维的向量;

值得注意的是,一个好的词向量空间,往往可以更好的提现语义信息(如 积极的词汇分布更集中),为了使输入句子中的分词,表现出来的词向量空间更好,Embedding层是可被训练的;

到这里,我们已经把一系列输入句子(一个训练集),经Embedding层,转化为了待训练的词向量数据;那么如何训练才能得到更能提取语义特征的模型呢?
一般有:

  • 词向量加和:速度快,但只能描述短句,不能刻画细致语义;
  • 词序建模:计算速度慢,并行计算能力差,但能提取更长句子的语义特征;
  • 谷歌预训练模型:如BERT:BERT 是第一个无监督、深度双向的自然语言处理模型预训练系统。它只使用纯文本语料库进行训练;

毫无疑问,谷歌的预训练模型模型更深、计算量更大,性能最佳;

但是对于不那么复杂、要求不太高的场景(预训练模型在某些场景已经超越人类),词序建模的方式依然是首选;

LSTM:一种序列建模法,即长短时记忆网络,是循环神经网络的一种

更新中…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结 的相关文章

  • 知乎:哪些心态是你刻意练习的?

    我的恋爱熊 1 不要脸 不在乎别人说什么 必须不敏感 不玻璃心 钝感力强 笔者认为 敏感是天性 是对事件发展的体察 我们没有办法让自己不敏感 但是在体察事件有困难 别人不愿帮助甚至是找你麻烦的时候 你都不要放弃 渴望痛苦 你依然要坚持自己的
  • linux内核中断(一)

    一 中断简介 中断是指 CPU 在执行程序的过程中 出现了某些突发事件急待处理 CPU 必须暂停当前程序的执行 转去处理突发事件 处理完毕后又返回原程序被中断的位置继续执行 由于中断的存在极大的提高了 CPU 的运行效率 但是设备的中断会打
  • 【C/C++内功心法】剖析编译链接的过程,探究源文件是如何一步步变成可执行程序,提升C/C++内功

    文章目录 前言 一 程序的翻译环境和执行环境 二 详解编译 链接 1 翻译环境 2 编译本身也分为几个阶段 2 1 预编译 预处理 2 2 编译 2 3 汇编 3 链接 3 1 合并段表 3 2 符号表的合并与重定向 总结 前言 大家好啊
  • Go中 channel的使用

    文章目录 背景 channel 简介 使用说明 声明 发送和接受数据 关闭channel 使用示例 背景 使用 sync 包和 context 包的工具可以实现多个协程之间互相协作 但是没有一种很好的方式解决多个协程之间通信的问题 gola
  • openssl实现双向认证教程(服务端代码+客户端代码+证书生成)

    一 背景说明 1 1 面临问题 最近一份产品检测报告建议使用基于pki的认证方式 由于产品已实现https 商量之下认为其意思是使用双向认证以处理中间人形式攻击 信息安全工程 中接触过双向认证 但有两个问题 第一个是当时最终的课程设计客户端

随机推荐

  • jquery ui draggable,droppable 学习总结

    刚接触的时候 分不清draggable和droppable的区别 瞎弄了一会 其实很简单 draggable就是 拖 的功能 droppable就是 放 的功能 一 先上一个简单例子 1 代码 2 截图 拖动 draggable之前的截图
  • 我们为什么要使用补码?

    想必对于原码 反码 补码大家并不陌生 计算机专业的同学都会学到这方面的一些知识 当初在学这部分的时候 只知道用补码可以解决0和 0的问题 但是还是没明白为什么会想到用补码 前阵子看了斯坦福大学关于范式编程的公开课 里面老师讲了这方面的内容
  • 【golang设计模式】Golang设计模式详解三

    十一 组合模式 组合模式统一对象和对象集 使得使用相同接口使用对象和对象集 组合模式常用于树状结构 用于统一叶子节点和树节点的访问 并且可以用于应用某一操作到所有子节点 composite go package composite impo
  • 生成Git ssh公钥和私钥(ppk)文件

    一 生成ssh公钥 step1 安装GIT和TortoiseGit step2 文件夹空白地方右键点击 Git Bash Here 进入终端 如果右键没有Git Bash Here 操作方法见 https mp csdn net mp bl
  • Scikit-learn之模型评估预测

    sklearn decomposition PCA scikit learn 1 2 2 documentation sklearn官网 代码以后补上 先介绍一些简单的 sklearn能做到很多传统意义上 比较简单 的机器学习 例如 分类
  • Vue+ElementUI实现表单动态渲染、校验(一)

    Vue ElementUI实现表单动态渲染 校验 一 项目需求 1 vue表单实现递归渲染 项目需求 接到新的项目需求 需要把一个json文件动态渲染成表单 并添加各种校验规则等 经过各种查资料 最终完成了此功能开发 对这块的知识点进行梳理
  • 23种设计模式

    设计模式主要分为三大类 1 创建型模式 2 结构型模式 3 行为型模式 1 创建型模式 创建型模式关注对象的创建过程 1 工厂方法模式 Factory Method Pattern 用于创建对象的接口 让子类决定实例化哪一个类 工厂方法模式
  • PRML-系列一之1.2.2~1.2.3

    期望和方差 涉及概率最重要的操作是找到函数的加权平均值 在概率分布p x 情况下函数f x 的平均值称为f x 的期望 并用E f 表示 对于一个离散分布 它由下式给出 使得平均值加权到不同x值的相应概率上 连续变量的情况下 期望用相应概率
  • Unity3D学习笔记(4)—— 牧师和魔鬼游戏

    牧师和魔鬼游戏是一款益智类游戏 游戏的目标是将3个牧师和3个魔鬼从河的一端安全地送到河的另一端 在运送过程中 船可以搭载两个人 而且必须有一人掌船 无论何时 只要河一边的魔鬼数量多于牧师的数量 游戏就会以失败结束 想玩玩的话请走传送门 Pr
  • 基于FBX SDK的FBX模型解析与加载 -(一)

    1 简介 FBX是Autodesk的一个用于跨平台的免费三维数据交换的格式 最早不是由Autodesk开发 但后来被其收购 目前被 众多的标准建模软件所支持 在游戏开发领域也常用来作为各种建模工具的标准导出格式 Autodesk提供了基于C
  • FFmpeg视频解码中的YUV420P格式

    参考文章 在做基于FFmpeg解码的视频播放时 需要涉及到帧数据存储的YUV与RGB格式 所以了解了一下 参考下述博文 https blog csdn net lanxiaziyi article details 74139729 avfr
  • 在arm平台上安装qt

    qt官网上如果没有找到对应的安装包 就需要下载源代码自行编译安装qt 时间会久一点 qt下载 进入官网下载 如下图步骤选择源代码包 以5 12 12为例 可以复制链接地址在迅雷上创建下载任务 下载速度会快些 qt的编译与安装 需要先安装gc
  • 服务器 常用命令

    screen screen S xx 创建 screen ls 列表 screen r xx 回来 在detach分离的前提下 screen d 分离
  • mysqlworkbench 程序或文件打开失败( Failed to open the program or a mwb file)

    异常状况 昨天将mysqlworkbench 6 0 以下简称mwb 卸载掉 今天需要又要装上 安装的过程没有任何错误 但是打不开mwb 或者mwb后缀的文件 弹出3个提示框 提示有3个xml的配置文件找不到 具体文件名忘记了 解决方式 1
  • 论文/机器学习笔记:SENet (Squeeze-and-Excitation Networks)

    Image 2017 挑战赛夺冠paper 1 motivation 希望显式地建模特征通道 channel 之间的相互依赖关系 通过学习的方式来自动获取到每个特征通道的重要程度 依照这个重要程度去提升有用的特征并抑制对当前任务用处不大的特
  • linux/centos 搭建 bgp 网络

    在之前的教程中 我对如何简单地使用Quagga把CentOS系统变成一个不折不扣地OSPF路由器做了一些介绍 Quagga是一个开源路由软件套件 在这个教程中 我将会重点讲讲如何把一个Linux系统变成一个BGP路由器 还是使用Quagga
  • 算法_插入排序

    插入排序 插入排序的思想 每一步就是将待排序的数据插入到已经排好序的数据中 直到全部数据依次按照从小 或大 的顺序排列 例如 1 4 2 5 8 3 7 1 第一次排序 1 4 2 5 8 3 7 1 第二次排序 1 2 4 5 8 3 7
  • Redis系列一

    1 1 Nosql 1 1 1 概述 单机mysql时代 90年代 一个基本的网站访问量不会太大 单个数据库足够 更多的使用静态网页html 网站瓶颈 数据量太大 一个机器放不下 数据的索引 一个机器的内存也放不下 访问量太大 读写混合 性
  • python3 对字典去重

    对于一个列表中的多个字典进行去重 1 对key去重 将相同的key合并到一个字典中 2 对元素去重 将一个字典的重复元素去重 代码如下 initializing list
  • 百度 AI Studio——《高层API助你快速上手深度学习》课程学习总结

    百度 AI Studio 高层API助你快速上手深度学习 课程学习总结 一开始报名参与这个课程还是信心满满 然而最终没有顺利结课 也是备受打击 课程学习博客更新到第二节 也不会有后续的几节直播课的笔记 这篇就是对前一段深度学习的总结 今天这