mxnet深度学习(Symbol)

自动标志化区分

NDArray是一个基础的计算单元在MXNet里面的。除此之外,MXNet提供一个标志化的接口,叫做Symbol,为了简化构造神经网络。标志化结合了灵活性和效率。一方面,它是和Caffe里面的神经网络构造是相似的和CXXNet,另一方面,标志化还定义Theano里面的计算图源。

基本的标志组成

下面的代码创造了2层感知器。

>>> import mxnet as mx
>>> net = mx.symbol.Variable('data')
>>> net = mx.symbol.FullyConnected(data=net, name='fc1', num_hidden=128)
>>> net = mx.symbol.Activation(data=net, name='relu1', act_type="relu")
>>> net = mx.symbol.FullyConnected(data=net, name='fc2', num_hidden=64)
>>> net = mx.symbol.SoftmaxOutput(data=net, name='out')
>>> type(net)
<class 'mxnet.symbol.Symbol'>

每个标志带有一个特定的名字。Variable经常定义为输入,或者空的变量。其它的标志把一个标志(data)作为输入,同时还可以接收其它的假设参数比如隐藏神经元的个数或者激活类型。

这个标志可以简单可见的以一个函数和几个函数参数,不过它们的名字都是随机生成的。我们可以用下面的语句来看

>>> net.list_arguments()
['data', 'fc1_weight', 'fc1_bias', 'fc2_weight', 'fc2_bias', 'out_label']

我们可以看到,这些参数是被每个symbol所需要的

data:variable data里面所需要的数据

fc1_weighted和fc1_bias:与第一层fc1相连的权重和偏执项。

fc2_weighted和fc2_bias:与第一层fc2相连的权重和偏执项。

out_label:损失(函数)所需要的标签

我们也可以显示指定这些自动的名字:

>>> net = mx.symbol.Variable('data')
>>> w = mx.symbol.Variable('myweight')
>>> net = mx.symbol.FullyConnected(data=net, weight=w, name='fc1', num_hidden=128)
>>> net.list_arguments()
['data', 'myweight', 'fc1_bias']

更加复杂的构造

MXNet提供了优化好的标志(src/operator)对于深度学习里面常用层级。我们也能简单的定义新的操作在python里面。下面的例子第一次执行了一个元素级加法操作在两个层级之间,然后把他们传给完全连接的操作。

>>> lhs = mx.symbol.Variable('data1')
>>> rhs = mx.symbol.Variable('data2')
>>> net = mx.symbol.FullyConnected(data=lhs + rhs, name='fc1', num_hidden=128)
>>> net.list_arguments()
['data1', 'data2', 'fc1_weight', 'fc1_bias']

我们也可以生成一个标志以另一个灵活的方式而不是像前面的类似一条龙的服务。

>>> net = mx.symbol.Variable('data')
>>> net = mx.symbol.FullyConnected(data=net, name='fc1', num_hidden=128)
>>> net2 = mx.symbol.Variable('data2')
>>> net2 = mx.symbol.FullyConnected(data=net2, name='net2', num_hidden=128)
>>> composed_net = net(data=net2, name='compose')
>>> composed_net.list_arguments()
['data2', 'net2_weight', 'net2_bias', 'compose_fc1_weight', 'compose_fc1_bias']

在上面的例子里面,net是用来应用于一个存在的标志,然后结果的composed_net将会取代net里面原来的data,通过net2.(

 composed_net = net(data=net2, name='compose')

) 模型参数推断

在下面,我们将推断所有的需要作为输入数据的模型的参数

>>> net = mx.symbol.Variable('data')
>>> net = mx.symbol.FullyConnected(data=net, name='fc1', num_hidden=10)
>>> arg_shape, out_shape, aux_shape = net.infer_shape(data=(100, 100))
>>> dict(zip(net.list_arguments(), arg_shape))
{'data': (100, 100), 'fc1_weight': (10, 100), 'fc1_bias': (10,)}
>>> out_shape
[(100, 10)]

我们可以看一下net.infer_shape函数的功能

