MXnet
深度学习库 MXNet 由 dmlc/cxxnet, dmlc/minerva 和 Purine2 的作者发起,
融合了Minerva 的动态执行,cxxnet 的静态优化和 Purine2 的符号计算等思想,直接支持基于Python 的 parameter server 接口,使得代码可以很快向分布式进行迁移。
每个模块都进行清晰设计,使得每一部分本身都具有被直接利用的价值。
C 接口和静态/动态 Library 使得对于新语言的扩展更加容易,目前支持C++和python 2/3 ,接下来相信会有更多语言支持,并方便其他工具增加深度学习功能。
MXNet是一个开源的深度学习框架,由亚马逊公司发起并维护。它支持多种编程语言,包括Python、C++、R、Scala等,可以在CPU、GPU和分布式环境下运行。MXNet提供了丰富的神经网络层和优化算法,可以用于各种深度学习任务,如图像分类、目标检测、语音识别等。
MXNet的基本概念包括Symbol和NDArray。Symbol表示数学运算,是MXNet的基本构建块,可以用来表示变量、运算、函数等。NDArray则是MXNet中的多维数组,类似于NumPy数组。
MXNet具有以下特点和优势:
-
灵活编程模型:支持命令式和符号式编程模型,以最大化效率和性能。
-
可移植性:从云端到客户端都可运行,包括多CPU、多GPU、集群、服务器、工作站甚至移动智能手机。
-
多语言支持:支持七种主流编程语言,是唯一支持所有R函数的构架。
-
本地分布式训练:支持在多CPU/GPU设备上的分布式训练,可充分利用云计算的规模优势。
-
性能优化:使用一个优化的C++后端引擎并行I/O和计算,无论使用哪种语言都能达到最佳性能。
MXNet可以应用于各种机器学习和深度学习的任务和领域,包括自然语言处理、计算机视觉、推荐系统和强化学习等。在自然语言处理领域,MXNet可以构建和训练用于文本分类、情感分析、命名实体识别、机器翻译等任务的深度学习模型。在计算机视觉领域,MXNet提供了许多用于处理图像数据的函数和工具,并支持常用的图像数据集,如ImageNet,可用于图像分类、目标检测、语义分割和人脸识别等任务。
安装 Ubuntu/Debian上构建
安装依赖:
sudo apt-get update
sudo apt-get install -y build-essential git libatlas-base-dev libopencv-dev
构建MXnet:
git clone --recursive https://github.com/dmlc/mxnet
cd mxnet;
make -j
安装python 接口
进入源码目录编译好的python子目录安装python语言包即可
cd ./python/
sudo python setup.py install
MXnet基本概念和操作
NDArray
多维的数据结构,提供在 cpu 或者 gpu 上进行矩阵运算和张量计算,
能够自动并行计算
NDArray 是 MXnet 中最底层的计算单元,与 numpy.ndarray 非常相似,
但是也有 2 点不同的特性:
1)支持多设备
所有的操作可以在不同的设备上运行,包括 cpu 和 gpu。
>>> import mxnet as mx
在cpu0上创建一个2X3的矩阵
>>> a = mx.nd.empty((2, 3))
在gpu上创建一个2X3的矩阵
>>> b = mx.nd.empty((2, 3), mx.gpu()) # 在gpu0上创建一个2X3的矩阵
>>> c = mx.nd.empty((2, 3), mx.gpu(2)) # 在gpu2上创建一个2X3的矩阵
>>> c.shape # 维度(2L, 3L)
>>> c.context # 设备信息gpu(2)
其他的初始化方式
>>> a = mx.nd.zeros((2, 3)) # 创建2X3的全0矩阵
>>> b = mx.nd.ones((2, 3)) # 创建2X3的全1矩阵
>>> b[:] = 2 # 所有元素赋值为2
>>> b = mx.nd.zeros((2, 3), mx.gpu())
>>> a = mx.nd.ones((2, 3)) # 创建2X3的全1矩阵
不同的设备之间进行数据拷贝
>>> a.copyto(b) # 从cpu拷贝数据到gpu
NDArray转换为numpy.ndarray
>>> a = mx.nd.ones((2, 3))
>>> b = a.asnumpy()
>>> type(b)
<type 'numpy.ndarray'>
>>> print b[[ 1. 1. 1.]
[ 1. 1. 1.]]
numpy.ndarray转换为NDArray
>>> import numpy as np
>>> a = mx.nd.empty((2, 3))
>>> a[:] = np.random.uniform(-0.1, 0.1, a.shape)
>>> print a.asnumpy()[[-0.06821112 -0.03704893 0.06688045]
[ 0.09947646 -0.07700162 0.07681718]]
NDArray基本运算
>>> a = mx.nd.ones((2, 3)) * 2
>>> b = mx.nd.ones((2, 3)) * 4
>>> print b.asnumpy()
[[ 4. 4. 4.]
[ 4. 4. 4.]]
>>> c = a + b # 对应元素求和
>>> print c.asnumpy()
[[ 6. 6. 6.]
[ 6. 6. 6.]]
>>> d = a * b # 对应元素求积
>>> print d.asnumpy()
[[ 8. 8. 8.]
[ 8. 8. 8.]]
标签:MXNet,Symbol,nd,并行计算,gpu,2X3,mx,NDArray,运算
From: https://blog.csdn.net/xiaoxiaowenqiang/article/details/137521515