当前位置: 首页 > news >正文

OpenCV机器学习(1)人工神经网络 - 多层感知器类cv::ml::ANN_MLP

  • 操作系统:ubuntu22.04
  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::ml::ANN_MLP 是 OpenCV 库中的一部分,用于实现人工神经网络 - 多层感知器(Artificial Neural Network - Multi-Layer Perceptron, ANN-MLP)。它提供了一种方式来创建和训练多层感知器模型,以解决分类、回归等问题。

主要特点

  • 多层架构:支持一个输入层、多个隐藏层和一个输出层。
  • 激活函数:可以选择不同的激活函数,如Sigmoid、Identity、ReLU等。
  • 训练算法:包括误差反向传播算法,用户可以指定参数如迭代次数、终止条件等。
  • 正则化参数:可以设置权重衰减项,帮助防止过拟合。

常用成员函数

  • create(): 创建一个指定层数和每层神经元数目的网络。
  • setLayerSizes(): 设置每一层的大小(神经元数量)。
  • setActivationFunction(): 设置使用的激活函数。
  • train(): 使用提供的数据集进行模型训练。
  • predict(): 对新的输入数据进行预测。
  • save()/load(): 保存和加载训练好的模型。

使用步骤

  • 初始化网络:使用 create() 函数初始化网络,并通过 setLayerSizes() 定义网络结构。
  • 配置训练参数:选择激活函数、设置训练方法及相应参数。
  • 准备数据:准备好训练数据集和标签。
  • 训练模型:调用 train() 方法对模型进行训练。
  • 评估与预测:利用 predict() 方法对新数据进行预测,并根据需要评估模型性能。

代码示例

include <iostream>
#include <opencv2/ml.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace cv::ml;
using namespace std;

int main()
{
    // 训练数据及对应标签
    float trainingData[ 8 ][ 2 ] = { { 480, 500 }, { 50, 130 }, { 110, 32 }, { 490, 60 }, { 60, 190 }, { 200, 189 }, { 78, 256 }, { 45, 315 } };
    float labels[ 8 ]            = { 0, 1, 0, 0, 1, 0, 1, 1 };

    Mat trainingDataMat( 8, 2, CV_32FC1, trainingData );
    Mat labelsMat( 8, 1, CV_32FC1, labels );

    // 创建ANN_MLP模型
    Ptr< ANN_MLP > model = ANN_MLP::create();

    // 设置网络结构:输入层大小为2,隐藏层大小为2,输出层大小为1
    Mat layerSizes = ( Mat_< int >( 1, 3 ) << 2, 2, 1 );
    model->setLayerSizes( layerSizes );

    // 设置激活函数
    model->setActivationFunction( ANN_MLP::SIGMOID_SYM );

    // 设置训练方法
    model->setTrainMethod( ANN_MLP::BACKPROP );
    model->setBackpropWeightScale( 0.1 );
    model->setBackpropMomentumScale( 0.1 );

    // 设置迭代终止准则
    TermCriteria termCrit = TermCriteria( TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, 0.01 );
    model->setTermCriteria( termCrit );

    // 准备训练数据
    Ptr< TrainData > tData = TrainData::create( trainingDataMat, ROW_SAMPLE, labelsMat );

    // 训练模型
    model->train( tData );

    // 预测新数据点
    Mat sampleMat = ( Mat_< float >( 1, 2 ) << 500, 500 );
    Mat responseMat;
    float predictedClass = model->predict( sampleMat, responseMat );

    cout << "Predicted class: " << predictedClass << endl;

    return 0;
}

运行结果

Predicted class: 0

相关文章:

  • 伯克利 CS61A 课堂笔记 08 —— Strings and Dictionaries
  • RunLoop 详解
  • 浏览器自动化与AI Agent结合项目browser-use初探
  • 【虚幻引擎UE】UE4.23到UE5.5的核心功能变化
  • 2. grafana插件安装并接入zabbix
  • 数据结构:数组
  • 【微服务学习一】springboot微服务项目构建以及nacos服务注册
  • Android adb测试常用命令大全
  • 数据结构之队列,哈希表
  • 【Vue】打包vue3+vite项目发布到github page的完整过程
  • 【CubeMX+STM32】SD卡 U盘文件系统 USB+FATFS
  • 【FastAPI 使用FastAPI和uvicorn来同时运行HTTP和HTTPS的Python应用程序】
  • encodeURI(),encodeURIComponent()区别
  • 【Stable Diffusion模型测试】测试ControlNet,没有线稿图?
  • LLM应用开发(三)
  • 用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk
  • BUU35 [DASCTF X GFCTF 2024|四月开启第一局]EasySignin 100 【gopher打mysql】
  • 【LeetCode】1. 两数之和
  • 【PHP的static】
  • day51 第十一章:图论part02
  • 普京召开俄乌谈判筹备会议,拉夫罗夫、绍伊古等出席
  • 为何选择上海?两家外企提到营商环境、人才资源……
  • 从能源装备向应急装备蓝海拓展,川润股份发布智能综合防灾应急仓
  • 5吨煤炭“瞬间蒸发”?掺水炭致企业损失千万,腐败窝案曝光
  • AI含量非常高,2025上海教育博览会将于本周五开幕
  • 乌拉圭前总统何塞·穆希卡去世