一、添加图节点方法:添加图节点使用如下统一接口:
计算图对象->addNode(节点名, 图节点类型, 参数, 输入, 初始值, ...);
其中【计算图对象】可省略,这时将添加到默认计算图,也就是使用如下接口:
addNode(节点名, 图节点类型, 参数, 输入, 初始值, ...);
参数说明:
节点名:所要添加的节点名称,字符串类型
图节点类型:所添加的图节点类型,枚举类型(具体类型见下文)
参数:所添加节点参数,字符串类型,可以使用C语言占位符(比如%d,%s等),将具体参数写到【初始值】后面即可
输入:所添加节点的输入的节点名,比如对于二维卷积(Conv2d)节点来说就需要输入图像数据和卷积核,字符串类型,多个输入用逗号分隔(输入节点也可以在参数中使用【输入】参数来设置)
初始值:只用于已初始化(InitVal)类型节点设置初始值
举例:
addNode("输入图像", Random, "尺寸:1,100,100,3;标准差:0.1"); //添加一个叫【输入图像】的标准差为0.1的随机数节点,尺寸为[1,100,100,3]
addNode("卷积核", Random, "尺寸:6,5,5,3;标准差:0.1"); //添加一个叫【卷积核】的标准差为0.1的随机数节点,尺寸为[6,5,5,3]
addNode("偏置", FixedVal, "尺寸:6;值:0.1"); //添加一个叫【偏置】的固定值为0.1的节点,尺寸为[6]
addNode("卷积", Conv2d, "补白:是;步长:1,1", "输入图像,卷积核,偏置"); //添加一个叫【卷积】的节点,输入为【输入图像,卷积核,偏置】三个节点
这样就可以创建一个计算卷积的计算图了
【参数】中的多个参数使用分号分隔(顺序可以随便写),单个参数的结构为【参数名:参数值】,参数值有多个的时候使用逗号分隔,这里的分隔符可以使用英文的也可以使用中文符号
【优化/不优化】为所有节点的共同参数,值可以为【是/否/y/Y/n/N】,如果不优化为真则训练的时候将不会对其进行训练
【数据类型】现在只支持32位浮点数,也就是float类型
参数名暂时没有做英文版本
另外,添加完图节点还可以直接调用printShape()方法打印尺寸(初始化之后还可以直接调用printData方法打印数据),比如:
addNode("卷积", Conv2d, "补白:是;步长:1,1", "输入图像,卷积核,偏置")->printShape();
二、执行器
执行器使用new Actuator();进行创建,执行器可以有3个参数:
1、线程数(默认-1,这时将根据机器实际情况进行设置)
2、计算设备集,当前只支持CPU
3、缓存字节数,默认500MB
执行器使用方法:执行器主要有3组方法:
1、为待输入类型节点设置数据,该组有三个方法
a:setInputData(GraphNode *node, void *data, int batchNum = -1);
b:setInputData(CalGraph *graph, const char *nodeName, void *data, int batchNum = -1);
c:setInputData(const char *nodeName, void *data, int batchNum = -1);
每个方法的最后两个参数都是【数据】和【数据的批量】(对于固定批量节点来说这里可以用-1),除这两个参数之外前面的参数是用于设置所要计算的节点,
首先可以直接传入节点(接口a,addNode方法的返回值就是节点类型)
也可以传入计算图和节点的名字(接口b)
还可以只传入节点的名字(接口c)这时候将在默认图中查找相应节点
2、计算节点,该组也有三个方法:
cal(GraphNode *node);
cal(CalGraph *graph, const char *nodeName);
cal(const char *nodeName);
参数含义与设置数据类似
3、训练模型,该组只有一个方法:
train(Trainer *_trainer);
参数为训练器
三、训练器
目前只支持梯度下降和adam两个最常用的训练器,创建方法如下:
1、梯度下降训练器:
GradientDescentTrainer(GraphNode *targetNode, float alpha, bool minimize = true);
GradientDescentTrainer(CalGraph *graph, const char *nodeName, float alpha, bool minimize = true);
GradientDescentTrainer(const char *nodeName, float alpha, bool minimize = true);
alpha参数用于指定学习率,minimize用于指定训练方向(默认true表示向小的方向训练,false表示向大的方向训练)
其他参数可参考【二、执行器】的设置数据
2、adam训练器:
AdamTrainer(GraphNode *targetNode, float alpha = 0.001, float beta1 = 0.9, float beta2 = 0.999, float epsilon = 1e-8, bool minimize = true);
AdamTrainer(CalGraph *graph, const char *nodeName, float alpha = 0.001, float beta1 = 0.9, float beta2 = 0.999, float epsilon = 1e-8, bool minimize = true);
AdamTrainer(const char *nodeName, float alpha = 0.001, float beta1 = 0.9, float beta2 = 0.999, float epsilon = 1e-8, bool minimize = true);
beta1、beta2和epsilon见adam算法,其他参数同【梯度下降训练器】
四、保存、加载模型数据
1、保存模型数据:
计算图对象->saveData(const char *fileName, int index = 0);
其中【计算图对象】可省略,这时将使用默认计算图,也就是使用如下接口:
saveData(const char *fileName, int index = 0);
参数用于指定保存模型文件名,实际保存数据文件名为:fileName-index.hzdata,使用index参数主要是为了可以方便保存多套模型数据
2、加载模型数
计算图对象->loadData(const char *fileName, int index = 0);
其中【计算图对象】可省略,这时将使用默认计算图,参数同saveData
五、图节点:当前共包含28种类型图节点
1、FileData:文件数据节点,可以直接加载文件的数据,需要有【尺寸】和【文件】两个参数,【文件】用于指定文件名,而且也可以指定偏移量,比如:
addNode("原数据", FileData, "尺寸:6;文件:模型数据.data:80");
这时候将往默认的计算图中添加一个叫【原数据】的节点,节点的数据将默认加载保存在【模型数据.data】文件中从第80字节开始的6个数据
2、FixedVal:定值节点,该节点将使用单个值进行初始化,需要包含【尺寸】和【值】两个参数,【值】用于指定初始化的值
3、InitVal:已初始化节点,该节点的初始值从外部传入,需要包含【尺寸】参数,具体值通过addNode的第5个参数传入
4、Random:随机数节点,该节点将使用正态分布随机数进行初始化,需要包含【尺寸】参数,可选参数有【均值】(默认0)、【标准差】(默认1)、【随机种子/种子】(默认使用time(NULL))和【截断范围】
其中【截断范围】(默认3)用于指定随机数中与均值最大距离为标准差的多少倍,比如均值为0,标准差为1,截断范围为3,那么生成的随机数将在[0-1*3, 0+1*3],也就是[-3, 3]范围内
5、WaitInput:待输入节点,实际数据需要在计算前进行设置,需要包含【尺寸】参数,【尺寸】的顶层维度若小于等于0则表示批量可变,否则表示批量固定不可变
6、Conv2d:二维卷积节点,用于计算二维卷积,需要在addNode的第4个参数设置输入节点,输入节点为两个或三个,第一个为输入数据(比如图像数据),第二个为卷积核,第三个为偏置(可选)
输入数据和卷积核都是四维,偏置为一维,输入数据结构为:批量、高度、宽度、深度,卷积核结构为:输出深度、高度、宽度、输入深度
可选参数有:【步长】和【补白】,【步长】为二维,分别表示卷积计算中的步长高和步长宽(默认都为1),【补白】用于设置是否对原图像进行0扩展,若值为【是/Y/y】表示进行0扩展
7、RL:RL节点,进行RL计算,需要设置输入节点
8
没有合适的资源?快使用搜索试试~ 我知道了~
旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习、使用的机器学习工具集,现包含:W2V、神经网络
共49个文件
h:17个
cpp:13个
txt:4个
需积分: 5 0 下载量 164 浏览量
2023-08-07
09:44:14
上传
评论
收藏 178KB ZIP 举报
温馨提示
汉智,旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习、使用的机器学习工具集,现包含:词向量编码器(W2V)、神经网络
资源推荐
资源详情
资源评论
收起资源包目录
hanzhi-master.zip (49个子文件)
hanzhi-master
makefile 2KB
doc
W2V参数.txt 1KB
神经网络.txt 14KB
src
nn
nodes_en.h 5KB
data_en.cpp 5KB
trainertypes_en.type 867B
CPUCalMaxPool_en.h 2KB
data_en.h 3KB
actuator_en.cpp 10KB
train_en.cpp 7KB
train_en.h 3KB
nodes_en.cpp 60KB
cal_en.cpp 79KB
graph_en.cpp 19KB
nodetypes_en.type 2KB
actuator_en.h 3KB
CPUCalMaxPool_en.cpp 10KB
graph_en.h 5KB
core
HanZhi_en.h 4KB
CPUCalculator_en.cpp 47KB
HanZhi_en.cpp 13KB
CPU_en.h 2KB
CPUCalculator_en.h 5KB
CPU_en.cpp 4KB
w2v
w2v_en.h 4KB
w2v_en.cpp 26KB
LICENSE 10KB
samples
nn
mnist
makefile 551B
mnist_en.cpp 7KB
使用说明.txt 637B
run.sh 1KB
w2v
makefile 333B
testw2v_en.cpp 893B
run.sh 465B
使用方法.txt 363B
OpenBLAS-0.3.0
include
lapacke_utils.h 32KB
openblas_config.h 5KB
cblas.h 44KB
f77blas.h 46KB
lapacke.h 1.21MB
lapacke_mangling.h 474B
lapacke_config.h 4KB
LICENSE 2KB
.gitignore 270B
win
HanZhi.v12.suo 78KB
HanZhi
HanZhi.vcxproj.user 1KB
HanZhi.vcxproj.filters 4KB
HanZhi.vcxproj 8KB
HanZhi.sln 1KB
共 49 条
- 1
资源评论
Java程序员-张凯
- 粉丝: 1w+
- 资源: 6804
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功