概述

计算加速

方法一:

由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把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』卷积神经网络工程实践技巧_下的更多相关文章

  1. 『cs231n』卷积神经网络工程实践技巧_上

    概述 数据增强 思路:在训练的时候引入干扰,在测试的时候避免干扰. 翻转图片增强数据. 随机裁切图片后调整大小用于训练,测试时先图像金字塔制作不同尺寸,然后对每个尺寸在固定位置裁切固定大小进入训练,最 ...

  2. 『cs231n』卷积神经网络的可视化与进一步理解

    cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解,其中原论文翻译比博文更容易理解,但是太长,而博文是业者而非 ...

  3. Stanford CS231n实践笔记(课时22卷积神经网络工程实践技巧与注意点 cnn in practise 上)

    本课主要2个实践内容: 1.keras中数据集丰富,从数据集中提取更多特征(Data augmentation) 2.迁移学习(Tranform learning) 代码:https://github ...

  4. 『cs231n』循环神经网络RNN

    循环神经网络 循环神经网络介绍摘抄自莫凡博士的教程 序列数据 我们想象现在有一组序列数据 data 0,1,2,3. 在当预测 result0 的时候,我们基于的是 data0, 同样在预测其他数据的 ...

  5. 『cs231n』通过代码理解风格迁移

    『cs231n』卷积神经网络的可视化应用 文件目录 vgg16.py import os import numpy as np import tensorflow as tf from downloa ...

  6. 『cs231n』计算机视觉基础

    线性分类器损失函数明细: 『cs231n』线性分类器损失函数 最优化Optimiz部分代码: 1.随机搜索 bestloss = float('inf') # 无穷大 for num in range ...

  7. 『TensorFlow』通过代码理解gan网络_中

    『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上 上篇是一个尝试生成minist手写体数据的简单GAN网络,之前有介绍过,图片维度是28*28*1,生成器的上采样使 ...

  8. 【cs231n】卷积神经网络

    较好的讲解博客: 卷积神经网络基础 深度卷积模型 目标检测 人脸识别与神经风格迁移 译者注:本文翻译自斯坦福CS231n课程笔记ConvNet notes,由课程教师Andrej Karpathy授权 ...

  9. 『cs231n』通过代码理解gan网络&tensorflow共享变量机制_上

    GAN网络架构分析 上图即为GAN的逻辑架构,其中的noise vector就是特征向量z,real images就是输入变量x,标签的标准比较简单(二分类么),real的就是tf.ones,fake ...

随机推荐

  1. (转)MongoDB学习

    (二期)25.分布式文件存储数据库MongoDB [课程25]mongod...命令.xmind96.9KB [课程25]MongoD...概念.xmind0.5MB [课程25]MongoDB简介. ...

  2. java 之 dom4j解析xml

    *dom4j,是一个组织,针对xml解析,提供解析器dom4j *dom4j不是javase的一部分,想要使用需要导入dom4j提供的jar包 *第一步:创建lib文件夹,将压缩文件放到此处 *第二步 ...

  3. using Redis in .net core

    Using Redis Cache in .net Core Distributed Cache using Redis and ASP.NET Core ASP.NET Core Data Prot ...

  4. 封装sqlhelper【一】

    控件信息展示: //定义调用数据库类文件 namespace SqlHelper { public class TblClass { public int classId { get; set; } ...

  5. VS2010_DLL_共享数据段

    1.问题:写了一个DLL,自己一直测试不成功(程序A设置了 数值之后,程序B 始终读不到 读出来的都是初始化时的数值...) 具体过程: (1).DLL当初没想要用 共享数据段,测试使用 一直都是OK ...

  6. [转]jsbsim基础概念

    转自: 么的聊链接:https://www.jianshu.com/p/a0b4598f928a 虽然用户不需要掌握太多 JSBSim 飞行模拟器的细节,但是了解 JSBSim 的基本工作流程也会对学 ...

  7. webpack初识

    1.什么是Webpack WebPack可以看做是模块打包机:它做的事情是,分析你的项目结构,找到JavaScript模块以及其它的一些浏览器不能直接运行的拓展语言(Scss,TypeScript等) ...

  8. from import

    from A import B  # 只导入A里面的B

  9. JAVA基础知识总结:十二

    一.String类 字符串是一种特殊的对象,一旦被初始化就不能被改变了 字符串常量存储于常量池中 二.StringBuffer类 是一个字符串缓冲区,相当于一个容器 特点 a.可以对字符串进行增加和删 ...

  10. windows下vue开发环境的搭建

    一 介绍: vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库 ...