OpenCV机器学习(7)人工神经网络 定义模型训练过程中参数的搜索范围cv::ml::ParamGrid 类

  • OpenCV版本:OpenCV4.9
  • IDE:Visual Studio Code
  • 编程语言:C++11

算法描述

cv::ml::ParamGrid 类是 OpenCV 机器学习模块中的一个辅助类,用于定义模型训练过程中参数的搜索范围。它通常被用作某些机器学习算法(如支持向量机 SVM)的超参数调优工具,允许用户指定参数的最小值、最大值以及变化步长。通过使用 ParamGrid,你可以更方便地进行网格搜索(grid search),从而找到最优的模型参数配置。

主要用途

  • 超参数调优:为特定的模型参数定义一个可能值的范围,以便在训练时自动探索最佳参数。
  • 参数范围定义:通过设置参数的最小值、最大值和步长,生成一系列可能的参数值,供训练过程选择最优值。

构造函数与成员函数

  • 构造函数
    • ParamGrid():默认构造函数,创建一个默认的参数网格,其最小值为 1.0, 最大值为 10.0, 步长为 1.0。

    • ParamGrid(double minVal, double maxVal, double logStep):初始化参数网格,指定最小值、最大值和步长。注意这里的步长是以对数尺度给出的。

      成员变量

      minVal:参数的最小值。

      maxVal:参数的最大值。

      logStep:参数增长的步长,以对数尺度表示。

代码示例

cpp 复制代码
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/ml.hpp>
#include <iostream>

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

int main() {
    // 创建SVM实例
    Ptr<SVM> svm = SVM::create();

    // 定义C参数的搜索范围
    ParamGrid C_grid(0.1, 100, 2); // 从0.1到100,以2的幂次递增
    
    // 定义gamma参数的搜索范围
    ParamGrid gamma_grid(0.01, 1, 2); // 从0.01到1,以2的幂次递增

    // 准备训练数据
    Mat samples = (Mat_<float>(4, 2) << 
        0.5, 1.0,
        1.0, 1.5,
        2.0, 0.5,
        1.5, 0.0);
    
    Mat responses = (Mat_<int>(4, 1) << 0, 0, 1, 1);

    // 使用TrainData创建训练数据对象
    Ptr<TrainData> trainData = TrainData::create(samples, ROW_SAMPLE, responses);

    // 自动训练模型,使用定义的参数网格
    svm->trainAuto(trainData, 10, C_grid, gamma_grid);

    // 保存模型
    svm->save("svm_model.yml");

    // 对新样本进行预测
    Mat sample = (Mat_<float>(1, 2) << 1.6, 0.7);
    float response = svm->predict(sample);

    cout << "The predicted response for the sample is: " << response << endl;

    return 0;
}

运行结果

cpp 复制代码
The predicted response for the sample is: 1
相关推荐
极客天成ScaleFlash2 分钟前
极客天成让统一存储从云原生‘进化’到 AI 原生: 不是版本升级,而是基因重组
人工智能·云原生
王哥儿聊AI7 分钟前
Lynx:新一代个性化视频生成模型,单图即可生成视频,重新定义身份一致性与视觉质量
人工智能·算法·安全·机器学习·音视频·软件工程
_pinnacle_34 分钟前
打开神经网络的黑箱(三) 卷积神经网络(CNN)的模型逻辑
人工智能·神经网络·cnn·黑箱·卷积网络
Ada's37 分钟前
深度学习在自动驾驶上应用(二)
人工智能·深度学习·自动驾驶
张较瘦_1 小时前
[论文阅读] 人工智能 + 软件工程 | 从“人工扒日志”到“AI自动诊断”:LogCoT框架的3大核心创新
论文阅读·人工智能·软件工程
lisw051 小时前
连接蓝牙时“无媒体信号”怎么办?
人工智能·机器学习·微服务
扫地的小何尚1 小时前
深度解析 CUDA-QX 0.4 加速 QEC 与求解器库
人工智能·语言模型·llm·gpu·量子计算·nvidia·cuda
张较瘦_2 小时前
[论文阅读] 人工智能 + 软件工程 | 35篇文献拆解!LLM如何重塑软件配置的生成、验证与运维
论文阅读·人工智能·软件工程
jie*2 小时前
小杰机器学习(nine)——支持向量机
人工智能·python·机器学习·支持向量机·回归·聚类·sklearn
山烛2 小时前
OpenCV:人脸检测,Haar 级联分类器原理
人工智能·opencv·计算机视觉·人脸检测·harr级联分类器