mxnet深度学习(Symbol)

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是一个简单的对标志执行器的封装来支持神经网络的训练。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV 例程300篇】03. 图像的显示(cv2.imshow)

专栏地址&#xff1a;『youcans 的 OpenCV 例程300篇 - 总目录』 01. 图像的读取&#xff08;cv2.imread&#xff09; 02. 图像的保存&#xff08;cv2.imwrite&#xff09; 03. 图像的显示&#xff08;cv2.imshow&#xff09; 04. 用 matplotlib 显示图像&#xff08;plt.imsho…

【OpenCV 例程300篇】04. 用 matplotlib 显示图像(plt.imshow)

专栏地址&#xff1a;『youcans 的 OpenCV 例程300篇 - 总目录』 01. 图像的读取&#xff08;cv2.imread&#xff09; 02. 图像的保存&#xff08;cv2.imwrite&#xff09; 03. 图像的显示&#xff08;cv2.imshow&#xff09; 04. 用 matplotlib 显示图像&#xff08;plt.imsho…

mxnet深度学习(KVS)

mxnet深度学习(KVS) 分布式的键值对的存储(Ditstributed Key-value Store) KVStore是一个数据共享的地方。我们可以把它认为他是一个简单的类横跨不同的设备(GPUS和不同的机器)&#xff0c;在这里设备将会压入和提取数据。初始化 让我们考虑一个简单的例子:初始化一个(int,NDAa…

【OpenCV 例程300篇】05. 图像的属性(np.shape)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300 篇』 【OpenCV 例程300篇】05. 图像的属性&#xff08;np.shape&#xff09; OpenCV 中图像对象的数据结构是 ndarray 多维数组&#xff0c;因此 ndarray 数组的属性和操作方法也都适用于 OpenCV 的图像对象。 img.ndim&…

mxnet安装(Jetson)

mxnet安装 mxnet是一个跨平台的深度学习框架&#xff0c;今天我们将在板子(Jetson Tk1或Jetson Tx1或者Tegra K1)上安装mxnet,并用到cuda加速。1.第一步&#xff0c;我们先安装依赖 sudo apt-get update sudo apt-get install -y build-essential git libatlas-base-dev libope…

【OpenCV 例程300篇】06. 像素的编辑(img.itemset)

文章目录&#xff1a;『youcans 的 OpenCV 例程300篇 - 总目录』 【OpenCV 例程300篇】06. 像素的编辑&#xff08;img.itemset&#xff09; 像素是构成数字图像的基本单位&#xff0c;像素处理是图像处理的基本操作。 对像素的访问、修改&#xff0c;可以使用 Numpy 方法直接…

图片里的标志化的构造和执行

图片里的标志化的构造和执行 这是一篇解释在图片里面的进行标志化构造和执行的文章。你最好和这篇文章一起阅读 Symbolic API..标志构成 标志是我们想做的计算的描述。标志构造API生成计算图源来描述计算的需要。下面的图片显示了怎样我们组成标志来描述基本的计算。 mxnet.sy…

【OpenCV 例程300篇】07. 图像的创建(np.zeros)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300 篇』 【OpenCV 例程300篇】07. 图像的创建&#xff08;np.zeros&#xff09; OpenCV 中图像对象的数据结构是 ndarray 多维数组&#xff0c;因此可以用 Numpy 创建多维数组来生成图像。特别对于空白、黑色、白色、随机等特殊…

mxnet创建新的操作(层)

mxnet创建新的操作(层) 这篇blog将会告诉你如何创建新的MXNet操作(层)。 我们竭尽所能提供最好的操作对于绝大多数的使用场景。然而&#xff0c;如果你发现自己需要自定义层&#xff0c;你有3个选择: 1.使用原生的语言和它的矩阵库(numpy in Python)。这不需要过多的能力和对…

【OpenCV 例程300篇】08. 图像的复制(np.copy)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300 篇』 【OpenCV 例程300篇】08. 图像的复制&#xff08;np.copy&#xff09; 使用 Numpy 的 np.copy() 函数可以进行图像的复制&#xff0c;不能通过直接赋值进行图像的复制。 函数说明&#xff1a; arr numpy.copy(img) # …

