zoukankan      html  css  js  c++  java
  • mxnet安装及NDArray初体验

    一、mxnet安装 (以下均为mac环境)

    有二种方式:

    1.1 用conda安装

     1 #创建gluon目录 
     2 mkdir gluon-tutorials && cd gluon-tutorials
     3 
     4 #下载源代码
     5 curl https://zh.gluon.ai/gluon_tutorials_zh.tar.gz -o tutorials.tar.gz
     6 
     7 #解压
     8 tar -xzvf tutorials.tar.gz && rm tutorials.tar.gz
     9 #设置清华镜像站
    10 conda config --prepend channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    11 #进入解压后的目录 
    12 cd gluon-tutorials
    13 #创建环境
    14 conda env create -f environment.yml
    15 #激活环境
    16 source activate gluon 

    但是14行创建环境这里,这几天一直报连不上清华的镜像站,不知道跟开十久大有无关系,如果大家也遇到类似问题,可以用下面的方式

    1.2 用brew+pip安装

    1 brew update
    2 brew tap homebrew/science
    3 brew info opencv
    4 brew install opencv
    5 pip install mxnet

    二、初试NDArray

    2.1 先启用jupyter-notebook

    2.2 创建矩阵

    1 from mxnet import ndarray as nd
    2 x = nd.array([[1,2],[3,4]])
    3 print(x)
    4 y = nd.array([[5,6],[7,8]])
    5 print(y)
    [[ 1.  2.]
     [ 3.  4.]]
    <NDArray 2x2 @cpu(0)>
    
    [[ 5.  6.]
     [ 7.  8.]]
    <NDArray 2x2 @cpu(0)>

    2.3 矩阵加法

    print(x+y)
    [[  6.   8.]
     [ 10.  12.]]
    <NDArray 2x2 @cpu(0)>

    2.4 矩阵数乘(点乘)

    print(x*y)
    [[  5.  12.]
     [ 21.  32.]]
    <NDArray 2x2 @cpu(0)>

    2.5 矩阵乘法(叉乘)

    print(nd.dot(x,y))
    [[ 19.  22.]
     [ 43.  50.]]
    <NDArray 2x2 @cpu(0)>

    2.5 e的指数运算

    print(nd.exp(x))
    [[  2.71828175   7.38905621]
     [ 20.08553696  54.59814835]]
    <NDArray 2x2 @cpu(0)>

    上述几个操作的公式图解:

    2.6 生成正态分布随机矩阵

    x=nd.random_normal(0, 1, shape=(2, 2))
    print(x)
    [[ 0.45787829  0.93632793]
     [-0.89425808  0.35744399]]
    <NDArray 2x2 @cpu(0)>

    2.7 矩阵转置

    1 from mxnet import ndarray as nd
    2 x = nd.array([[1,2],[3,4],[5,6]])
    3 print(x)
    4 print(x.T) #转置
    [[ 1.  2.]
     [ 3.  4.]
     [ 5.  6.]]
    <NDArray 3x2 @cpu(0)>
    
    [[ 1.  3.  5.]
     [ 2.  4.  6.]]
    <NDArray 2x3 @cpu(0)>
    

    2.8 广播

    如果2个矩阵A,B进行运算时,行或列的数量不满足运算要求,ndarray会尝试将第2个矩阵B,自动扩容(行或列),然后进行运算,如下面的代码示例:

    1 from mxnet import ndarray as nd
    2 x = nd.array([[1,2,3,4]]).reshape([2,2])
    3 y = nd.array([[5]])
    4 print(x)
    5 print(y)
    6 print(x+y)
    [[ 1.  2.]
     [ 3.  4.]]
    <NDArray 2x2 @cpu(0)>
    
    [[ 5.]]
    <NDArray 1x1 @cpu(0)>
    
    [[ 6.  7.]
     [ 8.  9.]]
    <NDArray 2x2 @cpu(0)>

    x是一个2行2列的矩阵,而y是1行1列的矩阵,2个矩阵进行加法运算时,ndarray会将y自动复制扩展成2行2列的矩阵,图解如下:

    注:广播这种复制扩容的行为,并非对所有操作都适用,比如叉乘就会报错(如:nd.dot(x,y)大家自己自行测试下),其实很容易埋坑,个人并不推荐使用。

    2.9 取第几行/第几列

    1 from mxnet import ndarray as nd
    2 x = nd.array([[1,2],[3,4],[5,6],[7,8]])
    3 print(x)
    4 print(x[:,0]) #取第1列
    5 print(x[1:2]) #取第2行
    6 print(x[1:3,0:2]) #取第2到3行 + 第1到2列
    7 i = nd.array([[0,2]]) 
    8 print(nd.take(x,i)) #取第1行、第3行
    [[ 1.  2.]
     [ 3.  4.]
     [ 5.  6.]
     [ 7.  8.]]
    <NDArray 4x2 @cpu(0)>
    
    [ 1.  3.  5.  7.]
    <NDArray 4 @cpu(0)>
    
    [[ 3.  4.]]
    <NDArray 1x2 @cpu(0)>
    
    [[ 3.  4.]
     [ 5.  6.]]
    <NDArray 2x2 @cpu(0)>
    
    [[[ 1.  2.]
      [ 5.  6.]]]
    <NDArray 1x2x2 @cpu(0)>

    2.10 计算欧氏距离(norm)

    1 import mxnet.ndarray as nd
    2 import mxnet.autograd as ag
    3 x = nd.array([[1,2],[3,4]])
    4 print(x)
    5 nd.norm(x)
    [[ 1.  2.]
     [ 3.  4.]]
    <NDArray 2x2 @cpu(0)>
    
    [ 5.47722578]
    <NDArray 1 @cpu(0)>

    更多ndarray的使用,请参考:

    1、https://mxnet.incubator.apache.org/api/python/ndarray.html (ndarray官方文档)

    2、https://zh.gluon.ai/chapter_crashcourse/ndarray.html  (使用NDArray来处理数据)

  • 相关阅读:
    浅谈项目管理之平衡原则
    MediaFoundation初步研究
    只有我一个人觉得cnblogs的页面超丑么?
    Xcode entitlement 问题定位和解决指南
    做游戏,不加班行不行?
    主程的工作职责有哪些?
    第N次开博
    企业级Java电商网站开发(服务端)
    JDK1.8版本特性
    POI操作Excel
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/mxnet-install-and-ndarray-demo.html
Copyright © 2011-2022 走看看