手写字识别C++

来源:互联网 发布:ai软件工具介绍 编辑:程序博客网 时间:2024/05/15 23:47

https://www.codeproject.com/articles/16650/neural-network-for-recognition-of-handwritten-digi

http://m.blog.csdn.net/article/details?id=50605340

1、其在训练反馈神经网络时的一些参数说明,如下:


a、其中的MSE变量是使用训练集里的200个pattern计算的,其显示是在文件DlgNeuralNet.cpp里的地321行,

在自定义函数afx_msg LRESULT CDlgNeuralNet::OnBackpropagationNotification(WPARAM wParam, LPARAM lParam)。

b、其计算是不断累加m_dRecentMses里的前两百个pattern误差值,后面将介绍其计算方法。m_dRecentMses是deque队列,其是使用了m_dRecentMses.pop_front();来保证

后面push的数在前面。

c、其这里的MSE值是来自:MNistDoc.cpp文件里的1969行,这个计算公式是:dMSE += ( actualOutputVector[ii]-targetOutputVector[ii] ) * ( actualOutputVector[ii]-targetOutputVector[ii] );,然后把这个值进行放大,当传送给自定义函数后又进行缩小,其实这步可以省略。

d、这里的pattern number也是通过相同的自定义函数实现的。

2、反馈的误差计算公式是在NeuralNetwork.cpp文件里205行,公式为:dErr_wrt_dXlast[ ii ] = actualOutput[ ii ] - desiredOutput[ ii ];其中ii为for ( ii=0; ii<(*lit)->m_Neurons.size(); ++ii )  接着就利用官网的计算公式进行反向传播。

b、这里的actualOutput,desiredOutput是经过特殊出来的,其中的desiredOutput里有10个值,只有两类1、-1.其中是label位的那个值被置为1;不是则置为-1.

而这里的actualOutput值是经过tanh激活后的值,其是在1到-1之间。其代码位于DlgCharacterImage.cpp里的356行,如下:










0 0
原创粉丝点击