如何训练 libsvm 格式的图像(像素)数据以用于 Java 识别

2023-11-24

我想制作一个 Java 应用程序来使用 libsvm 来识别字符,但是当进入这个过程时,我不明白如何训练图像数据以与 libsvm 一起使用?

最近为了学习它,我做了一个测试现有数据:

我也创建了32x32基于训练图像数据,将每个像素转换为0,1但我不知道它是否可以用来创建 libsvm 训练数据格式? libsvm测试数据是如何创建的?

转换后的图像像素示例(0,1):

00000000000001111000000000000000
00000000000011111110000000000000
00000000001111111111000000000000
00000001111111111111100000000000
00000001111111011111100000000000
00000011111110000011110000000000
00000011111110000000111000000000
00000011111110000000111100000000
00000011111110000000011100000000
00000011111110000000011100000000
00000011111100000000011110000000
00000011111100000000001110000000
00000011111100000000001110000000
00000001111110000000000111000000
00000001111110000000000111000000
00000001111110000000000111000000
00000001111110000000000111000000
00000011111110000000001111000000
00000011110110000000001111000000
00000011110000000000011110000000
00000001111000000000001111000000
00000001111000000000011111000000
00000001111000000000111110000000
00000001111000000001111100000000
00000000111000000111111000000000
00000000111100011111110000000000
00000000111111111111110000000000
00000000011111111111110000000000
00000000011111111111100000000000
00000000001111111110000000000000
00000000000111110000000000000000
00000000000011000000000000000000
 0
00000000000001111111110000000000
00000000001111111111111000000000
00000000011111111111111100000000
00000000011111111111111100000000
00000000011111111111111110000000
00000001111111111111111100000000
00000000111110000011111100000000
00000000000000000001111100000000
00000000000000000001111100000000
00000000000000000001111100000000
00000000000000000011111000000000
00000000000000000111111000000000
00000000000000000111111000000000
00000000000000000111111000000000
00000000000000001111110000000000
00000000011111111111111111000000
00000000111111111111111111100000
00000000111111111111111111100000
00000000111111111111111111100000
00000001111111111111111110000000
00000001111111111110000000000000
00000001111111111110000000000000
00000000111111111110000000000000
00000000000011111000000000000000
00000000000011111000000000000000
00000000000011111000000000000000
00000000000111111000000000000000
00000000000111111000000000000000
00000000001111110000000000000000
00000000011111110000000000000000
00000000001111100000000000000000
00000000001111100000000000000000
 7

如何获得它libsvm (training, testing data)?


libsvm具有特定的数据格式,每一行都是一个训练/测试向量,其形式为

标签索引 0:值 0 索引 1:值 1 ... 索引:值

因此,在最“天真的”方法中,您只需通过连接连续的行将矩阵表示形式转换为行表示形式,因此图像就像

010
011
000

会成为

010011000

以及 libsvm 格式(假设我们用“5”标记它):

5 0:0 1:1 2:0 3:0 4:1 5:1 6:0 7:0 8:0 9:0

由于 libsvm 支持“稀疏”表示,因此您可以省略带有“0”的值

5 1:1 4:1 5:1 

这是手动方式,示例数据位于此处:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/a1a

最简单的“自动”方法是将数据表示为 .csv 格式(再次将数据转换为行格式,然后转换为 .csv),这是非常标准的方法:

标签,PIXEL_0,PIXEL_1,...,PIXEL_N

...

然后用这个程序进行转换

/* convert cvs data to libsvm/svm-light format */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char buf[10000000];
float feature[100000];

int main(int argc, char **argv)
{
    FILE *fp;

    if(argc!=2) { fprintf(stderr,"Usage %s filename\n",argv[0]); }
    if((fp=fopen(argv[1],"r"))==NULL)
    {
        fprintf(stderr,"Can't open input file %s\n",argv[1]);
    }

    while(fscanf(fp,"%[^\n]\n",buf)==1)
    {
        int i=0,j;
        char *p=strtok(buf,",");

        feature[i++]=atof(p);

        while((p=strtok(NULL,",")))
            feature[i++]=atof(p);

        //      --i;
        /*
        if ((int) feature[i]==1)
            printf("-1 ");
        else
            printf("+1 ");
        */
        //      printf("%f ", feature[1]);
        printf("%d ", (int) feature[0]);
        for(j=1;j<i;j++)
            printf(" %d:%f",j,feature[j]);


        printf("\n");
    }
    return 0;
}

训练和测试文件的结构完全相同,只需将数据按一定比例(3:1 或 9:1)随机分割到文件中training and testing,但请记住在每个文件中包含每个类的平衡数量的训练向量。

特别是 - 你的数据看起来有点像MNIST数据集,如果是这种情况,这个已经为libsvm准备好了:

http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass.html

MNIST 培训:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/mnist.scale.bz2

MNIST 测试:http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multiclass/mnist.scale.t.bz2

如果您的数据可以的话,将图像转换为 [0,1] 区间内的实值图像将比二进制数据(丢失大量信息)更有价值。

EDIT

举个例子,如果你的图像是 8 位灰度图像,那么每个像素实际上是一个数字v0 到 255 之间。您现在正在做的是一些阈值处理,将 1 设置为v > T0 表示v <= T,而将这些值映射到实际值将为模型提供更多信息。可以通过简单的挤压来完成v / 255。结果,所有值都在[0,1]间隔,但也有“之间”的值,例如0.25 etc.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何训练 libsvm 格式的图像(像素)数据以用于 Java 识别 的相关文章

  • 无法执行目标 org.codehaus.mojo:exec-maven-plugin:1.5.0:exec

    三周前 我完成了一个网络应用程序的工作 一切都运行没有问题 现在 三周后 没有任何更改 我想再次运行该应用程序 但这次我收到以下错误消息 An error occurred while parsing the server response
  • 为 JSP 创建注销链接?

    当用户登录我的应用程序时 他提交一个要通过 Servlet 处理的表单 servlet 为用户创建一个会话 我如何创建一个链接以便用户可以注销 我似乎无法直接链接到 Servlet 如何删除会话并链接回主页 HttpSession sess
  • 如何注入“运行时”依赖项,例如登录用户,该依赖项在应用程序启动时不可用?

    我只是不明白这个 我在我的 java GWT 应用程序中使用 Gin 来进行 DI 登录屏幕集成到完整的应用程序窗口中 用户登录后 我想将用户对象注入到我创建的其他类 例如 GUI Presenters 中 因此我相信存在某种运行时依赖性
  • 在 libgdx 中批处理多维数据集时出现问题

    我正在尝试开发一款游戏 在屏幕上渲染多达 300 个立方体 为每个多维数据集创建新的 modelInstance 时 modelBatch 的性能非常糟糕 据我所知 没有 3d 批处理可以将所有立方体批处理到一次绘制调用 所以我拼命地尝试以
  • Cognito SRP 身份验证 JAVA SDK

    我正在尝试使用 Cognito 验证 Java 应用程序 我在Python中使用了warrant库 效果非常好 但我现在想在java中做同样的事情 我的 Python 函数用于身份验证warrant https github com cap
  • 如何在休眠中持久保存实体期间验证实体的约束

    我有一个带有字段名称的实体 我希望它不超过255 所以我这样定义它 Entity public class A implements Serializable NotNull Size max 255 private String name
  • 在 Selenium Grid 中注册 PhantomJS 节点时出错

    我有以下问题 我成功启动了 Selenium Grid hub java jar selenium server standalone 2 53 0 jar role hub 之后我尝试使用以下命令启动 PhantomJS 节点 phant
  • Java TCP Echo 服务器 - 广播

    我有一个简单的回显服务器 我希望当连接的用户向服务器键入任何内容时 所有其他客户端和该客户端都会收到消息 MOD 它现在不会发送给所有客户端 但它应该发送 而且我只是不知道我的代码出了什么问题 所以现在它只会将消息 MOD 发送给发送消息的
  • 控制启动时的竞争条件

    我有一些代码想要执行一些一次性初始化 但这段代码没有明确的生命周期 因此在初始化完成之前 我的逻辑可能会被多个线程调用 所以 我想基本上确保我的逻辑代码 等待 直到初始化完成 这是我的第一次剪辑 public class MyClass p
  • 如何修复运行 Android 模拟器时出现 GPU Driver Issue 错误

    我的 Android 模拟器几周前运行良好 但现在出现错误 当我运行代码时 GPU 驱动程序问题错误对话框与模拟器一起弹出 当我单击 确定 时 Android 模拟器不会按预期运行应用程序 错误如下 Your GPU driver info
  • 如何使用 Java 文档 API 为 OrientDB 数据库创建自动递增索引/序列?

    我通过其文档 API 将 OrientDB 与 Java 结合使用 我有一个简单的类叫做items它有一个属性ID 我明确声明架构如下 OSchema schema db getMetadata getSchema OClass items
  • 使用 JPA 标准的“不在”约束

    我正在尝试写一个NOT IN约束使用JPA Criteria 我尝试过这样的事情 builder not builder in root get property1 虽然我知道这行不通 在上面的语法中 如何添加集合 列表property1会
  • BODMAS系统的加法和减法

    我一直在构建一个简单的公式计算器 但一直被加法和减法困扰 正如您应该知道的 在计算方程时 您遵循优先级算术规则 即括号 顺序 幂函数 除法 乘法 加法和减法 问题是加法和减法具有相同的优先级 因此您可以从左到右阅读 到目前为止 这是我的代码
  • 如何在 python 中使用交叉验证执行 GridSearchCV

    我正在执行超参数调整RandomForest如下使用GridSearchCV X np array df features all features y np array df gold standard labels x train x
  • GSSAPI 中的 javax.naming.AuthenticationException

    我正在尝试使用 JAVA GSSAPI 执行 NTLM 绑定 我收到此错误 javax naming AuthenticationException GSSAPI 根异常是 javax security sasl SaslException
  • CXF 增加连接池大小而不更改 http.maxConnections

    最近我被要求将 CXF 配置为与我们旧的 XFire 服务相同的参数 这些参数之一是Keep Alive timeout 60 max 20 然而 我做了一些研究 看来 CXF 使用 JVMHttpURLConnection引擎盖下的对象
  • 使用会话空闲超时进行轮询

    我对 Tomcat 中的所有应用程序使用单点登录 我的要求是 我必须轮询应从后端获取的事务状态 但它也不应该影响会话的空闲超时 有人可以建议是否可以做点什么吗 Thanx 我不知道是否有标准方法可以做到这一点 如果没有 你可以写一个过滤器
  • 机器学习的周期性数据(例如度角 -> 179 与 -179 相差 2)

    我使用 Python 进行核密度估计 并使用高斯混合模型对多维数据样本的可能性进行排名 每一条数据都是一个角度 我不确定如何处理机器学习的角度数据的周期性 首先 我通过添加 360 来删除所有负角 因此所有负角都变成了正角 179 变成了
  • 避免加密和编码的 URL 字符串中的换行符

    我正在尝试实现一个简单的字符串编码器来混淆 URL 字符串的某些部分 以防止它们被用户弄乱 我使用的代码几乎与示例中的相同JCA指南 http docs oracle com javase 6 docs technotes guides s
  • Java编程编译jar

    我有一个文本文件中的java源代码 必须在源代码中输入一些自定义的硬编码变量 然后将其转换为 jar 这是可行的 但是当我运行 jar 时 找不到 Main 类 当我用 WinRAR 解压 jar 文件时 我似乎找不到错误 当我通过 cmd