infer_shape(self, *args, **kwargs) method of mxnet.symbol.Symbol instance
    Infer the shape of outputs and arguments of given known shapes of arguments.
    
    User can either pass in the known shapes in positional way or keyword argument way.
    Tuple of Nones is returned if there is not enough information passed in.
    An error will be raised if there is inconsistency found in the known shapes passed in.
    
    Parameters
    ----------
    *args :
        Provide shape of arguments in a positional way.
        Unknown shape can be marked as None
    
    **kwargs :
        Provide keyword arguments of known shapes.
    
    Returns
    -------
    arg_shapes : list of tuple or None

这个模型推断将被用来作为一个调试机制来检测模型的不一致。

绑定标志并且运行

现在我们可以绑定空的标志,来实行前向传播和后向传播的操作。bind这个函数将创建一个Executor(用来执行真实的计算)

>>> # define computation graphs
>>> A = mx.symbol.Variable('A')
>>> B = mx.symbol.Variable('B')
>>> C = A * B
>>> a = mx.nd.ones(3) * 4
>>> b = mx.nd.ones(3) * 2
>>> # bind the symbol with real arguments
>>> c_exec = C.bind(ctx=mx.cpu(), args={'A' : a, 'B': b})
>>> # do forward pass calclation.
>>> c_exec.forward()
>>> c_exec.outputs[0].asnumpy()
[ 8.  8.  8.]

对于神经网络,一个更常用的使用模式是simple_bind,这个将会创建所有的参数数组。接下去你将会调用forward,和backward(如果梯度需要的话)来得到梯度。

>>> # define computation graphs
>>> net = some symbol
>>> texec = net.simple_bind(data=input_shape)
>>> texec.forward()
>>> texec.backward()

最后

model API是一个简单的对标志执行器的封装来支持神经网络的训练。

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

  1. mxnet深度学习(NDArray)

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

  2. mxnet深度学习(KVS)

    mxnet深度学习(KVS) 分布式的键值对的存储(Ditstributed Key-value Store) KVStore是一个数据共享的地方.我们可以把它认为他是一个简单的类横跨不同的设备(GP ...

  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. 深度学习高能干货:手把手教你搭建MXNet框架

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

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

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

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

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

  9. 深度学习框架的来龙去脉——史上最全面最新的深度学习框架对比分析

    一.深度学习框架概述与深度学习技术的四大阵营 人工智能从学术理论研究到生产应用的产品化开发过程中通常会涉及到多个不同的步骤和工具,这使得人工智能开发依赖的环境安装.部署.测试以及不断迭代改进准确性和性 ...

最新文章

  1. 在CentOS上部署基于dnx/coreclr的ASP.NET 5应用程序
  2. GD32的flash读、擦除、写操作
  3. DELL R740XD 开启 TPM功能
  4. 外贸企业网站建设难免遇到难题
  5. 合成存储方法,局部/全局变量
  6. python 笔记 haversine (两个经纬度坐标之间的距离)
  7. IP通信基础 实验三
  8. oracle表空间如何压缩,Oracle里表空间的压缩
  9. Tricks(四十三)—— 逆序的方式访问一个 list
  10. 2015.5.29日总结
  11. 手动抛出异常_TestNG和SpringBoot2.1.6整合后,导致TestNG的断言异常无法抛出,是为什么?...
  12. [转载] 深入理解log机制
  13. JDK11.0.9-windows64下载
  14. pthread_sigmask
  15. 离线安装docker
  16. Tamami教你孕前如何选购防辐射服
  17. MBUS CJ/T 188水表协议 Meter-Bus总线
  18. PCL学习笔记(3)——openni2_grabber从相机获取点云数据
  19. JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)
  20. 微信公众系列之百度天气预报开发

热门文章

  1. Win7系统Office卸载不干净无法安装怎么办
  2. java多线程论文_Java5 多线程之入门篇-论文
  3. Mysql 数据库默认值选 ‘‘“ 、Null和Empty String的区别
  4. Java数据库篇5——事务
  5. 优酷html5视频网站,国内主要视频网站的嵌入方式
  6. 后端开发 java_Java后端开发三年,你不得不了解的JVM
  7. linux下用c语言写黄金矿工,C语言写的黄金矿工O(∩_∩)O---初稿,能玩了
  8. android两个java文件内容_java – 在1个请求中将多个文件从Android上传...
  9. mysql数据库rp集群_MySQL集群入门(PXC)
  10. 曲面设计步骤pdf_3dmax模渲大师|室外设计师怎么用3dmax疯狂模渲大师制作室内设计效果图的外景天空?...