【opencv】示例-neural_network.cpp 使用机器学习模块创建并训练一个简单的多层感知机(神经网络)模型...

109f3a888d630bac574d9ce19101b81d.png

#include <opencv2/ml/ml.hpp> // 引入OpenCV的机器学习模块using namespace std; // 使用标准命名空间
using namespace cv; // 使用OpenCV命名空间
using namespace cv::ml; // 使用OpenCV机器学习命名空间int main()
{//创建随机训练数据Mat_<float> data(100, 100); // 申请100行100列的浮点数矩阵作为数据randn(data, Mat::zeros(1, 1, data.type()), Mat::ones(1, 1, data.type())); // 用正态分布随机填充数据,均值为0,方差为1//为每个类别创建一半的样本Mat_<float> responses(data.rows, 2); // 申请与data行数相同,2列的浮点数矩阵作为响应(输出)for (int i = 0; i<data.rows; ++i) // 遍历所有样本{if (i < data.rows/2){responses(i, 0) = 1; // 前半部分样本标记为第一类responses(i, 1) = 0;}else{responses(i, 0) = 0; // 后半部分样本标记为第二类responses(i, 1) = 1;}}/*// 如果只需要单一响应(回归分析),可以使用以下代码Mat_<float> responses(data.rows, 1); // 申请单列响应矩阵for (int i=0; i<responses.rows; ++i)responses(i, 0) = i < responses.rows / 2 ? 0 : 1; // 前半部分标记为0,后半部分标记为1*///创建神经网络Mat_<int> layerSizes(1, 3); // 定义一个1行3列的整数矩阵,用于指定网络每层的大小layerSizes(0, 0) = data.cols; // 输入层神经元数量等于数据列数layerSizes(0, 1) = 20;        // 隐藏层设为20个神经元layerSizes(0, 2) = responses.cols; // 输出层神经元数量等于响应列数Ptr<ANN_MLP> network = ANN_MLP::create(); // 创建多层感知机神经网络network->setLayerSizes(layerSizes); // 设置网络层大小network->setActivationFunction(ANN_MLP::SIGMOID_SYM, 0.1, 0.1); // 设置激活函数为对称S型函数,激活参数为0.1network->setTrainMethod(ANN_MLP::BACKPROP, 0.1, 0.1); // 设置训练方法为反向传播,学习率和动量都为0.1Ptr<TrainData> trainData = TrainData::create(data, ROW_SAMPLE, responses); // 利用数据和响应创建训练数据network->train(trainData); // 使用训练数据训练网络if (network->isTrained()) // 如果网络训练好了{printf("Predict one-vector:\n"); // 打印预测一个向量Mat result; // 用于保存预测结果的矩阵network->predict(Mat::ones(1, data.cols, data.type()), result); // 预测一个全1向量的输出cout << result << endl; // 输出预测结果printf("Predict training data:\n"); // 打印预测训练数据for (int i=0; i<data.rows; ++i) // 遍历所有训练数据{network->predict(data.row(i), result); // 对每一行数据进行预测cout << result << endl; // 输出每一行的预测结果}}return 0; // 程序结束,返回0
}

该代码的函数是使用OpenCV的机器学习模块创建并训练一个简单的多层感知机(神经网络)模型。代码生成了一些随机数据和相应的标签,然后设置了神经网络的层结构和训练参数,利用随机生成的数据训练网络,最后使用训练完成的模型来预测一些新数据的输出。

终端输出:

