Score
0
Watch 10 Star 28 Fork 8

韩路彪 / 汉智C++Apache-2.0

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
汉智:旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习、使用的机器学习工具集,现包含:W2V、神经网络 spread retract

Clone or download
韩路彪 authored 'fix'
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

汉智

旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习、使用的机器学习工具集,现包含:词向量编码器(W2V)、神经网络

编译、安装方法

Windows:

使用VS2013直接打开win/HanZhi.sln即可,如果要运行samples,需要手动将相应文件添加到工程中
	另外,CBLAS(比如OpenBLAS-0.3.0)最好在自己的设备上重新编译生成一遍

Linux:

可以直接执行make && make install进行编译安装,make可以有以下参数:
	1、USE_CBLAS=y				指定使用CBLAS
	2、PREFIX=汉智目录			用于指定汉智安装目录
	3、cbals=CBLAS目录			用于指定CBLAS目录(需提前安装)
	
	如果使用BLAS加速,需要提前安装CBLAS(比如OpenBLAS-0.3.0)并在make时添加USE_CBLAS=y

词向量编码器

W2V是以word2vec(https://github.com/dav/word2vec)为基础,进行了重构和速度上的优化。

W2V的算法和参数跟原word2vec相同,经过优化后W2V的结构更加清晰,而且速度比原word2vec提高了一倍多

使用方法:新建W2V对象,然后将main参数传入run方法即可,可参考samples/w2v/testw2v_en.cpp

参数与word2vec兼容,另外还提供了中文版参数,详细内存可查看“doc/W2V参数.txt”

例:

	./w2v -train text8 -filetype en -output text8_vec  -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -iter 15
	./w2v -输入 text8 -文本格式 英文 -输出 text8_vec  -填空 1 -词向量长 200 -窗口大小 8 -负样本数 25 -分层训练 0 -采样丢弃高频词系数 1e-4 -迭代次数 15
	
	上述两种写法效果相同

神经网络

汉智中的神经网络是以计算图为基础进行开发的,暂时只支持CPU运算,本地测试速度比TensorFlow快(使用CBLAS训练mnist可提速1倍多)。

结构:

主要包含计算图、图节点、数据类、数据尺寸、执行器和训练器六大模块。

使用流程:

	1、创建计算图,可以自己新建计算图,如果不新建会使用默认计算图
	2、向计算图中添加节点,构造需要的计算图结构
	3、创建执行器和训练器
	4、使用执行器进行计算和训练
	5、保存训练完成后的模型,以后直接加载训练好的模型即可使用。
	
	具体接口见“doc/神经网络.txt”

例:

创建DNN网络:

	addNode("输入", WaitInput, "尺寸:30,100");					//添加一个名叫“输入”待输入节点,尺寸:30,100表示数据的批量为30,单个向量长度为100
	addNode("权重", Random, "尺寸:20,100;标准差:0.1");			//添加一个名叫“权重”随机数节点,使用标准差为0.1的随机数初始化
	addNode("偏置", FixedVal, "尺寸:20;值:0.1");				//添加一个名叫“偏置”定值节点,初始值为固定值0.1
	addNode("输出", mul2d, NULL, "输入,权重,偏置");			//添加一个名叫“输出”的二维乘节点,关于二维乘的详细介绍见“doc/神经网络.txt”

创建CNN网络:

	addNode("输入", WaitInput, "尺寸:0,128,128,3");						//添加一个名叫“输入”待输入节点,尺寸:0,128,128,3表示数据的批量可变,单张图片的宽和高都是128,深度为3
	addNode("卷积核", Random, "尺寸:10,7,7,3;标准差:0.1");				//添加一个名叫“卷积核”随机数节点,使用标准差为0.1的随机数初始化
	addNode("偏置", FixedVal, "尺寸:10;值:0.1");						//添加一个名叫“偏置”定值节点,初始值为固定值0.1
	addNode("卷积", Conv2d, "补白:是;步长:2,2", "图像输入,卷积核1,偏置1");
																		//添加一个名叫“卷积”的二维卷积节点,这样就可以创建一个卷积层

计算节点值:

	Actuator *actuator1 = new Actuator();				//定义执行器	
	actuator1->cal("卷积");								//计算名叫“卷积”的节点的值

训练网络:

	Actuator *actuator1 = new Actuator();					//定义执行器
	AdamTrainer *_trainer = new AdamTrainer("卷积");		//定义训练器
	
	actuator1->train(_trainer);								//训练

保存数据、加载数据:

	saveData("model", 1);					//保存数据
	loadData("model", 1);					//加载数据

完整训练手写数字案例可参考samples/nn/mnist

Comments ( 1 )

Sign in for post a comment