- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 Visual Studio 2012 和 Opencv 2.4.6 使用 C++ 进行编程。我有一组训练图像,我已经为其计算了特征向量。这些特征向量应该成为我的神经网络的输入,用类 CvANN_MLP 实现。每个特征向量由 60 个属性组成,其中 59 个是神经网络的“输入”,最后一个是“输出”,只能是 1 或 0。我已经实现了这个神经网络:
CvANN_MLP machineBrain;
double td[NUMERO_ESEMPI_TOTALE][60];
CvMat* trainData = cvCreateMat(NUMERO_ESEMPI_TOTALE, 59, CV_32FC1);
CvMat* trainClasses = cvCreateMat(NUMERO_ESEMPI_TOTALE, 1, CV_32FC1);
CvMat* sampleWts = cvCreateMat(NUMERO_ESEMPI_TOTALE, 1, CV_32FC1);
//The matrix representation of our ANN. We'll have four layers.
CvMat* neuralLayers = cvCreateMat(4, 1, CV_32SC1);
CvMat trainData1, trainClasses1, neuralLayers1, sampleWts1;
cvGetRows(trainData, &trainData1, 0, NUMERO_ESEMPI_TOTALE);
cvGetRows(trainClasses, &trainClasses1, 0, NUMERO_ESEMPI_TOTALE);
cvGetRows(trainClasses, &trainClasses1, 0, NUMERO_ESEMPI_TOTALE);
cvGetRows(sampleWts, &sampleWts1, 0, NUMERO_ESEMPI_TOTALE);
cvGetRows(neuralLayers, &neuralLayers1, 0, 4);
cvSet1D(&neuralLayers1, 0, cvScalar(59));
cvSet1D(&neuralLayers1, 1, cvScalar(3));
cvSet1D(&neuralLayers1, 2, cvScalar(3));
cvSet1D(&neuralLayers1, 3, cvScalar(1));
for(int i=0;i<NUMERO_ESEMPI_TOTALE;i++){
for(int j=0;j<59;j++){
td[i][j] = featureVect[i][j];
}
if(i<45){
td[i][59] = 0; //è una bocca!
}else{
td[i][59] = 1; //non è una bocca!
}
}
//Mettiamo insieme i training data
for (int i=0; i<NUMERO_ESEMPI_TOTALE; i++){
//I 59 input
for(int j=0;j<59;j++){
cvSetReal2D(&trainData1, i, 0, td[i][j]);
}
//Output
cvSet1D(&trainClasses1, i, cvScalar(td[i][59]));
//I pesi (vengono tutti settati a 1)
cvSet1D(&sampleWts1, i, cvScalar(1));
}
machineBrain.create(neuralLayers);
cout<<"Rete creata"<<endl;
//Train it with our data.
machineBrain.train(trainData,trainClasses,sampleWts,0,CvANN_MLP_TrainParams(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,100000,/*1.0*/0.01/*riprovare 0.01*/),CvANN_MLP_TrainParams::BACKPROP,0.001,0.05));
cout<<"Rete addestrata"<<endl;
Mat pred(num_test_sample, 1, CV_32FC1);
Mat pred1(num_test_sample, 1, CV_32FC1);
for(int i=0;i<NUMERO_ESEMPI_TEST; i++){
float _sample[59];
CvMat sample = cvMat(1, 59, CV_32FC1, _sample);
float _predout[1];
CvMat predout = cvMat(1, 1, CV_32FC1, _predout);
for(int j=0;j<59;j++){
sample.data.fl[j] = featureVectTest[i][j];
}
machineBrain.predict(&sample, &predout);
cout<<endl<<predout.data.fl[i]<<endl;//risultato predizione!
pred.at<float>(i,0)=predout.data.fl[i];
pred1.at<float>(i,0)=predout.data.fl[i];
file<<"Value Image "<<i<<": "<<predout.data.fl[i]<<"\n";
}
返回的值属于这种类型:
Value Image 0: 0.475639
Value Image 1: 0
Value Image 2: 4.2039e-044
Value Image 3: 1.4013e-045
Value Image 4: -7.88636e-016
Value Image 5: 1.31722e-043
Value Image 6: 4.2039e-044
Value Image 7: 1.4013e-045
Value Image 8: 0.0154511
Value Image 9: 0.00100189
Value Image 10: 0.00161414
Value Image 11: 0.0449422
Value Image 12: 7.5433
Value Image 13: 65.8052
Value Image 14: 24.301
Value Image 15: 19.7311
Value Image 16: 0.985553
Value Image 17: 0.965309
Value Image 18: 0.971295
所以我没有 0 或 1 的结果。是否正确?如果不是,我的代码有什么错误?
最佳答案
我不太了解 C 接口(interface),但我在这里遇到了与 C++ 接口(interface)类似的问题:
OpenCV Neural Network Sigmoid Output
Mlp 的创建函数默认参数不起作用,它们应该给出:
mlp.create(层, CvANN_MLP::SIGMOID_SYM, 1, 1)
但正如我所说,我不知道 c 接口(interface)。由于 C 没有默认参数,因此可能有另一个函数可以提供 sigmoid 的 alpha 和 beta 参数。
顺便说一句,OpenCV 没有众所周知的 sigmoid 实现,它在 0 和 1 的范围内。正如文档中所述,它在 -1 和 1 之间。
关于c++ - 神经网络mlp麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140860/
我想使用简单的 MLP 模型进行迁移学习。首先,我在大数据上训练 1 个隐藏层前馈网络: net = Sequential() net.add(Dense(500, input_dim=2048, k
最近我正在使用 Tensorflow。我正在探索如何在 Tensorflow 中实现多层感知器。 我在网上学习了很多教程。他们中的大多数使用一两个隐藏层。一个简单的例子取自 here def forw
我对机器学习非常陌生,正在尝试实现 MLP,但是成本函数似乎在达到全局最小值之前就达到了局部最小值。我将成本绘制为迭代函数(包括 0 值,以免被 y 轴的起始位置所迷惑)。 这是我尝试使用的代码: i
以下是我的 MLP 模型, layers = [10,20,30,40,50] model = keras.models.Sequential() #Stacking Layers model.add
我是机器学习的新手,我正在开发一个 python 应用程序,该应用程序使用数据集对扑克牌进行分类,我将发布片段。似乎效果不太好。它无法正确对手进行分类。我收到以下错误 ", line 298, in
我有这样的数据 有 29 列,我必须预测其中的 winPlacePerc(数据帧的最末端)在 1 之间(高百分比)到 0(低百分比) 在 29 列中,25 是数字 数据 3 是 ID(对象) 1 是
您好,我正在尝试修改 mnist 示例以使其与我的数据集相匹配。我只尝试使用 mlp 示例,但它给出了一个奇怪的错误。 数据集是一个有 2100 行和 17 列的矩阵,输出应该是 16 个可能的类别之
我在 Dlib 中创建了一个多层感知器网络: mlp::kernel_1a_c net(2,5); 输入层有 2 个节点,第一个隐藏层有 5 个节点。该网络是否已经包含偏置节点?还是必须自己添加? 最
我正在 matlab 中制作一个具有反向传播的 MLP 神经网络。问题是,它似乎无法很好地处理函数中的曲线,也无法很好地与值进行缩放。例如,它可以达到 cos(x) 的 80%,但如果我输入 100*
我是 OpenCV 世界和神经网络的新手,但我有一些 C++/Java 编码经验。 我创建了我的第一个 ANN MLP 并学习了 XOR: #include #include #include
给定输入特征,仅原始数字: tensor([0.2153, 0.2190, 0.0685, 0.2127, 0.2145, 0.1260, 0.1480, 0.1483, 0.1489,
我正在尝试使用简单的时间序列预测。给定数量的输入(1 分钟滴答) Net 应该尝试预测下一个。我用不同的设置训练了 3 个网络来说明我的问题: 在右侧,您可以看到 3 个训练器 MLP - 随机命名和
我正在运行 MLP 将一组值分为 10 个不同的类别。 简单来说,我有一个声纳,它可以提供 400 个物体的“读数”。每个读数都是 1000 个浮点值的列表。 我已扫描了总共 100 个对象,想要对它
我正在创建一个简单的神经网络,其中有一个隐藏层用于分类。 我的输入数据集已准备好并保存在 .t7 文件中。 input = { data : DoubleTensor - size: 1400x1
我设置了以下参数: parameter_space = { 'hidden_layer_sizes': [(sp_randint.rvs(100,600,1),sp_randint.rvs(1
我正在使用机器学习制作一个国际象棋引擎,但在调试它时遇到了问题。我需要帮助找出我的程序出了什么问题,如果有任何帮助,我将不胜感激。 我进行了研究,并从多个成功的项目中借鉴了想法。这个想法是使用强化学习
我正在学习机器学习,我看到一些 Material 表明MLP(多层感知器)可能会陷入局部最小值。我想通过做一些实验来学习,但我在网上搜索了具体的例子,但找不到任何例子。谁能告诉我在哪里可以找到可以由我
我(有点像初学者)在时间序列数据应用程序上尝试使用 Keras,我创建了一个回归模型,然后将其保存以在不同的 Python 脚本上运行。 我正在处理的时间序列数据是每小时数据,我使用 Keras 中保
我尝试使用 keras(支持 tensorflow )创建一个神经网络。我有 4 个输入变量和 2 个输出变量:不可用 我想对不可用的测试集进行预测。 这是我的代码: from keras impor
我使用 theano 编写了一个 MLP 分类器。使用反向传播算法的训练函数如下: self.weights=[theano.shared(numpy.random.random((network.a
我是一名优秀的程序员,十分优秀!