文章目录

  • 课堂问答
  • 前言
  • 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(深度学习软件)相关推荐

  1. Deep Learning(深度学习)相关网站

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  2. Deep Learning(深度学习) 资料库

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  3. Deep Learning(深度学习)资料汇总

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  4. deep learning (深度学习)资源整理,非常全面【转】

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  5. Deep Learning(深度学习)

    Deep Learning(深度学习) ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习):一 ufldl的2个教程(这个没得说,入门绝对的好教程,Ng的,逻辑清晰有练习): ...

  6. Deep Learning(深度学习)学习笔记整理系列

    一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之一.虽然计算机技术已经取得了长足的进步,但是到目前为止,还没有一台电脑能产生& ...

  7. Deep Learning(深度学习)学习笔记整理系列之(八)

     Deep Learning(深度学习)学习笔记整理系列之(八) 分类: Deep Learning 机器学习 Linux驱动2013-04-10 11:4257652人阅读评论(25)收藏举报 ...

  8. Deep Learning(深度学习)学习笔记整理

    http://blog.csdn.net/zouxy09/article/details/8775360 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫 ...

  9. [深度学习]DEEP LEARNING(深度学习)学习笔记整理

    转载于博客http://blog.csdn.net/zouxy09 一.概述 Artificial Intelligence,也就是人工智能,就像长生不老和星际漫游一样,是人类最美好的梦想之中的一个. ...

  10. 【转载】Deep Learning(深度学习)学习笔记整理系列

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0  2013-0 ...

最新文章

  1. Bitcoin0.21版 公链开发(5) PHP集成到Apache中(windows平台)
  2. Qt for Android环境配置
  3. 【HDU - 5452】Minimum Cut(树形dp 或 最近公共祖先lca+树上差分,转化tricks,思维)
  4. MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别
  5. 《深入理解 Spring Cloud 与微服务构建》第二章 微服务应该具备的功能
  6. 记录一枚验证URL的js正则表达式
  7. 省市区三级联动 mysql_省市区三级联动实现
  8. 2022年四川省大学生金融科技建模大赛-模型复现和点评
  9. 小爱同学app安卓版_小爱同学app下载安卓版-小爱同学 安卓版v2.9.50-PC6安卓网
  10. 美敦力PB560呼吸机设计图纸 源代码分享
  11. stm32之蓝牙模块HC-05使用
  12. 魔兽世界编程宝典(4-1)
  13. Python使用for实现无限循环的多种方法
  14. Ouino法国学习系统评价它是如何比其他学习软件
  15. 结巴 python_结巴中文分词使用学习(python)
  16. 《从0到1上线微信小游戏》第七节 微信排行榜和好友分享功能
  17. 【100%通过率 】华为OD真题c++/java/python【完美走位】【 2022 Q4 | 100分】
  18. java阳历转为阴历错了一天_Java 阴历阳历转换
  19. H264 Annex B 与 AVCC的区别
  20. 25岁同济硕士生斩获中国首个CVPR最佳学生论文奖,他还是个「赛车发烧友」

热门文章

  1. 新版标准日本语高级_第19课
  2. 基于Eclipse和Mysql写的公交管理系统
  3. VC#复习资料(是轩~)
  4. STM32L系列简介
  5. 2017年卢松松博客视频方向该怎么做
  6. 宝塔面板 - BT面板 Linux Centos 命令集
  7. Excel相关操作(二)Springboot框架使用easyexcel工具
  8. 来自灵魂的拷问——知道什么是SQL执行计划吗?
  9. 正斜杠(/)反斜杠(\)简单区别
  10. 金仓数据库KingbaseES SYS_BULKLOAD工具的使用