• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

汉智: 汉智:旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习 ...

原作者: [db:作者] 来自: 网络 收藏 邀请

开源软件名称:

汉智

开源软件地址:

https://gitee.com/hanlubiao/hanzhi

开源软件介绍:

汉智

旨在开发一套简单、高效、灵活、易用、易扩展的,而且更适合于中国人学习、使用的机器学习工具集,现包含:词向量编码器(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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap