[Lecture 8 ] Deep Learning Software(深度学习软件)
文章目录
- 课堂问答
- 前言
- 1. TensorFlow(静态图)
- 2. Pytorch(动态计算图)
- 3. 动态图和静态图
- 4. Caffe/Caffe2
- 建议和总结
课堂问答
前言
现在深度学习框架发展的太快了(文中的有些代码已经发生了些许变化),本文主要记录课中讲的关于 Pytorch、Caffe 和 TensorFlow 的内。重点是Pytorch。
在之前的理论课上,我们知道,要完成神经网络的训练,我们最好是画出网络的计算图,然后理清其前向传播和反向传播过程。同时,要考虑底层实现的优化,比如数据的并行加载、网络的并行训练、GPU并行计算等。而神经网络框架让这些工作变得简单了很多:
而现在框架实现的一个基本目标就是:像Numpy一样的编写前向传播,并能够通过 计算图 自动计算梯度进行反向传播。例如下面这个例子:
1. TensorFlow(静态图)
主要过程分为下面几个部分:
- 定义前向传播的计算图(此时没有计算);
- 运行计算图的实例获得损失和梯度;
- 利用梯度进行更新,并重复该过程。
然后添加训练代码:
但是,上述操作有一个问题,即我们每次需要从CPU传输训练数据和权重到GPU,一次迭代之后,我们还要把梯度和损失传回来更新参数,而权重和数据都很大的情况下,上述操作非常费时。
所以,我们可以添加权重为计算图的内部变量,它在计算的整个周期都存在,而且不用传来传去,同时添加参数更新操作进计算图。
但是,上述操作依然存在问题:即我们的损失计算在权重更新之前,而我们最后只返回损失。此时,TensorFlow会智能地只执行到我们需要的位置,而造成权重没有更新。
一个解决方案是显示的返回新的权重,但是这些权重往往都是很大的张量(tensor),这样会造成大数据在CPU和GPU之间移动。 一个小技巧是:我们在计算图中添加一些假结点(Dummy node),这些结点操作在我们的权重上,但是不会返回一个很大的数据,最后只要我们同时计算损失和这个假结点就行。
当然,我们还可以调用TensorFlow里面的 优化器Optimizer 来帮我们自动执行上述操作。
当然,TensorFlow也定义了很多高级的API封装了很多网络层和损失函数。而且还有一个高等级的API——Keras,其后端基于TensorFlow并封装了很多操作。
可视化
TF中有个工具叫TensorBoard,支持我们可视化训练过程和网络结构。
2. Pytorch(动态计算图)
Pytorch不同于TensorFlow,其使用的是动态计算图。而且内部定义了三层抽象:
之所以称为动态图,因为其不用像TF那样先显示定义好计算图,再输入训练数据训练。而是,再进行计算的时候动态建立一个计算图。
例如,我们使用Pytorch定义一个两层神经网络来训练:
自动求导(Autograd)
其中:
- A PyTorch Variable is a node in a computational graph
- x.data is a Tensor
- x.grad is a Variable of gradients (same shape as x.data)
- x.grad.data is a Tensor of gradients
当然,我们也能自己定义自己的反向传播函数,相当于计算图中的一个 Gate,只需要完成前向和反向传播即可。然后PyTorch就能自动求导。
高级封装 nn
类似于Keras对TF的封装,Pytorch中也有高级的API,即nn模块,其定义了很多我们常用的网络层和函数。
优化器 Optimizer
定义自己的网络层
当然我们也可以通过继承nn.Module
来定义自己的网络结构,使之就像nn给我们提供的API一样。
数据加载器(DataLoader)
当然,Pytorch中也还有一个比较好用的接口——数据加载器。它允许我们并行的加载数据,只要我们先定义自己的数据类(DataSet).
预训练模型
在 torchvision
中包含了很多计算机视觉中常用的网络结构和预训练模型。
可视化
类似于TF的TensorBoard,Pytorch中也有一个可视化工具 Vidom,但是还支持计算图的可视化。
3. 动态图和静态图
之前讲了TF是基于静态图的,其需要先显示声明我们的计算图;而Pytorch是基于静态图的,其边计算边构造图。
- 相比较而言,静态图由于事先知道我们的图结构,所以可以做一些优化:
- 还有一个优势是:静态图一旦定义,很少更改,所以我们可以将其序列化并讲其存在磁盘中。
之后就可以直接加载复用,而不用再翻看之前的代码。(即发布的时候,我们只需要计算图就行,不用训练代码) - 而动态图,则在很多场景下看起来比较简洁,因为没有繁琐的定义计算图的步骤。而且Pytorch更加的Pythonic。同时,对于网络中的控制流,也像写Python和Numpy一样。但是,如果要在TF中添加控制流,则需要借助TF的一些API,添加到我们的静态图中。
4. Caffe/Caffe2
不同于之前的框架,Caffe底层是用C++写的,在产品部署中比较好。
而且很少写代码,都是编辑配置文件:
建议和总结
[Lecture 8 ] Deep Learning Software(深度学习软件)相关推荐
- Deep Learning(深度学习)相关网站
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- Deep Learning(深度学习) 资料库
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- Deep Learning(深度学习)资料汇总
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- deep learning (深度学习)资源整理,非常全面【转】
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- Deep Learning(深度学习)
Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...
- Deep Learning(深度学习)学习笔记整理系列
一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一.虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生& ...
- Deep Learning(深度学习)学习笔记整理系列之(八)
Deep Learning(深度学习)学习笔记整理系列之(八) 分类: Deep Learning 机器学习 Linux驱动2013-04-10 11:4257652人阅读评论(25)收藏举报 ...
- Deep Learning(深度学习)学习笔记整理
http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...
- [深度学习]DEEP LEARNING(深度学习)学习笔记整理
转载于博客http://blog.csdn.net/zouxy09 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之中的一个. ...
- 【转载】Deep Learning(深度学习)学习笔记整理系列
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-0 ...
最新文章
- Bitcoin0.21版 公链开发(5) PHP集成到Apache中(windows平台)
- Qt for Android环境配置
- 【HDU - 5452】Minimum Cut(树形dp 或 最近公共祖先lca+树上差分,转化tricks,思维)
- MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别
- 《深入理解 Spring Cloud 与微服务构建》第二章 微服务应该具备的功能
- 记录一枚验证URL的js正则表达式
- 省市区三级联动 mysql_省市区三级联动实现
- 2022年四川省大学生金融科技建模大赛-模型复现和点评
- 小爱同学app安卓版_小爱同学app下载安卓版-小爱同学 安卓版v2.9.50-PC6安卓网
- 美敦力PB560呼吸机设计图纸 源代码分享
- stm32之蓝牙模块HC-05使用
- 魔兽世界编程宝典(4-1)
- Python使用for实现无限循环的多种方法
- Ouino法国学习系统评价它是如何比其他学习软件
- 结巴 python_结巴中文分词使用学习(python)
- 《从0到1上线微信小游戏》第七节 微信排行榜和好友分享功能
- 【100%通过率 】华为OD真题c++/java/python【完美走位】【 2022 Q4 | 100分】
- java阳历转为阴历错了一天_Java 阴历阳历转换
- H264 Annex B 与 AVCC的区别
- 25岁同济硕士生斩获中国首个CVPR最佳学生论文奖,他还是个「赛车发烧友」