cs231n_lecture_8_深度学习开发平台/框架

上节课回顾:
最优化:
SGD(黑色),SGD+momentum(蓝色),NesterovRmsprop(红色),Adam(紫色)

正则化:dropoutbatch normalization

迁移学习


CPU vs GPU

CPU擅长逻辑控制,串行的运算。和通用类型数据运算不同,GPU擅长的是大规模并发计算.

CPU GPU 的区别是什么? - 虫子君的回答 - 知乎 https://www.zhihu.com/question/19903344/answer/96081382 


一个简单的比较:纵轴是时间,ms

cpu上跑 | 在cuda上跑  | 用优化过的cuda,也就是cuDNN(一种基于GPU的加速库)上跑


数据从存储读到GPU在速度上是一个瓶颈,解决方法:
1.将数据全部读到RAM

2.SSD代替HDD

3.用更多的CPU线程取数据


深度学习框架现状:

来自GitHubstar统计https://github.com/hunkim/DeepLearningStars

前三


不过,听说FacebookPyTorch比较好用


为甚么要使用深度学习框架?

1.很容易建立大的计算图,也就是复杂的神经网络结构

2.计算梯度变得更容易

3.可以更高效地使用GPU加速(cuDNN,cuBLAS等)

如果你就用numpy,那么你只能在CPU上跑,而且得自己计算梯度


TensorFlow

例子,训练一个两层的ReLU网络,L2 loss


问题:w1,w2更新时会在cpu/gpu之间copy

改进:

也可以利用一个optimizer更新权值,loss计算也可以由函数完成:

初始化方式也可以自己定义:


PyTorch

三层抽象

Tesnsor:n维矩阵

Variable:神经网络的Node

Module:神经网络的layer


两者比较:Static vs Dynamic Graphs


1.静态图允许框架在运行前优化图

2.静态图建立好以后自己就可以连续执行了,不需要访问代码了;动态图的建立和执行时交替的,需要访问代码

3.在遇到条件分支时,动态图可以随意调整,静态图需要想一些trick在运行前就把控制流程确定下来

4.在遇到循环时,静态图也难搞一点,可读性差一点

后来,Google发布了TensorFlow Fold库,帮助建立动态计算图。


为什么dynamic graphy这么重要呢?

因为循环和递归有很多重要应用:

- Recurrent networks 时间递归神经网络

- Recursive networks 结构递归神经网络

- Modular Networks

- (Your creative idea here) 

Caffe

1.Core written in C++

2.Has Python and MATLAB bindings

3.Good for training or finetuningfeedforward classification models

4.Often no need to write code!

5.Not used as much in research anymore,still popular for deploying models

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值