开源软件名称:汉智
开源软件地址: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 |
请发表评论