mxnet深度学习(KVS)

分布式的键值对的存储(Ditstributed Key-value Store)

KVStore是一个数据共享的地方。我们可以把它认为他是一个简单的类横跨不同的设备(GPUS和不同的机器),在这里设备将会压入和提取数据。

初始化

让我们考虑一个简单的例子:初始化一个(int,NDAarray)对用来存储,然后把它的值再提取出来。
>>> kv = mx.kv.create('local') # create a local kv store.
>>> shape = (2,3)
>>> kv.init(3, mx.nd.ones(shape)*2)
>>> a = mx.nd.zeros(shape)
>>> kv.pull(3, out = a)
>>> print a.asnumpy()
[[ 2.  2.  2.]
 [ 2.  2.  2.]]

我们把一个2x3的矩阵存在序号为3的地方,并把它从kv里面取出来。

压入,聚合,更新

对于被初始化的键,我们可以压入一个新值用相同的模型。
>>> kv.push(3, mx.nd.ones(shape)*8)
>>> kv.pull(3, out = a) # pull out the value
>>> print a.asnumpy()
[[ 8.  8.  8.]
 [ 8.  8.  8.]]

用来压入的数据可以来自于任何设备上。另外,我们可以压入几个值在同一个键上,在这里KVStore将首先把这些值加起来然后把这些聚合的值给压入。

>>> gpus = [mx.gpu(i) for i in range(4)]
>>> b = [mx.nd.ones(shape, gpu) for gpu in gpus]
>>> kv.push(3, b)
>>> kv.pull(3, out = a)
>>> print a.asnumpy()
[[ 4.  4.  4.]
 [ 4.  4.  4.]]

这里,我们生成了4个全为1的矩阵从4个gpu里面,然后把他们压入到同一个键里面,因为被压入4次,相当于被求和了4次,所以显示的结果是每个元素都为4.

对于每次压入,KVStore通过存储在updater里面的值,把压入值进行结合。默认的updater是ASSIGN,我们能取代默认的(ASSIGN)来控制控制数据的融合方式。
>>> def update(key, input, stored):
>>>     print "update on key: %d" % key
>>>     stored += input * 2
>>> kv._set_updater(update)
>>> kv.pull(3, out=a)
>>> print a.asnumpy()
[[ 4.  4.  4.]
 [ 4.  4.  4.]]
>>> kv.push(3, mx.nd.ones(shape))
update on key: 3
>>> kv.pull(3, out=a)
>>> print a.asnumpy()
[[ 6.  6.  6.]
 [ 6.  6.  6.]]

提取

我们早已看到怎么提取一个简单的键值对了。为了简化提取的过程,我们可以在一次调用中提取值到几个设备里面
>>> b = [mx.nd.ones(shape, gpu) for gpu in gpus]
>>> kv.pull(3, out = b)
>>> print b[1].asnumpy()
[[ 6.  6.  6.]
 [ 6.  6.  6.]]

处理一列的键值对

所有到目前为止的操作都是涉及了一个单一的键值对。KVStore也提供了一个接口对于一列的键值对。对于一个单一的设备:
>>> keys = [5, 7, 9]
>>> kv.init(keys, [mx.nd.ones(shape)]*len(keys))
>>> kv.push(keys, [mx.nd.ones(shape)]*len(keys))
update on key: 5
update on key: 7
update on key: 9
>>> b = [mx.nd.zeros(shape)]*len(keys)
>>> kv.pull(keys, out = b)
>>> print b[1].asnumpy()
[[ 3.  3.  3.]
 [ 3.  3.  3.]]

对于多重设备来说

>>> b = [[mx.nd.ones(shape, gpu) for gpu in gpus]] * len(keys)
>>> kv.push(keys, b)
update on key: 5
update on key: 7
update on key: 9
>>> kv.pull(keys, out = b)
>>> print b[1][1].asnumpy()
[[ 11.  11.  11.]
 [ 11.  11.  11.]]

mxnet深度学习(KVS)相关推荐

  1. mxnet深度学习(Symbol)

    mxnet深度学习(Symbol) 自动标志化区分 NDArray是一个基础的计算单元在MXNet里面的.除此之外,MXNet提供一个标志化的接口,叫做Symbol,为了简化构造神经网络.标志化结合了 ...

  2. mxnet深度学习(NDArray)

    mxnet深度学习(NDArray) MXNet里面的3个主要的概念: NDArray:NDArray提供了矩阵和张量(tensor)运算在CPU和GPU上,通过使用并行运算的技术. Symbol:S ...

  3. 检验 pytorch,tensorflow,paddle,mxnet 深度学习框架是否正确支持GPU功能

    检验 pytorch,tensorflow,paddle,mxnet 深度学习框架是否正确支持GPU功能 1.pytorch 框架 import torch a = torch.cuda.is_ava ...

  4. MXNET深度学习框架-03-采用ndarray和autograd实现线性回归

    采用ndarray和autograd实现线性回归 虽然现在有很多深度学习框架,但它们大多继承了所有的回归/分类任务,我们也只能使用它,无法了解其原理,所以,本文只用ndarray和autograd从0 ...

  5. MXNET深度学习框架-09-使用正则化方法解决过拟合问题(以从0开始的线性回归为例)

    本章我们使用一个高维线性回归的例子来做解决过拟合的问题. 相关公式:          y=0.05+∑i=1p0.01xi+noisey=0.05+\sum_{i=1}^p0.01x_i+noise ...

  6. 【BDTC 2015】深度学习分论坛:DL的图像识别、语音识别应用进展及MxNet开源框架设计

    发表于2015-12-15 17:18|4514次阅读| 来源CSDN|0 条评论| 作者王玮 大数据技术大会深度学习论坛 摘要:12月10-12日,2015中国大数据技术大会盛大开幕,11日下午深度 ...

  7. 深度学习高能干货:手把手教你搭建MXNet框架

    导读:相信很多程序员在学习一门新的编程语言或者框架时,都会先了解下该语言或者该框架涉及的数据结构,毕竟当你清晰地了解了数据结构之后才能更加优雅地编写代码,MXNet同样也是如此. 在MXNet框架中你 ...

  8. 深度学习框架【MxNet】的安装

    文章目录 前言 一.MXNet的前世今生 二.mxnet的安装 1.CPU安装 2.GPU安装,以cuda10.1为例 三.报错提醒 前言 本文简介安装mxnet深度学习框架,下边开始对深度学习框架m ...

  9. 李沐亲授加州大学伯克利分校深度学习课程移师中国,现场资料新鲜出炉

    2019 年 9 月 5 日,AI ProCon 2019 在北京长城饭店正式拉开帷幕.大会的第一天,以亚马逊首席科学家李沐面对面亲自授课完美开启! "大神",是很多人对李沐的印象 ...

最新文章

  1. 排序算法四:归并排序
  2. 大型神经网络可能初具意识:OpenAI首席科学家引争议,众大佬吵成一团
  3. Android MIPI转LVDS显示屏调试--- bootloader阶段显示(4)
  4. LeetCode 2 Keys Keyboard
  5. JoinGroup的过程
  6. oracle数据库sql的执行过程,Oracle体系结构之SQL语句的执行过程
  7. php学历要求_“最好编程语言” PHP面试的两三事
  8. IDEA 同一个工程下不同模块之间的类相互调用
  9. android 字体加粗_Android小技巧之TextView字体加粗
  10. ISO 12233分辨率测试卡是否已经淘汰了?
  11. C# Newtonsoft的使用
  12. 逻辑函数的化简-代数法化简
  13. 异硫氰酸荧光素标记磁性四氧化三铁纳米粒FITC-Hyd-PEG-Fe3O4|近红外染料CY7.5标记纳米二氧化硅CY7.5-SiO2 NPs
  14. 多列 count(distinct)改写优化
  15. Activity系列博客5篇
  16. MVG学习笔记(10) --射影变换的初步了解
  17. 段永平:你的“不投资”表现至少可以比85%的人好
  18. 【故障处理】ORA-12545: Connect failed because target host or object does not exist
  19. Android Studio常用快捷键、插件和功能
  20. USB的四种传输类型

热门文章

  1. windows7电脑怎么永久关闭广告
  2. c++ ea 代码 生成_EA公司教AI制作游戏角色,行动流畅自然,全程无需人类介入
  3. Websocket——原理及基本属性和方法
  4. Spring IOC原理总结
  5. ios跨线程通知_一种基于Metal、Vulkan多线程渲染能力的渲染架构
  6. php开发工具 debug,php开发性能调试工具xdebug
  7. 宝塔设置thinkphp的伪静态_宝塔面板与WDCP狭路相逢,谁才是国产之光?
  8. MySQL 高级 —— 索引实现的思考
  9. 设计模式---简单工厂设计模式
  10. idea mysql错误提示_idea提示错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver