『cs231n』卷积神经网络工程实践技巧_下
概述
计算加速
方法一:
由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把feature map中的感受野(包含重叠的部分,所以会加大内存消耗)和卷积核全部拉伸成为向量,组成两个矩阵相乘,再想办法恢复为输出的feature map。
方法二:
利用傅里叶变换的特性加速计算,思路来源于信号处理,只对大卷积核有效。
方法三:
思路来源于经典算法,用的人很少,老师也没怎么介绍,个人亦是不太感兴趣,需要的时候自己查资料吧。
总结:
比较简要的总结就是,如果真的需要自己实现卷积层的时候,那就使用im2col提高效率吧。
GPU/CPU
这一部分老师天南海北的扯了不少,中心思想就是:深度学习使用GPU分布式计算效果更好,英伟达伟光正(历史局限性问题,现在的谷歌的TPU貌似也有崛起的可能)。
不过下图还是展示了,即使GPU在并行计算领域效能非凡(相对应的CPU很擅长顺序处理),面对深度学习的海量数据计算还是力不从心,而且,好的GPU价格往往不菲(不是我吐槽,这是老师说的),
性能瓶颈
虽然GPU计算速度极其高效,但GPU和CPU数据相互拷贝过程还是会消耗大量时间
文件读取,比如打开批量jpg时,由于不同图片存放于硬盘不同位置,随机索引会消耗大量时间,而解压缩也会消耗大量时间,所以一般的做法是进行预处理,解压为顺序存储的像素文件,一般各个框架都有自己的标准文件格式
网瘾少年都知道,GPU么,内存越大(价格越贵)越好,(逃...
浮点类型
深度学习常使用单精度(32位)浮点数,
1.节省内存,可以存储更多的数据
2.更少的位数,更少的计算量,更快的运算速度
在课程中的程序中,由于numpy默认精度是64位,一般都给出了显示的类型转换。
实际上有很多16位的尝试,也有一些取得了不错的结果,但是16位的表示范围和精度是个问题,有人做过尝试:正常的16位运算由于误差积累较难收敛,如果运算结果使用高精度暂存,然后随机四舍五入(具体怎么随机不太明晰)的话,结果不错,还有人使用10位激活函数+12位参数更新的精度组合进行计算,结果也不错,还有极端人士使用1位(1或-1)进行计算,老师说很酷,我觉得这只是他的中性的口头禅吧... ...
总之,现在老老实实的使用32位即可,以后说不定会使用16位计算。
总结
『cs231n』卷积神经网络工程实践技巧_下的更多相关文章
- 『cs231n』卷积神经网络工程实践技巧_上
概述 数据增强 思路:在训练的时候引入干扰,在测试的时候避免干扰. 翻转图片增强数据. 随机裁切图片后调整大小用于训练,测试时先图像金字塔制作不同尺寸,然后对每个尺寸在固定位置裁切固定大小进入训练,最 ...
- 『cs231n』卷积神经网络的可视化与进一步理解
cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非 ...
- Stanford CS231n实践笔记(课时22卷积神经网络工程实践技巧与注意点 cnn in practise 上)
本课主要2个实践内容: 1.keras中数据集丰富,从数据集中提取更多特征(Data augmentation) 2.迁移学习(Tranform learning) 代码:https://github ...
- 『cs231n』循环神经网络RNN
循环神经网络 循环神经网络介绍摘抄自莫凡博士的教程 序列数据 我们想象现在有一组序列数据 data 0,1,2,3. 在当预测 result0 的时候,我们基于的是 data0, 同样在预测其他数据的 ...
- 『cs231n』通过代码理解风格迁移
『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...
- 『cs231n』计算机视觉基础
线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...
- 『TensorFlow』通过代码理解gan网络_中
『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...
- 【cs231n】卷积神经网络
较好的讲解博客: 卷积神经网络基础 深度卷积模型 目标检测 人脸识别与神经风格迁移 译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权 ...
- 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上
GAN网络架构分析 上图即为GAN的逻辑架构,其中的noise vector就是特征向量z,real images就是输入变量x,标签的标准比较简单(二分类么),real的就是tf.ones,fake ...
随机推荐
- ZOJ 3829 Known Notation(贪心)题解
题意:给一串字符,问你最少几步能变成后缀表达式.后缀表达式定义为,1 * 1 = 1 1 *,题目所给出的字串不带空格.你可以进行两种操作:加数字,交换任意两个字符. 思路:(不)显然,最终结果数字比 ...
- Golang踩坑录 两种方式来读取文件一行所导致的问题
前两天零零碎碎看完了golang的基础,想着找个小项目练练手,可是出现了一个十分棘手的问题 我要做的东西是网站路径爆破 所以我会从文本字典中把一行行路径读取然后与域名拼接,但是我在跑起程序后出现了问题 ...
- Java基础 【自动装箱和拆箱、面试题】
JDK 1.5 (以后的版本)的新特性自动装箱和拆箱 1. 自动装箱:把基本类型转换为包装类类型 int a =10; Integer i = new Integer(a); Integer valu ...
- Ubuntu 18.04版本下安装网易云音乐
这是我迄今为止发现的最完美的解决方法,不用改任何东西,只需要安装然后打开即可,后台也有. 参考:http://archive.ubuntukylin.com:10006/ubuntukylin/poo ...
- HDU 5441 Travel(并查集+统计节点个数)
http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给出一个图,每条边有一个距离,现在有多个询问,每个询问有一个距离值d,对于每一个询问,计算出有多少点 ...
- Java单例设计模式(实现Java的一个类只有一个对象)
单例设计模式的定义:单例设计模式是一种软件设计模式,在它的核心包含一个称为单例类的核心类. 核心便是希望一个类只有一个对象. 如何实现类在内存中只有一个对象呢? 第一步:构造私有:第二步:本身提供一 ...
- springboot整合druid数据库连接池并开启监控
简介 Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目.Druid支持所有JDBC兼容的数据库,包括Oracle.MySQL.Derby.PostgreSQL.SQL Server.H2 ...
- R语言可视化学习笔记之添加p-value和显著性标记--转载
https://www.jianshu.com/p/b7274afff14f?from=timeline #先加载包 library(ggpubr) #加载数据集ToothGrowth data(&q ...
- 对前台传过来的实体是否为空 进行为空校验的N种方法
首先定义一个注解,如下 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import j ...
- linux中date命令显示
1. date用来显示具体的日期和24进制的时间 [jasmine.qian@ ~]$ date Fri Jan 25 14:17:17 CST 2019 [jasmine.qian@ ~]$ dat ...