机器学习里面常用知识

每次手推公式就会遇见各种不会的&#xff0c;在网上搜了个总结的还不错的常用求导公式。。。继续更新中…… 一、基本线性代数 以下部分原文地址&#xff1a;http://blog.163.com/live_freely/blog/static/151142060201023154057339/ 在网上看到有人贴了如下求导公式&#xff1…

【OpenCV 例程300篇】09. 图像的裁剪(cv2.selectROI)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 300 篇』 【OpenCV 例程300篇】09. 图像的裁剪&#xff08;cv2.selectROI&#xff09; 用 Numpy 的切片方法可以进行图像的裁剪&#xff0c;操作简单方便。 方法说明&#xff1a; retval img[y:yh, x:xw].copy() 对图像 img 裁…

【OpenCV 例程300篇】10. 图像的拼接(np.hstack)

3文章目录&#xff1a;『youcans 的 OpenCV 例程300篇 - 总目录』 【OpenCV 例程300篇】10. 图像的拼接&#xff08;np.hstack&#xff09; 用 Numpy 的数组堆叠方法可以进行图像的拼接&#xff0c;操作简单方便。 方法说明&#xff1a; retval numpy.hstack((img1, img2, ……

win下python和opencv安装

最简单粗暴的安装教程 1.先去下载3个文件pycharm(IDE),anaconda(集成库),opencv的whl文件 http://yun.baidu.com/share/link?shareid1022325066&uk1275716166 里面还有别的学习教程&#xff0c;包括opencv&#xff0c;numpy&#xff0c;matplotlib等。 2.把pycharm和an…

【OpenCV 例程300篇】11. 图像通道的拆分(cv2.split)

文章目录&#xff1a;『youcans 的 OpenCV 例程300篇 - 总目录』 【OpenCV 例程300篇】11. 图像通道的拆分&#xff08;cv2.split&#xff09; 函数 cv2.split() 将 3 通道 BGR 彩色图像分离为 B、G、R 单通道图像。 函数说明&#xff1a; cv2.split(img[, mv]) -> retval …

机器学习矩阵求导

矩阵求导好像读书的时候都没学过&#xff0c;因为讲矩阵的课程上不讲求导&#xff0c;讲求导的课又不提矩阵。如果从事机器学习方面的工作&#xff0c;那就一定会遇到矩阵求导的东西。维基百科上&#xff1a;http://en.wikipedia.org/wiki/Matrix_calculus &#xff0c; 根据Y与…

【OpenCV 例程300篇】12. 图像通道的合并(cv2.merge)

文章目录&#xff1a;『youcans 的 OpenCV 例程200篇 - 总目录』 【OpenCV 例程300篇】12. 图像通道的合并&#xff08;cv2.merge&#xff09; 函数 cv2.merge() 将 B、G、R 单通道合并为 3 通道 BGR 彩色图像。 函数说明&#xff1a; cv2.merge(mv[, dst]) -> retval # BG…

机器学习向量化练习

机器学习向量化练习 在先前的练习里面&#xff0c;我们已经通过对自然图像完成了一个稀疏自编码的练习。在这次我们将通过向量化来使我们运行速度更快&#xff0c;并且我们将把它应用到手写数字里面。 数据下载 MNIST Dataset (Training Images)MNIST Dataset (Training Labe…

【OpenCV 例程200篇】13. 图像的加法运算(cv2.add)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 200 篇』 文章目录&#xff1a;『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】13. 图像的加法运算&#xff08;cv2.add&#xff09; 函数 cv2.add() 用于图像的加法运算。 函数说明&#xff1a; …

【OpenCV 例程200篇】14. 图像与标量相加(cv2.add)

专栏地址&#xff1a;『youcans 的 OpenCV 例程 200 篇』 文章目录&#xff1a;『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程 200 篇】14. 图像与标量相加&#xff08;cv2.add&#xff09; 函数 cv2.add() 用于图像的加法运算。 函数说明&#xff1a; …