最近在学习mxnet这个深度学习框架,俗话说:“好记性不如烂笔头”,现将学习的过程及内容记录下来,以备自己可以随时查看回顾。
PS:在我的笔记本电脑上,我安装的是mxnet-gpu版,便于后面的深度神经网络搭建,语言为python 3.6.7,IDE为PyCharm。
首先需要导入ndarray的包(ndarray与numpy非常像):
from mxnet import ndarray as nd
1、创建矩阵
mat = nd.zeros(shape=(3, 4)) # 创建全0的矩阵(3行4列)
ones = nd.ones(shape=(5, 6)) # 创建全1的矩阵(5行6列)
array = nd.array([[1, 2], [3, 4]])
print(mat)
print("==========")
print(ones)
print("==========")
print(array)
random_array = nd.random_normal(0, 1, shape=(3, 4)) # 服从均值0方差1的正太分布
print("随机数组:",random_array)
print("数组维度:",random_array.shape) # 查看数组维度,与numpy一样
print("数组大小:",random_array.size) # 查看数组元素个数,行列相乘
运行结果:
3、操作符
常规的加减乘除没必要使用MXNET中的ndarray,感觉有点大材小用,这里只记录指数运算和点乘。
(1)指数运算:
代码生成的随机数组:
ex_array=nd.exp(random_array) # 对每个元素做指数运算
print("指数运算-数组:",ex_array)
print("点乘运算:",nd.dot(random_array,random_array.T)) # (3,4)矩阵和(4,3)矩阵相乘-->(3,3)矩阵
运行结果:
4、广播
当二元操作符左右两边ndarray维度不一样时,系统会尝试将其复制到一个共同的形状。
a=nd.arange(3).reshape(shape=(3,1))
b=nd.arange(2).reshape(shape=(1,2))
print("a:",a)
print("b:",b)
print("a+b:",a+b)
运行结果:
它会将“a”和“b”扩展成一个3X2的矩阵,这样就可以进行相加了。
5、跟numpy的转换
import numpy as np
x=np.ones(shape=(1,2))
y=nd.array(x) # numpy-->ndarray(mxnet)
z=y.asnumpy() # ndarray(mxnet)-->numpy
print(type(y),type(z))
运行结果:
6、替换操作
使用python的操作如p=l+p,会把y从现在的实例指向新的实例,这样会开辟一个新的内存,浪费资源。
l=nd.ones(shape=(3,4))
p=nd.ones(shape=(3,4))
z=nd.elemwise_add(l,p) # 加法
print(z)
运行结果:
一句话:ndarray是mxnet中的一个处理数组(可多维)的一个方法包,与numpy非常相似。其它有关API可在官网处查询。
本节所有代码:
from mxnet import ndarray as nd
'''----创建矩阵---'''
mat = nd.zeros(shape=(3, 4)) # 创建全0的矩阵(3行4列)
ones = nd.ones(shape=(5, 6)) # 创建全1的矩阵(5行6列)
array = nd.array([[1, 2], [3, 4]])
print(mat)
print("==========")
print(ones)
print("==========")
print(array)
'''---创建随机数组-----'''
random_array = nd.random_normal(0, 1, shape=(3, 4)) # 服从均值0方差1的正太分布
print("随机数组:",random_array)
print("数组维度:",random_array.shape) # 查看数组维度,与numpy一样
print("数组大小:",random_array.size) # 查看数组元素个数,行列相乘
'''---操作符---'''
ex_array=nd.exp(random_array) # 对每个元素做指数运算
print("指数运算-数组:",ex_array)
print("点乘运算:",nd.dot(random_array,random_array.T)) # (3,4)矩阵和(4,3)矩阵相乘-->(3,3)矩阵
'''---广播---'''
# 当二元操作符左右两边ndarray维度不一样时,系统会尝试将其复制到一个共同的形状。
a=nd.arange(3).reshape(shape=(3,1))
b=nd.arange(2).reshape(shape=(1,2))
print("a:",a)
print("b:",b)
print("a+b:",a+b)
'''---跟numpy的转换---'''
# mxnet中的ndarray可以与numpy进行转化
import numpy as np
x=np.ones(shape=(1,2))
y=nd.array(x) # numpy-->ndarray(mxnet)
z=y.asnumpy() # ndarray(mxnet)-->numpy
print(type(y),type(z))
'''---替换操作---(不开辟内存,节省内存)'''
# 使用python的操作如p=l+p,会把y从现在的实例指向新的实例,这样会开辟一个新的内存,浪费资源
l=nd.ones(shape=(3,4))
p=nd.ones(shape=(3,4))
z=nd.elemwise_add(l,p) # 加法,创建的是临时空间
print(z)