【发布时间】:2015-01-19 20:03:39
【问题描述】:
一直在研究用于 OCR 识别数字的神经网络。对于培训,我使用了从在线课程中获得的一组(取自 MNIST 数据库)。训练值在 -1.28 到 1.28 的范围内(我不知道为什么会这样,这可能是问题的根源,但我一直在努力从其他地方获取训练集,有什么建议吗?)。对于某些人原因是,预测函数的“输出”矩阵对于所有 10 个条目都是相同的值。基本上,神经网络不工作..
void neuralNet(Mat M, Mat label, Mat test) {
//M is the training set of dimension 5000 X 400 (the image size is 20 X 20 and there are 5000 samples
//label is 5000 X 10 , where the columns correspond to the represented number. i.e. ( if the number is 5
// label[x][5]=1 and all other elements of the row are 0.
// test has dimension 1 X 400
Mat layerSizes = new Mat(3,1,CvType.CV_32S); //Setting up the layers
layerSizes.put(0,0,400);
layerSizes.put(1, 0, 25);
layerSizes.put(2, 0, 10);
//Creating the Neural Network
CvANN_MLP nnet = new CvANN_MLP(layerSizes,CvANN_MLP.SIGMOID_SYM,0.6,1);
//Create criteria
TermCriteria criteria = new TermCriteria(TermCriteria.COUNT+TermCriteria.EPS,1000,0.000001);
//Create training parameters
CvANN_MLP_TrainParams param = new CvANN_MLP_TrainParams();
param.set_term_crit(criteria);
param.set_train_method(CvANN_MLP_TrainParams.BACKPROP);
param.set_bp_dw_scale(0.1);
param.set_bp_moment_scale(0.1);
//Training
int iter = nnet.train(M, label,new Mat(), new Mat() ,param, 0);
System.out.println("Number of iteratins: "+ iter);
System.out.println("Running test...");
Mat testOut = new Mat(1,10,CvType.CV_32FC1);
nnet.predict(test,testOut);
System.out.println(testOut.dump());
double []t = null;
System.out.println("The recognised symbols are:");
double max=0;
int loc=-1;
for(int j=0;j<10;j++)
{
t=testOut.get(0, j);
if(max < t[0])
{
max=t[0];
loc=j;
}
}
System.out.println(loc); }
testOut.dump() 结果为 [0 0 0 0 0 0 0 0 0 0] 我对此很陌生,但我对神经网络有“体面”的理解。如果有任何帮助,我将不胜感激。
【问题讨论】:
-
您可以在此处获取 MNIST:yann.lecun.com/exdb/mnist。你检查输入矩阵的值了吗?他们是对的吗?
-
很难说你的问题到底是什么。您能否编辑您的问题以明确它是什么?
-
对不起。基本上,我的神经网络不工作。我想知道我是否设置正确。基本上我在输入层有 400 个节点,在隐藏层有 25 个节点,在输出层有 10 个节点。它只是给出并输出 [0 0 0 0 0 0 0 0 0 0]。
标签: opencv neural-network ocr