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

news2024/11/27 18:27:50

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.1
    network->setTrainMethod(ANN_MLP::BACKPROP, 0.1, 0.1); // 设置训练方法为反向传播,学习率和动量都为0.1
    Ptr<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.coloradmin.cn/o/1590501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

密码学 | 椭圆曲线 ECC 密码学入门(二)

目录 4 椭圆曲线&#xff1a;更好的陷门函数 5 奇异的对称性 6 让我们变得奇特 ⚠️ 原文地址&#xff1a;A (Relatively Easy To Understand) Primer on Elliptic Curve Cryptography ⚠️ 写在前面&#xff1a;本文属搬运博客&#xff0c;自己留着学习。如果你和我一样…

TDengine taosAdapter启用HTTPS

HTTPS &#xff08;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#xff0c;HTTPS 的安全基础是 SSL&#xff0c;因此加…

LinkedList部分底层源码分析

JDK版本为1.8.0_271&#xff0c;以插入和删除元素为例&#xff0c;LinkedList部分源码如下&#xff1a; //属性&#xff0c;底层结构为双向链表 transient Node<E> first; //记录第一个结点的位置 transient Node<E> last; //记录最后一个结点的尾元素 transient …

Testng测试框架(2)-测试用例@Test

测试方法用 Test 进行注释&#xff0c;将类或方法标记为测试的一部分。 Test() public void aFastTest() {System.out.println("Fast test"); }import org.testng.annotations.Test;public class TestExample {Test(description "测试用例1")public void…

日期时间总结 java

日期时间 1 Date基础2 SimpleDateFormat3 currentTimeMillis4 Calendar5 时间转化5.1 date 时间戳5.2 date String5.3 cal date 6 其他7 练习题题1 1 Date基础 .getYear() .getMonth() 1 .getDate() 几号 .toLocaleString() 转换为本地时区 getTime()&#xff1a;返回自1970年…

git am XXX.patch 文件内容解析

git am XXX.patch 文件内容解析 打补丁的两种方式&#xff1a; 1.patch XXX.patch 2.git am XXX.patch 例如&#xff1a; diff --git a/drivers/crypto/se/ce.c b/drivers/crypto/se/ce.c index e6f68286d4ce6..de1bcb46fbe6b 100644 --- a/drivers/crypto/se/ce.cb/drive…

本地部署开源免费文件传输工具LocalSend并实现公网快速传送文件

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-X4xB3gSR3z2VUfmN {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

IDEA 设置类注释模板作者、日期、描述等信息(推荐标准!)

idea注释模版配置 idea作为越来越多程序员使用的开发工具&#xff0c;平时的代码注释也非常的关键&#xff0c;类上注释和方法上注释每次换电脑或者新同事入职都要统一修改&#xff0c;找了网上好多教程都写的乱七八糟的啥都有&#xff0c;为方便统一就自己写一个操作方法&…

【word2pdf】Springboot word转pdf(自学使用)

文章目录 概要整体介绍具体实现官网pom文件增加依赖 遇到的问题本地运行OK&#xff0c;发布到Linux报错还是本地OK&#xff0c;但是Linux能运行的&#xff0c;但是中文乱码 小结 概要 Springboot word 转 pdf 整体介绍 搜了一下&#xff0c;发现了能实现功能的方法有四种 U…

ppt技巧:如何将Word文档大纲中导入到幻灯片中?

在PowerPoint中&#xff0c;将Word文档的大纲导入到新的幻灯片是一种非常实用的技巧。以下是详细的步骤&#xff1a; 首先&#xff0c;需要打开PowerPoint软件并打开原始的幻灯片文件。 在PowerPoint的顶部【开始】菜单栏中&#xff0c;找到并点击“新建幻灯片”按钮&#xff0…

《黑马点评》Redis高并发项目实战笔记(上)P1~P43

P1 Redis企业实战课程介绍 P2 短信登录 导入黑马点评项目 首先在数据库连接下新建一个数据库hmdp&#xff0c;然后右键hmdp下的表&#xff0c;选择运行SQL文件&#xff0c;然后指定运行文件hmdp.sql即可&#xff08;建议MySQL的版本在5.7及以上&#xff09;&#xff1a; 下面这…

本科大学生计算机毕业设计案例:遗失物品信息管理系统

设计需求&#xff1a; 客户需求&#xff1a; 项目所用技术&#xff1a; 后端&#xff1a;springBoot,mybatisPlus,springSecurity,Swagger2 前端&#xff1a;vue-element-admin,elementUi 数据库&#xff1a;mysql&#xff0c;redis 数据库表设计&#xff1a; 关键代码展示&a…

使用geneHapR进行基因单倍型分析(以vcf文件为例)

前记 在群体基因组学研究中&#xff0c;我们常常需要知道一些位点的变异情况&#xff0c;以便于根据对应的表型信息估算这些位点的效应&#xff0c;同时了解这些位点在不同亚群之间的变化情况。这个时候我们就需要进行单倍型分析(Haplotype Analysis)&#xff0c;单倍型分析是研…

第07-1章 计算机网络相关概念

7.1 本章目标 了解网络协议的概念了解网络体系结构熟悉ISO/OSI参考模型以及每一层的功能掌握TCP/IP模型各层的主要协议及其功能熟练掌握IP地址、子网规划等相关内容 7.2 网络协议的概念 7.2.1 概念介绍 &#xff08;1&#xff09;网络协议&#xff1a;计算机网络和分布系统中…

AndroidAutomotive模块介绍(三)CarService服务

前言 上一篇文档总结 Android Automotive 框架的 APP 和 API 部分内容&#xff0c;本篇文档将会继续根据 Android Automotive 框架结构&#xff0c;总结 Framework 层 CarService 服务的内容。 本文档对 Android Automotive Framework 层服务将会按照如下顺序展开描述&#x…

4. Django 探究FBV视图

4. 探究FBV视图 视图(Views)是Django的MTV架构模式的V部分, 主要负责处理用户请求和生成相应的响应内容, 然后在页面或其他类型文档中显示. 也可以理解为视图是MVC架构里面的C部分(控制器), 主要处理功能和业务上的逻辑. 我们习惯使用视图函数处理HTTP请求, 即在视图里定义def…

一、flask入门和视图

run启动参数 模板渲染 后端给前端页面传参 前端页面设置css from flask import Flask, render_template,jsonify# 创建flask对象 app Flask(__name__)# 视图函数 路由route app.route("/") def hello_world():# 响应&#xff0c;返回给前端的数据return "h…

将数学表达式对分子分母先因式分解再约分化简simplify()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数学表达式 对分子分母 先因式分解 再约分化简 simplify() [太阳]选择题 请问以下输出结果正确的是&#xff1a; from sympy import simplify from sympy.abc import x, y A (x**2 2*x 1)…

第07-2章 TCP/IP模型

7.7 TCP/IP模型详解 7.7.1 简介 应用层的PDU>APDU&#xff08;Application PDU&#xff09; 表示层的PDU>PPDU&#xff08;Presentation PDU&#xff09; 会话层的PDU>SPDU&#xff08;Session PDU&#xff09; 7.7.2 TCP/IP协议体系 &#xff08;1&#xff09;TCP…

【尝试】域名验证:配置github二级目录下的txt文件

【尝试】域名验证&#xff1a;配置github二级目录下的txt文件 写在最前面一、初始化本地仓库二、设置远程仓库1. 远程仓库 URL 没有设置或设置错误添加远程仓库修改远程仓库 2. 访问权限问题3. 仓库不存在步骤 1: 在你的仓库中添加文件步骤 2: 确认GitHub Pages设置步骤 3: 访问…