随机推荐

  • 检查字符串是否包含数字

    我发现的大多数问题都存在偏见 因为他们正在寻找数字中的字母 而我正在寻找我想要的无数字字符串中的数字 我需要输入一个字符串并检查它是否包含任何数字以及是否拒绝它 功能isdigit 只返回True如果所有字符都是数字 我只是想看看用户是否输
  • 了解 Java 数据类型

    1 为什么不允许以下分配 byte b 0b11111111 8 bits or 1 byte 但这个分配是允许的 int i 0b11111111111111111111111111111111 32 bits or 4 bytes 两种
  • Android 电话堆栈中的不同呼叫状态代表什么?

    The internal安卓类com android internal telephony Call包含一个名为 State 的枚举 定义如下 public enum State IDLE ACTIVE HOLDING DIALING AL
  • 如何在winform中将数据绑定到图表并刷新图表?

    我尝试将图表绑定到generatedSequence类型的List
  • 如何及时了解计算机(尤其是软件)安全性的最新信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我最近购买并阅读了一套关于
  • NSPredicate 和 CoreData - 决定 iOS 上的 Date 属性是否为“今天”(或昨晚 12 点到今晚 12 点之间)

    我正在使用一个NSFetchedResultsController and a UITableViewController从 CoreData 数据库填充 UITableView 我有一个NSDate对象保存到标记为 startTime 的
  • 如何使用 JDBC 连接从主机到 docker mysql 服务器

    我是 docker 新手 我尝试从本地计算机 主机 连接到 mysql 容器 我用以下命令拉取了最新版本的mysql docker pull mysql mysql server latest 并启动它 以及 myadmin 容器 其中包含
  • 如何检查是否有足够的可用堆内存?

    我有一项作业要求我创建一个分配和释放内存的 堆 类 我相信我的代码可以工作 并且解决方案可以正常构建和运行 但我想确保没有任何内存泄漏 我还需要添加一些代码来检查分配给堆的所需数量是否可用 如果有人要分配非常大的数量 如何检查堆上分配的内存
  • 如何将@noescape注释添加到可选闭包

    我的函数有这个签名 func foo bar String baz String gt nil 而现在我想让不必要的逃避self在给定的闭包内 但是当我尝试这个时 func foo bar String noescape baz Strin
  • 向 woocommerce 添加每页产品下拉列表

    我正在尝试在不使用插件的情况下将 每页产品 下拉列表添加到我的 woocommerce 店面子主题中 我将以下代码添加到我的functions php中source add action woocommerce before shop lo
  • 在 Apache 上使用 PHP 进行长轮询

    希望我能很好地解释这一点 我正在努力创建一个通过 PHP 处理 ajax 请求的 PHP 库以面向对象的方式 我目前正在考虑一种实现长轮询解决方案的好方法 但对某些事情感到好奇 Apache 不能很好地保持多个连接打开 每个请求一个线程的模
  • scipy中样条插值的系数

    我想通过 scipy 计算样条插值的系数 在 MATLAB 中 x 0 3 y 0 1 4 0 spl spline x y disp spl coefs 它会返回 ans 1 5000 5 5000 3 0000 0 1 5000 1 0
  • 在 Javascript contenteditable div 中插入文本

    有没有办法将文本 字符串 可能有也可能没有 html 标签 插入到div 它必须是一个div而不是一个textarea 首先 我需要获取光标位置 然后在该位置插入文本 和函数类似insertAdjacentText 但只能在标签之前或之后插
  • VS调试问题,谁能帮我解释一下?

    一段C 代码 var isTrue new List
  • 压缩字体以在网络中使用

    在用作网络字体之前可以对字体进行某种压缩吗 我有一个 150kB 的字体文件 能不能压缩一下 而且如果我要求两种字体 eot and ttf两者都会被浏览器下载吗 如果您使用 FontSquirrel font face 套件生成器 htt
  • WSO2 ESB DBLookup 中介查询多行

    正如 DBLookup Mediator 的文档中所述 它仅返回查询的第一行 其他结果 如果有 将被忽略 我想知道是否有 最佳方法 来运行返回多个记录然后处理它们的查询 SELECT FROM X 现在我们正在实现 axis2 服务 但是还
  • 正则表达式匹配文件夹和所有子文件夹

    我需要为备份排除过滤器编写正则表达式以排除文件夹及其所有子文件夹 我需要匹配以下内容 folder1 statistics folder1 statistics folder2 statistics folder2 statistics 我
  • XGBoost - 具有不同曝光/偏移的泊松分布

    我正在尝试使用 XGBoost 对不等长的暴露期生成的数据的索赔频率进行建模 但无法让模型正确处理暴露 我通常会通过将 log exposure 设置为偏移量来做到这一点 你能在 XGBoost 中做到这一点吗 这里发布了类似的问题 xgb
  • firebase 身份验证/无效的自定义令牌

    我正在尝试使用 firebase admin sdk 生成自定义令牌 const uid 91f0bf4c 3e3c 441c a21d 6a7fee341db5 firebaseAdmin auth createCustomToken u
  • 如何训练 libsvm 格式的图像(像素)数据以用于 Java 识别

    我想制作一个 Java 应用程序来使用 libsvm 来识别字符 但是当进入这个过程时 我不明白如何训练图像数据以与 libsvm 一起使用 最近为了学习它 我做了一个测试现有数据 我也创建了32x32基于训练图像数据 将每个像素转换为0