OpenCV 3.1.0 NB分类器,将所有MNIST训练样本分类为单个类别
OpenCV 3.1.0 NB Classifier classifying all MNIST training samples into single class
我正在尝试使用OpenCV 3.1.0为MNIST数据集训练NB分类器。我使用了准备好的CSV培训和数据文件http://pjreddie.com/projects/mnist-in-csv/用于训练NB分类器。我使用剪切和粘贴对这个CSV文件进行了轻微修改,以满足OpenCV的要求。在训练分类器之后,我试图使用它来对训练数据集进行分类,但它将所有样本分类到类0中。训练数据集有784个维度、10个类和60000个样本。我的培训代码如下:
#include <iostream>
#include <opencv2/ml.hpp>
using namespace cv;
using namespace cv::ml;
int main(int argc, char* argv[])
{
String trainingDataFile(argv[1]);
Ptr<TrainData> trainingData = TrainData::loadFromCSV(trainingDataFile,0);
Ptr<NormalBayesClassifier> nbClassifier = NormalBayesClassifier::create();
nbClassifier->train(trainingData);
nbClassifier->save(trainingDataFile+"_trainedNBParams.dat");
return 0;
}
测试代码只是从文件中重新加载NB分类器,并对所有样本进行分类。我成功地将此代码用于另一个较小的数据集,该数据集包含128个维度、10个类和10000个样本。我不确定这是我的代码、训练方法还是OpenCV本身的问题。请告知。
谢谢。
如果没有其他信息,很难判断问题可能是什么。
- OpenCV:只要你使用的是稳定版本,我怀疑问题出在OpenCV库中
- 训练方法:特别是考虑到数据是MNIST,我怀疑你是否必须进行任何微调才能获得合理的结果。只要将参数保留为opencv的默认值就可以了。你的方法论似乎也很合理
-
我的猜测是在数据中,因为这是唯一改变并导致失败的变量。你能试着重复训练数据吗
for(int i = 0; i < trainingData->getSamples().size(); i++) { // check contents of data }
看看那里有没有什么问题?(样品数量、尺寸等)
相关文章:
- 如何在MNIST上提高网络运行的准确性
- 编译 libfluid 样本控制器时对"event_base_del_virtual"的未定义引用
- 使用源读取器从网络摄像头源获取 H264 样本
- 当相机接近模型时,SSAO样本内核会导致性能下降?
- 如何从 std::set 绘制 n 个元素的样本
- 如何通过一次运行将多个输入样本馈送到C++张量流模型
- 如何测量一个音频样本中的低音量
- 如何从 avi 文件中抓取所有帧 - 如何修改 MS 样本采集卡样本
- 将 mnist 客户端重写为 c++(arg[0] 不是矩阵)
- 为什么当只有样本计数不同时avcodec_fill_audio_frame返回 -22?
- 在QtMultimedia的QAudioFormat中为24位,32位和64位音频选择哪种样本类型(而不是大小)?
- 提升ASIO TCP螺纹.等待新样本
- webRTC : 如何通过从WAV文件获得的样本将webRTC的VAD应用于音频
- 具有固定样本空间的排列算法
- 数据集(和样本)何时在 boost::test 中销毁?
- 媒体基础获得视频文件的精确帧(样本)计数
- Visual样本存储过程从C 程序执行
- 是否可以从SFML中的音频样本中左右通道分开
- Runge-Kutta第四阶粒子对流代码样本
- OpenCV 3.1.0 NB分类器,将所有MNIST训练样本分类为单个类别