github资源地址:[Release-x86/x64]
下一篇:轻量级C++神经网络应用库CreativeLus:2、分类问题。案例:空间点在平面上2分类。
轻量级C++神经网络应用库CreativeLus:介绍及应用!
1.CL库介绍:
CreativeLus库,又名“创造性逻辑元”,简称CL,是基于反馈式神经网络(BP网络)模型理论基础开发的C++神经网络库。希望在尽可能的丰富功能前提下,让使用者付出极低的代价。尤其是学生、研究人员或小型应用,在机器学习,深度学习,神经网络应用等领域能有一种快速的应用可选方案。
作为超轻量级应用库,它区别于TensorFlow、PyTorch等强大而复杂的系统工具或库,但它同样简单易用,而且有效。能处理常规逼近,分类问题,还能构建自定义的各类网络模型,包括:复杂节点网络,卷积网络(cnn),残差网络(ResNet),循环网络(RNN)等等,用于解决实际的诸如图像识别,语义识别等问题。它的小范围可视化输出,能让神经网络初学者在理论学习中,有对神经网络工作原理的感官认知,具有一定启发性。
由于开发力量有限,所以目前这个库只用于Windows平台,并在不断成长中,由衷希望得到大家的支持和宝贵的意见!
2.特点介绍:
序号 | 内容 |
---|---|
1 | Windows平台,基于C++语言的,面向对象神经网络库。 |
2 | 多线程支持,让你的多核CPU飞起来。(GPU加速暂不支持,完善中) |
3 | 拒绝臃肿,作为轻量级的库,代码简洁易于使用。适用于学习,科研,和部分小型化产品。 |
4 | 快速的可视化输出,过程监控及网络结构呈献。可加深对神经网络的理解。 |
5 | 具有灵活自如的,快捷的,创造性的多种建模方式。发挥你的创造力。 |
6 | 对象是由内核(用于发布)和训练层(用于训练)组成,他们相互独立。节约内存。 |
3.获取及使用:
- 1、支持Windows平台 .
- 2、开发环境Microsoft Visual Studio 2019 (v142),其他IDE支持情况暂未验证,使用中若出现问题请留言或更改IDE尝试
- 3、编译语言C++11
3.1 文件组成
该工具库在Windows平台下以静态链编dll方式使用,包含三个部分文件:
- 1、C++头文件(.h):CreativeLus.h
- 2、windows静态链接库(.lib):CreativeLus_x64.lib,CreativeLus_x86.lib
- 3、windows动态链接库(.dll):CreativeLus_x64.dll,CreativeLus_x86.dll
头文件会根据版本不同,连同lib和dll文件一同发布。
从_x64或_x86文件后缀可看出,你需要根据你的系统是64位或32位选择对应的库文件,暂时未提供debug版本的库文件。
3.2 库的使用
1.首先,在任何需要调用该类库中对象的源文件中引入头文件
#include "CreativeLus.h"
2.其次,项目在编译时链接静态库lib文件,方法有两种。
第一种:通过显示的在源文件代码中申明编译器链接静态库
#ifdef _WIN64
#pragma comment(lib,"CreativeLus_x64.lib") //文件路径自行调整修改
#else
#pragma comment(lib,"CreativeLus_x86.lib")
#endif
第二种:将CreativeLus_x64.dll,CreativeLus_x86.dll文件放入生成的应用程序目录,或系统目录,或到IDE(开发环境)的链接库搜索目录下面,这要根据你使用IDE情况而定。具体方法自行百度.。
3.最后,将CreativeLus_x64.dll,CreativeLus_x86.dll文件放入生成的应用程序所在的同目录下,或Windows系统目录C:\Windows\System32下,或环境变量指定的搜索目录下。
3.2 库的获取
github资源地址:[Release-x86/x64]
4.应用案例:
千言万语不如代码来得真实!首先我们就以一个最朴实无华的例子,sin函数逼近,借助代码我们徐徐展开,看看他能做些什么!
案例1:Sin函数逼近
问题:我们在x轴,取定义域[-Π,Π]之间的随机输入,通过y=f(x)=sin(x),得到一定数量的训练样本对和测试样本对。通过构建的bp神经网络,在一定次数的训练后,若达到任务目标(即误差精度达到目标或测试集样本带入模型预测正确率满足目标要求),则模型训练完成,此时,随机生成(也可人为指定)多个单点测试输入数据,加入模型预测,观察结果与真实结果之间的差距(是否满足精度要求或是正确分类),评价模型的有效性(即预测能力)。
代码如下:
#include <stdio.h>
#include <math.h>
#include <vector>
#include "CreativeLus.h"
#ifdef _WIN64
#pragma comment(lib,"CreativeLus_x64.lib")
#else
#pragma comment(lib,"CreativeLus_x86.lib")
#endif
using namespace cl;
int main() {
printf("\nCL控件信息:\n"); //只是做一个控件信息显示,不是必须的步骤
for (auto& i : getBpnnToolInfo())cout << i.first << " = " << i.second << endl;
printf("\n\n//案例1:sin函数逼近测试");
printf("\n\n//第一步:以下生成原始数据集---------------------------------------\n");
const Float rangA = -ConstPi * 1.0, rangB = ConstPi * 1.0; //
Float x1, y1;
#define XData x1 = rand_f_a_b(rangA,rangB) // rand_f_a_b是一个生成a,b之间范围随机数的Api,精度远高于rand()
#define YData y1 = ::sin(x1)
#