一起手撸dl框架1绪论

清风莫追 清风莫追     2023-04-14     335

关键词:

文章目录

第一章 绪论 🍉

1.1 在人工智能的大潮里

人工智能——一个如今十分火热的话题,人们在生活中越来越多地使用它、谈论它。在2022年之前,人工智能在我们的生活中就已经有了许多落地的应用,如手机扫脸付款、抖音个性化推荐。而ChatGPT的问世又掀起了新一轮的热潮,寒假期间在新闻联播上看到ChatGPT时,我突然有些恍惚——聊天机器人已不再只是实验室里的玩物、人们眼中的“人工智障”,它突然闯进大众的生活里了。

人工智能越来越激起人们的好奇与关注了,因为它越来越强大。但,从“人们手工地定义一条条的规则”到“随便聊”的聊天机器人,从”人工“到”智能“,这其中究竟发生了什么?

也行你已经听过深度学习机器学习这样的概念,它们与人工智能是这样一种关系:人工智能是我们的目标,机器学习则是手段,而深度学习是机器学习的一种,同时也是目前我们实现人工智能最有希望的方式。(ChatGPT很强大,但在许多人看来它并不具有真正的智能)

而深度学习技术必然离不开深度学习框架(这正是我真正要介绍的内容),现流行的框架如Tensorflow,Pytorch,PaddlePaddle,其基本原理是一致的。也许你在已经了解了深度学习的理论之后,使用深度框架实践时仍然会遇到一些障碍——源于框架的障碍。它的封装会让你很方便,但有时它的抽象也会让你很头疼。

1.2 为什么重复造轮子

程序员间流传着一句“名言”:不要重复造轮子。但我们如果是作为一个学生的角色,那么应该学会去“造轮子”。

使用框架的过程难以让我了解它,因为我能看见的唯有现象而已。人们有时会说,不懂就去读源代码,而这也很难得以清晰的了解框架的原理,不过是管中窥豹,只见一斑罢了。而亲手造轮子的方法很有用,它迫使你将脑海中碎片化的知识组织起来,以达到你的目标。

学习造轮子有三种状态:一是跟着敲代码,二是试着改代码,三是独立设计。其中后两种方式更有助于促进你自己去思考,我更倾向于第三种。当然,你肯定无法凭空知道如何去设计一个深度学习框架,学习知识是必要的。但是在学过一部分之后,就可以试着关上书(或者别的什么资料),从第一行代码开始,自己去设计代码逻辑,以实现一些功能。

然后,你可以再与你的资料中的实现进行对比,有哪些异同,哪些好的地方和不好的地方,他为什么和你的想法不一样,他的目的是什么。收获反馈和总结之后,再脱离你的资料,试着去改进你的代码。

此外,在开始你自己的设计和实现之前,你甚至可以先去干点别的,以在脑海中忘掉书中一些具体的实现细节,留下基本的原理——给自己留下更多思考和选择的机会。

1.3 深度学习框架简介

所谓“深度学习框架”,其实是一个代码库,我们可以利用其中预定义的函数和类更快地实现一个深度学习任务,比如猫狗分类问题。本文假设读者已经了解一些深度学习的原理,而重点解释在你实现深度学习任务的过程中,框架究竟帮你做了哪些事情。

深度学习的本质是函数拟合,例如对于目标函数 y = 2 x + 3 y=2x+3 y=2x+3,你需要现设计一个合适的函数架构,比如 y = w x + b y=wx+b y=wx+b,其中w和b两个参数是未知的,通过不断地把很多组自变量x和对应的函数结果y“喂给”你设计的函数,程序就可以找出w和b的值。因此,深度学习可以说是一种“在现象中总结出规律”的技术。

深度学习框架的核心功能是自动微分,而自动微分的原理是复合(嵌套)函数求导的链式法则,例如, y = x 2 , z = 2 ∗ y y=x^2,z=2*y y=x2,z=2y ,则z关于x的导数

d z d x = d z d y d y d x = 2 ∗ 2 x = 4 x \\frac dzdx=\\fracdzdy \\fracdydx=2*2x=4x dxdz=dydzdxdy=22x=4x

深度学习框架的自动微分功能是基于计算图实现的,例如下面的计算图定义了函数 y = w x + b y=wx+b y=wx+b,输入x而得到 w x + b wx+b wx+b,这便是正向传播的过程。

在计算图的结构之上,沿着计算函数值相反的路径,就可以利用链式法则求出最终结果结点(y)对于变量结点(x、w、b)的导数值dx、dw、db,如下图所示,求得 d w = x ∗ d y dw=x*dy dw=xdy d b = d y db=dy db=dy。我们的目标只是找到参数w和b合适的值,因此不需要求关于x的梯度。

那么dy是什么呢?可以取1,那得到的dw就是“+”结点关于w的导数;也可以是从后面其它结点传递过来的导数。

小结一下,这一节主要介绍了深度学习中一些基本的概念,包括函数拟合自动微分链式法则计算图,后面将会在这些概念的基础之上逐步搭建起一个简单的深度学习框架,并使用我们自己搭建的框架完成一些经典的深度学习任务,同时获取对于这些概念更加清晰的认知。


eventbus从入门到装逼,源码分析,手撸框架(代码片段)

...entBus是什么?有什么用EventBus简单使用EventBus原理解析手撸EventBus框架EventBus优化1.EventBus是什么?有什么用EventBus是在android平台上基于订阅/发布模式(观察者模式)的事件处理机制,方便用于android组件内和组件... 查看详情

web框架底层原理;django介绍

...框架介绍内容纯手撸web框架web框架将前端、数据库整合到一起的基于互联网传输的python代码,可以简单的理解为是软件开发架构里面的服务端 查看详情

手撸golanggo与微服务saga模式之1

缘起最近阅读<<Go微服务实战>>(刘金亮,2021.1)本系列笔记拟采用golang练习之Saga模式saga模式将分布式长事务切分为一系列独立短事务每个短事务是可通过补偿动作进行撤销的事务动作和补偿动作都是幂等的,允许重复执行而... 查看详情

手撸orm

本文目录ORM简介Python中常用ORM框架 原生操作数据库模块pymysqlORM框架之SQLAlchemy手把手带你写一个自己的ORM框架回到目录ORM简介ORM即ObjectRelationalMapping,全称对象关系映射。当我们需要对数据库进行操作时,势必需要通过连接... 查看详情

手撸golang仿springioc/aop之12增强3

手撸golang仿springioc/aop之12增强3缘起最近阅读[SpringBoot技术内幕:架构设计与实现原理](朱智胜,2020.6)本系列笔记拟采用golang练习之Talkischeap,showmethecode.SpringSpring的主要特性:1.控制反转(InversionofControl,IoC)2.面向容器3.面向切面(Aspe... 查看详情

手撸golangspringioc/aop之2

手撸golangspringioc/aop之2缘起最近阅读[Offer来了:Java面试核心知识点精讲(框架篇)](王磊,2020.6)本系列笔记拟采用golang练习之Talkischeap,showmethecode.SpringSpring基于J2EE技术实现了一套轻量级的JavaWebService系统应用框架。它有很多优秀的... 查看详情

使用node.js手撸一个建静态web服务器,内部cv指南(代码片段)

...如上图文章结束话说这个键盘真漂亮~~文章目录使用Node.js手撸一个建静态Web服务器一、动静态服务器的概念1.1静态Web服务器概念1.2静态Web服务器的优点1.3快速搭建的途径二、手撸指南2.1框架搭建2.2Ctrl+C/V2.3启动服务器2.4部署服... 查看详情

手撸golang学etcd手写raft协议之12单元测试

手撸golang学etcd手写raft协议之12单元测试缘起最近阅读[云原生分布式存储基石:etcd深入解析](杜军,2019.1)本系列笔记拟采用golang练习之raft分布式一致性算法分布式存储系统通常会通过维护多个副本来进行容错,以提高系统的可用... 查看详情

eventbus从入门到装逼,源码分析,手撸框架(代码片段)

...entBus是什么?有什么用EventBus简单使用EventBus原理解析手撸EventBus框架EventBus优化1.EventBus是什么?有什么用EventBus是在android平台上基于订阅/发布模式(观察者模式)的事件处理机制,方便用于android组件内和组件... 查看详情

数理统计1——绪论

查看详情

微机手册

...码主要鉴于下列两个原因(1)使符号位能够和有效数值部分一起参加数值运算,从而简化运算规则,节省运算时间。(2)使减法运算转化为加法运算,从而进一步简化计算机中运算器的线路设计。数据类型字节(Byte):1字节=8位二进制... 查看详情

django框架(代码片段)

...Django的原理,后面会重点介绍Django的语法以及创建二、纯手撸web框架1.纯手撸web框架软件开发架构c/s架构b/s架构本质bs也是csweb后端需求:1.根据用户输入不同的后缀返回不同的内容从符合http协议格式的数据中获取用户输入的后缀... 查看详情

很多小伙伴不太了解orm框架的底层原理,这不,冰河带你10分钟手撸一个极简版orm框架(赶快收藏吧)(代码片段)

...刻并且清晰的理解ORM框架的实现原理,冰河决定自己手撸一个极简 查看详情

很多小伙伴不太了解orm框架的底层原理,这不,冰河带你10分钟手撸一个极简版orm框架(赶快收藏吧)(代码片段)

...刻并且清晰的理解ORM框架的实现原理,冰河决定自己手撸一个极简 查看详情

绪论

【神经网络与深度学习摘要】第1章绪论文章目录【神经网络与深度学习摘要】第1章绪论1.人工智能1.1图灵测试1.2人工智能的主要领域1.3人工智能的发展历史1.4人工智能的流派2.机器学习2.1机器学习定义2.2使用机器学习模型步骤3.... 查看详情

手撸golanggo与微服务chatserver之1

缘起最近阅读<<Go微服务实战>>(刘金亮,2021.1)本系列笔记拟采用golang练习之案例需求(聊天服务器)用户可以连接到服务器。用户可以设定自己的用户名。用户可以向服务器发送消息,同时服务器也会向其他用户广播该消息... 查看详情

手撸golangspringioc/aop之2

参考技术A手撸golangspringioc/aop之2最近阅读[Offer来了:Java面试核心知识点精讲(框架篇)](王磊,2020.6)本系列笔记拟采用golang练习之Talkischeap,showmethecode.配置接口指令接口指令构建器接口指令执行上下文接口保存配置另存配置添加... 查看详情

嘿~全流程带你基于pytorch手撸图片分类“框架“--huclassify(代码片段)

文章目录前言使用项目结构训练过程准备数据集与配置进入训练训练显示使用模型编码实现配置文件读取配置文件HU数据集解析器其他使用模型LeNet训练实现识别使用实现总结前言鸽了两天,从星期二晚上就开始说要发布这篇... 查看详情