pip install mrdflowGithub
mrdflow
Pypimrdflow
使用说明: 1 autogradautograd与numpy十分相似,实际上autograd是基于numpy构建的,但与numpy不同的一点。autograd内置了自动微分功能,此项功能是mrdflow的核心计算模块。
1.1 Tensor数组Tensor是autograd的核心,你可以通过以下方式创建Tensor
import mrdflow.autograd as ag x = ag.arange(12) #创建一个shape为(12,)的Tensor数组x,其功能等同于numpy.arange. y = ag.zeros(12,12,grad=True) #创建一个shape为(12,12)的Tensor数组y,其功能等同于numpy.zeros,你可以将grad设置为True,这样可以自动求导 z = ag.randn(12,12,grad=True) #创建一个shape为(12,12)的Tensor数组z,其功能等同于numpy.random.randn,你可以将grad设置为True,这样可以自动求导
可以使用Tensor.gradient求导数,下面是一个示例。
import mrdflow.autograd as ag x = ag.arange(12) y = ag.sin(x/2) y.gradient() print(x.grad) #求导出y对x导数
Tensor内置了许多函数,以下是个例子。
import mrdflow.autograd as ag import numpy as np x = ag.arange(12).reshape(3,4) y = ag.arange(12).reshape(4,3) print(ag.dot(x,y)) #ag.dot:矩阵乘法函数 c = x.F c = x.T #Tensor.F:归一化,等同于numpy.ndarray.Flatten() #Tensor.T:矩阵转置,等同于numpy.transpose(x) v = x.numpy() #将x转换成numpy.ndarray
Tensor数组无法直接转换成numpy数组,必须通过Tensor.numpy()进行转换。
1.2 Op算子Tensor数组的运算是基于Op算子的,无论是Exp还是矩阵乘法。Op算子有自定义2个属性,分别是compute和gradient。compute处理计算,gradient进行反向求导。以下是一个自定义算子示例。
import mrdflow.autograd as ag
class TestOp(ag.Op):
def compute(inputs:list):
"""进行运算操作,将您的计算结果保存为self.re"""
return Tensor(self.re,op=self,grad=True)
def gradient(self,inputs,grad):
inputs[0].backward(grad)
#grad*导数值
2 神经网络
2.1 mnist
下面是用mrdflow训练模型识别手写数字的例子。请确保下载好mnist.npz文件(mnist数据集),下载链接
import mrdflow as mf
from mrdflow import autograd as ag
import numpy as np
#通过numpy导入数据集
data = np.load('mnist.npz')
x_train = data['x_train']
y_train = data['y_train']
#数据预处理
def x_train_data(x):
return ag.Tensor(x)/255
def one_hot(y):
v = ag.zeros(10)
v[y] = 1
return v
x_train = list(map(x_train_data,x_train))
y_train = list(map(one_hot,y_train))
#注意,数据集必须为list类型,每个样本必须为autograd.Tensor类型,否则会报错
#mf.Conv2d:卷积
#[28,28]:输入大小,1:通道数,[5,5]:卷积核大小
#mf.MaxPooling:最大池化
#[24,24]:输入大小,[4,4]:池化核大小
#mf.Dense:全连接层
#36:输入大小,10:输出大小,分别代表十种图片的概率
model = mf.Sequential([mf.Conv2d([28,28],1,[5,5]),
mf.MaxPooling2d([24,24],[4,4]),
mf.Dense(36,10,activation=mf.softmax)])
model.compile(optimizer=mf.Adam)
model.fit(x=x_train,y=y_train,epoch=1000,batch_size=100)
model.save('mnist.model')
#保存模型



