深度学习除了大量数据之外,还可能存在内存容量和总线带宽等瓶颈,其中内存容量,需要考虑将大量的权重和偏置等等参数数据放在内存里面;总线带宽的瓶颈,主要考虑流经CPU(或GPU)总线的数据超过某个限制。对于这些瓶颈的考虑,我们应该尽可能减少流经网络的数据的位数。
        目前的浮点数主要是32位和64位,提高位数也就是提高精度对于很多行业特别重要,但是在深度学习领域就显得不怎么重要了,因为从我们前面学习到的各种点积运算、填充扩大、池化缩减、甚至图片的旋转,增亮等等操作,实际上可以发现即便图片有一些“噪声”,对于输出的结果其实影响是非常小的,也就是说神经网络的健壮性就显得实数的精度没有很大的意义。
我们现在来使用16位的半精度浮点数(half float),看下这个效果有没有很大的变化,还是以MNIST数据集为例:

import numpy as np
import matplotlib.pyplot as plt
from deepconv import DeepConvNet
from dataset.mnist import load_mnist#加载MNIST数据集
(x_train,t_train),(x_test,t_test)=load_mnist(flatten=False)
#深度学习CNN
network=DeepConvNet()
#加载生成的权重参数文件
network.load_params('DeepCNN_Params.pkl')
x_test=x_test[:10000]print('64位浮点数的识别率{:.3%}'.format(network.accuracy(x_test,t_test)))#转换成16位浮点数
x_test=x_test.astype(np.float16)
for param in network.params.values():param[...]=param.astype(np.float16)#print(param.shape)
print('16位浮点数的识别率{:.3%}'.format(network.accuracy(x_test,t_test)))

64位浮点数的识别率99.290%

16位浮点数的识别率99.290%

两者的识别精度是一样的,也证明了神经网络的健壮性,对于这种半精度浮点数会在以后大量使用,实际上,NVIDIA的Pascal框架的GPU已支持半精度浮点数的运算。

其中代码中出现了(...)三个点,这个是代表什么意思呢?
我们可以打印param来看下形状:

(16, 1, 3, 3)
(16,)
(16, 16, 3, 3)
(16,)
(32, 16, 3, 3)
(32,)
(32, 32, 3, 3)
(32,)
(64, 32, 3, 3)
(64,)
(64, 64, 3, 3)
(64,)
(1024, 50)
(50,)
(50, 10)
(10,)

有很多形状(多种维度的)

我的理解就是在指定的维度是泛指。直接看代码可能更容易理解

x=np.random.rand(3,4)
array([[ 0.01441032,  0.75985405,  0.5696051 ,  0.41236632],[ 0.01058361,  0.76136913,  0.94842466,  0.97565503],[ 0.38687359,  0.48324047,  0.16415143,  0.43345319]])

x[...,2]#在第二个维度的第三列
 array([ 0.5696051 ,  0.94842466,  0.16415143])

当然param[...]直接使用param一样可以!

深度学习的半精度浮点数的运用相关推荐

  1. FPGA学习笔记(2):半精度浮点数乘法器和半精度浮点数加法器的Verilog实现

    开发环境 1.Vivado 2019.2 2.仿真:Vivado Simulater 半精度浮点数介绍 IEEE754-2008包含一种"半精度"格式,只有16位宽.故它又被称之为 ...

  2. 使JavaScript的Uint8Array支持读取、写入Half(半精度浮点数)

    简单引用百度百科的说明: 半精度浮点数是一种计算机使用的二进制浮点数数据类型.半精度浮点数使用2字节(16位)存储.在IEEE 754-2008中,它被称作binary16.这种类型只适合用来存储那些 ...

  3. 【深度学习】半监督学习入门:伪标签学习和无监督SVM

    一.半监督学习 1-1.什么是半监督学习 让学习器不依赖外界交互.自动地利用未标记样本来提升学习性能,就是半监督学习(semi-supervised learning). 要利用未标记样本,必然要做一 ...

  4. 【C语言进阶深度学习记录】三 浮点数(float) 在内存中的表示方法

    相信大多数人知道整形数在内存中的分布方式,而且也能很容易写出其二进制的形式,但是对于浮点数,估计知道的人并不是很多 今天学习在C语言中浮点数在内存中的表示方法 文章目录 1 浮点数在内存中的存储方式 ...

  5. 深度学习如何均衡精度、内存、计算和通信开销?

    文 | 立交桥跳水冠军@知乎 本文已获作者授权,禁止二次转载 鱼与熊掌不可兼得,深度学习领域中的几个指标也相同. 主要的指标有如下四个: (1)精度:自然精度是一个模型最根本的衡量指标,如果一个模型精 ...

  6. 【深度学习】半监督学习入门:Mean teachers

  7. 双精度浮点数转换_模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo...

    鱼羊 发自 凹非寺  量子位 报道 | 公众号 QbitAI 近日,TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具. 有了它,就 ...

  8. 半监督学习深度学习算法

    该文章主体摘自知乎糯米稻谷的文章,对一些细节添加了自己的理解 文章链接https 半监督学习 啥是半监督学习(Semi-supervised Learning) 1.简单自训练(simple self ...

  9. 浮点数双精度,单精度以及半精度知识总结

    最近工作中遇到一个16位半精度浮点数的问题,纠结了很久,特此研究了一下,总结在此: 1.单精度(32位)浮点数的结构: 名称  长度 比特 位置 符号位 Sign(S):  1bit     (b31 ...

最新文章

  1. 人脸识别基础关键技术
  2. WinCE串口蓝牙的实现 .
  3. wince下的蓝牙串口通信
  4. linux 套接字 文件 路径,linux – 识别unix域套接字连接的另一端
  5. 查找数组B中不在数组A中的元素
  6. mybatis的缓存机制是怎么样的?
  7. 【SpringBoot与SpringCloud的一些根本】
  8. 【直播回顾】URP中如何写Shader?
  9. 【Luogu 3389】【模板】高斯消元法(用高斯消元求解线性方程组)
  10. Kotlin(android)协程中文翻译
  11. MongoDB数据同步工具之 MongoShake
  12. Android跳转小项目-CHANGE页面-Recycylerview、List、Context(二)
  13. H3C Cloud Lab安装
  14. 洛克菲勒家族是如何发家的,我们都看看
  15. php 无限极分类(两种方式)
  16. 小技巧(1)「MacBook➕iPad」
  17. 【计算理论】图灵机 ( 图灵机示例 )
  18. 湖北计算机技术以考代评,目前有哪些专业技术资格即职称实行“以考代评”?...
  19. c语言最新版,【整理】C语言的各种版本:C89,AMD1,C99,C11 – 在路上
  20. Jenkins Maven打包Jar,部署远程服务器

热门文章

  1. 《快活帮》第三次作业:团队项目的原型设计
  2. 每天一个Linux命令-cat
  3. 前台传到后台类型数组对象
  4. Activiti 用户任务并行动态多实例(多用户执行流程)
  5. 利用 Apache 为个人用户创建 web 站点及其报错处理
  6. JS实现子类调用父类的同名函数函数
  7. Linux下Nodejs安装
  8. C++_类和对象_C++继承_继承中子类的同名成员处理_同名变量_同名函数---C++语言工作笔记065
  9. MyCat分布式数据库集群架构工作笔记0001---Mycat简介
  10. 持续集成部署Jenkins工作笔记0001---持续集成、持续部署、持续交付的概念