概述

计算加速

方法一:

由于计算机计算矩阵乘法速度非常快,所以这是一个虽然提高内存消耗但是计算速度显著上升的方法,把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. kafka丢失和重复消费数据

    Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景,我们在享受他的高并发,高可靠时,还是不得不面对可能存在的问题,最常见的就是丢包,重发问题. 1.丢包问题:消息推送服务,每天 ...

  2. Windows FindFirstFile利用

    目前大多数程序都会对上传的文件名加入时间戳等字符再进行MD5,然后下载文件的时候通过保存在数据库里的文件ID读取文件路径,一样也实现了文件下载,这样我们就无法直接得到我们上传的webshell文件路径 ...

  3. tomcat使用spring-loaded实现应用热部署

    springloaded官方说明: Spring Loaded is a JVM agent for reloading class file changes whilst a JVM is runn ...

  4. (zhuan) 一些RL的文献(及笔记)

    一些RL的文献(及笔记) copy from: https://zhuanlan.zhihu.com/p/25770890  Introductions Introduction to reinfor ...

  5. 【SQL】【Join基础】了解sql中的join用法,看这一篇就够了

    转自: https://www.cnblogs.com/reaptomorrow-flydream/p/8145610.html SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之 ...

  6. ArrayList.clear、=null、new Arraylist之间的对比区别

    参考博文 1.使用ArrayList的对象方法clear() List list = new ArrayList(); List list1 = list; list.add(1); list.add ...

  7. Js操作Cookie的实现

  8. Oracle AMERICAN改成简体中文

    64位Oracle连接32位PLSQL_Developer时,在PLSQL_Developer安装的目录中新建了一个TXT文件,之后更名为start.bat,内容如下: @echo off set p ...

  9. 关于python的“重载”

    首先,关于python和java的区别: 1.Java有是通过方法名和方法列表来定义一个函数,python是通过方法名来定义一个函数(不允许方法名相同的函数存在) 2.java是通过定义多个相同方法名 ...

  10. 《剑指offer》第四十七题(礼物的最大价值)

    // 面试题47:礼物的最大价值 // 题目:在一个m×n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值 // (价值大于0).你可以从棋盘的左上角开始拿格子里的礼物,并每次向左或 // 者向下 ...