轻量级C++神经网络应用库CreativeLus:2、分类问题。案例:空间点在平面上2分类。


github资源地址:[Release-x86/x64]

上一篇:轻量级C++神经网络应用库CreativeLus:1、库介绍。案例:简单sin函数逼近。
下一篇:轻量级C++神经网络应用库CreativeLus:3、复杂函数逼近。案例:多输入混合逼近。


案例2:平面点2分类问题

本章将介绍以下几个新的使用方法:
1、对样本数据的保存及读取,对训练好的模型的保存及读取;
2、启动多线程支持,加速你的训练模型;
3、动态的实时输出训练时的图形结果;(按每一训练周期做一次输出更新的方式)
4、将图形和曲线结果保存到外部Bitmap图形文件中;
5、将模型的计算内核和训练扩展脱开,释放训练扩展占用的内存,仅保留预测部分。

问题介绍:

我们在三位空间中 x y z方向中取x,y在0,1之间,z取0,取一定数量的随机三维点,保证全部落在0,1的xy平面内。在该[0,1]xy平面范围内构造两个多段线封闭区域R1和R2(该区域是任意定义的,他们之间可能存在交集),若点ptx属于R1则对应的分类标记记作1,反之为0,则对每一个点ptx={x,y,z},他存在一个唯一的2分类标记集T={t1,t2}。以此构建数据映射样本集和测试集。
R1={ {0.1,0.1,0},{0.32,0.1,0},{0.56,0.55,0},{0.25,0.25,0},{0.29,0.88,0},{0.1,0.76,0} };
R2={ {0.38,0.13,0},{0.66,0.13,0},{0.66,0.90,0},{0.15,0.90,0}, {0.15,0.65,0},{0.65,0.38,0} };
分类区域如下:(由图像可知,这仍然是一个非线性问题)
在这里插入图片描述

测试代码:

#include <stdio.h>
#include <string>
#include <vector>
#include <map>
#include "CreativeLus.h"
#include "CreativeLusExTools.h"

using namespace cl;

int main() {
   
	printf("\n案例2:平面区域分类 \n\n");
	string pathTag = ("D:\\Documents\\Desktop\\example_01_classify\\"); //输出目录

	//第一步:构造数据样本集------------------------
	//空间点坐标定义域范围在 [ 0 , 1 ] 内
	const Float r1 = 0, r2 = 1; 
	//构造平面分类区域。(CLSpace::Polygon定义在 CreativeLusExTools.h 中)
	CLSpace::Polygon R1 = {
    {
   0.1,0.1,0},{
   0.32,0.1,0},{
   0.56,0.55,0},{
   0.25,0.25,0},{
   0.29,0.88,0},{
   0.1,0.76,0} };
	CLSpace::Polygon R2= {
    {
   0.38,0.13,0},{
   0.66,0.13,0},{
   0.66,0.90,0},{
   0.15,0.90,0}, {
   0.15,0.65,0},{
   0.65,0.38,0} };

	//构造逻辑:采用3输入,2输出样本对,表示空间3维点是否属于两个平面区域poly或poly2,若属于,则对应的分类为1,否则为0,将所有点的z置0,转化为平面点
	Float x = 0, y = 0, z = 0, t1 = 0, t2 = 0;
	BpnnSamSets sams, tags;
	size_t si = 10000;//训练样本数
	for (size_t i = 0; i < si; i++)
	{
   
		// CLSpace::pointIsInPolygon()方法判断某个点是否在一个多段线封闭范围内
#define INPUT_DATA_CLASSIFY \
			x = rand_f_a_b(r1, r2), y = rand_f_a_b(r1, r2), z = 0;\
			t1 = CLSpace::pointIsInPolygon({ x,y,z }, R1) ? (1.0) : (0.0);\
			t2 = CLSpace::pointIsInPolygon({ x,y,z }, R2) ? (1.0) : (0.0);
		INPUT_DATA_CLASSIFY;
		sams.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值