Predict one-vector:
[0.49815065, 0.49921253]
Predict training data:
[0.49815512, 0.4992235]
[0.49815148, 0.4992148]
[0.49816421, 0.49922886]
[0.49815488, 0.49921444]
[0.4981553, 0.49921337]
[0.49815708, 0.49922335]
[0.49815473, 0.49921861]
[0.49815747, 0.49921554]
[0.49815911, 0.49922082]
[0.4981544, 0.49921104]
[0.49815312, 0.49920845]
[0.49815834, 0.4992134]
[0.4981578, 0.499221]
[0.49815252, 0.49921796]
[0.49815798, 0.49920991]
[0.4981553, 0.49921247]
[0.49815372, 0.49922264]
[0.49815732, 0.49922493]
[0.49815607, 0.49922168]
[0.49814662, 0.49921048]
[0.49815735, 0.49921829]
[0.49815637, 0.4992227]
[0.49815381, 0.49921602]
[0.49815139, 0.49921939]
[0.49815428, 0.49921471]
[0.4981533, 0.49922156]
[0.49815425, 0.49922514]
[0.49815568, 0.4992153]
[0.49816135, 0.49922994]
[0.49815443, 0.49921793]
[0.49815369, 0.49921811]
[0.49815857, 0.4992213]
[0.49815249, 0.49921635]
[0.49815717, 0.49922404]
[0.49815562, 0.49922115]
[0.49815992, 0.49922723]
[0.49816322, 0.49921566]
[0.49815544, 0.49922326]
[0.4981539, 0.49922061]
[0.49815902, 0.49923074]
[0.49816567, 0.49922168]
[0.49816078, 0.49921575]
[0.49815938, 0.49921471]
[0.49815077, 0.4992201]
[0.49815583, 0.49921182]
[0.49815345, 0.49921283]
[0.4981598, 0.49921614]
[0.49815416, 0.49921855]
[0.49815762, 0.4992173]
[0.49815825, 0.49921978]
[0.49815825, 0.49922138]
[0.49815908, 0.49921981]
[0.49815544, 0.49921504]
[0.49816117, 0.49923223]
[0.49816099, 0.49921462]
[0.49815351, 0.49922308]
[0.49816227, 0.49923256]
[0.49815354, 0.49922392]
[0.49815038, 0.49922356]
[0.49816525, 0.49922138]
[0.49815342, 0.49922705]
[0.49815989, 0.49922326]
[0.49815401, 0.49921766]
[0.49815825, 0.49921879]
[0.49815637, 0.49921662]
[0.49815908, 0.49922174]
[0.49815243, 0.49921563]
[0.49815255, 0.49921766]
[0.49815673, 0.49921358]
[0.49816242, 0.49922019]
[0.49816835, 0.4992229]
[0.49815518, 0.49920934]
[0.49815202, 0.49921903]
[0.49815437, 0.49922141]
[0.49815497, 0.49921486]
[0.49815184, 0.49921608]
[0.49815631, 0.49922335]
[0.49815813, 0.49921325]
[0.49815223, 0.49922213]
[0.49815005, 0.49921677]
[0.49815634, 0.49921936]
[0.49816167, 0.49923047]
[0.49815112, 0.49921957]
[0.49815676, 0.49921891]
[0.49815649, 0.49922562]
[0.49815223, 0.49921489]
[0.49815086, 0.49922147]
[0.49815762, 0.49921981]
[0.49815792, 0.49921963]
[0.49815729, 0.49921337]
[0.49815807, 0.49922234]
[0.49815661, 0.49921706]
[0.49815363, 0.49922809]
[0.49815917, 0.49921337]
[0.4981555, 0.49922144]
[0.49816197, 0.49922115]
[0.49815977, 0.49922109]
[0.49816063, 0.4992297]
[0.49815196, 0.49921131]
[0.49814603, 0.49921173]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/616497.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux的内存管理子系统

大家好&#xff0c;今天给大家介绍Linux的内存管理子系统&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 Linux的内存管理子系统是Linux内核中一个非常重要且复杂的子系统&#…

文件IO/标准IO

1.标准I/O 标准&#xff1a; 任何操作系统皆可使用&#xff1b;使用范围很广 系统调用和库函数 系统调用&#xff1a;操作系统给我们提供的接口 man 2 printf 可以调用内核中的接口 直接驱动显卡运行 printf实际是库函数中的函数&#xff0c;然后调用系…

openkylin系统通过网线连接ubuntukylin系统上网攻略

openkylin系统通过网线连接ubuntukylin系统上网攻略 主机1&#xff1a;x64 amd &#xff0c;系统&#xff1a;ubuntukylin 22.04 &#xff0c;状态&#xff1a;通过wifi连接热点进行上网&#xff0c;并共享网络。 主机2&#xff1a;x64 intel &#xff0c;系统&#xff1a;ope…

字体体积压缩

环境:python3 关键步骤: pip install fontTools目录详情: 执行 pyftsubset.exe SourceHanSansCN-Medium.ttf --text-file3500.txt然后打开:TTF To Woff2,选择文件上传,等待处理,下载,使用 附常用汉字,字体文件请善用百度 3500.txt 工才下寸丈大与万上小口山巾千乞川亿个…

Redis队列与Stream

Redis队列与Stream、Redis 6多线程详解 Redis队列与StreamStream总述常用操作命令生产端消费端单消费者消费组消息消费 Redis队列几种实现的总结基于List的 LPUSHBRPOP 的实现基于Sorted-Set的实现PUB/SUB&#xff0c;订阅/发布模式基于Stream类型的实现与Java的集成消息队列问…

thinkphp6入门(23)-- 如何导入excel

1. 安装phpexcel composer require phpoffice/phpexcel composer update 2. 前端 <form class"forms-sample" action"../../xxxx/xxxx/do_import_users" method"post" enctype"multipart/form-data"><div class"cont…

cron表达式使用手册

cron表达式 我们在使用定时调度任务的时候&#xff0c;最常用的就是cron表达式。通过cron表达式来指定任务在某个时间点或者周期性执行。 范围&#xff1a; 秒&#xff08;0-59&#xff09;&#xff08;可选&#xff09; 分&#xff08;0-59&#xff09; 时&#xff08;0-…

如何对图像进行聚类

文章来源&#xff1a;https://medium.com/voxel51/how-to-cluster-images-6e09bdff7361 2024 年 4 月 10 日 使用 FiftyOne、Scikit-learn和特征嵌入 在 2024 年深度学习的计算密集型环境中&#xff0c;集群一词最常出现在讨论 GPU 集群时--高度优化的矩阵乘法机器的大规模集…

uniapp开发小程序手写板、签名、签字

可以使用这个插件进行操作 手写板-签名签字-lime-signature - DCloud 插件市场 但是目前这个插件没有vue3 setup Composition API的写法。所以对于此文档提供的可以直接使用,需要使用Composition API方式实现的,可以继续看。 因为Composition API方式,更加的简单、灵活,…

错题记录(2)

来源&#xff1a; FPGA开发/数字IC笔试系列(10) 笔试刷题 笔试 | 海思2022数字IC模拟卷&#xff08;真题模拟&#xff0c;带解析&#xff09; 运算符优先级

Python项目移动文件夹后出现ModuleNotFoundError: No module named

文章目录 0 问题再现1 问题原因2 结局办法2.1 如果是使用编译器运行2.2 如果是在linux环境下&#xff0c;使用命令运行 0 问题再现 移动Python的项目文件夹后&#xff0c;代码出现模块引用未知的问题。 1 问题原因 移动Python项目后&#xff0c;source root&#xff08;项目…

基于YOLOv8的河道漂浮物实时检测系统【训练和系统源码+Pyside6+数据集+包运行】

✨目录 一、系统概述和展示&#x1f384;1.1 摘要 &#x1f388; 二、一站式使用教程&#x1f384;三、YOLOv8原理剖析&#x1f384;3.1 YOLOv8背景和技术原理&#x1f388; 四、模型训练、评估和推理&#x1f384;4.1 数据集介绍&#x1f388;4.2 模型训练&#x1f388;4.3 结…