用于识别C#中手写数字的神经网络
发布时间:2020-12-15 22:17:11 所属栏目:百科 来源:网络整理
导读:我已经通过一个名为Vietdungiitb的代码项目撰稿人,完成了关于C#中手写数字识别神经网络的非常好的代码项目文章. 这是项目的链接: http://www.codeproject.com/Articles/143059/Neural-Network-for-Recognition-of-Handwritten-Digi 但是,有一个代码示例提供
我已经通过一个名为Vietdungiitb的代码项目撰稿人,完成了关于C#中手写数字识别神经网络的非常好的代码项目文章.
这是项目的链接: http://www.codeproject.com/Articles/143059/Neural-Network-for-Recognition-of-Handwritten-Digi 但是,有一个代码示例提供,我运行代码,但我有这个错误’格式异常未处理’. 在Preferences.cs文件中. private void Get(string lpAppName,string lpKeyName,out double nDefault) { nDefault = Convert.ToDouble(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return; } 上面的代码行产生了运行时异常. System.FormatException was unhandled HResult=-2146233033 Message=Input string was not in a correct format. Source=mscorlib StackTrace: at System.Number.ParseDouble(String value,NumberStyles options,NumberFormatInfo numfmt) at System.Convert.ToDouble(String value) at NeuralNetworkLibrary.Preferences.Get(String lpAppName,String lpKeyName,Double& nDefault) in c:UsersPC_USERDownloadsExampleCode ProjectsourceHandwrittenRecognitionNeuralNetworkLibraryArchiveSerializationPreferences.cs:line 178 at NeuralNetworkLibrary.Preferences.ReadIniFile() in c:UsersPC_USERDownloadsExampleCode ProjectsourceHandwrittenRecognitionNeuralNetworkLibraryArchiveSerializationPreferences.cs:line 109 at NeuralNetworkLibrary.Preferences..ctor() in c:UsersPC_USERDownloadsExampleCode ProjectsourceHandwrittenRecognitionNeuralNetworkLibraryArchiveSerializationPreferences.cs:line 97 at HandwrittenRecogniration.Mainform..ctor() in c:UsersPC_USERDownloadsExampleCode ProjectsourceHandwrittenRecognitionHandwrittenRecognitionMainform.cs:line 66 at HandwrittenRecogniration.Program.Main() in c:UsersPC_USERDownloadsExampleCode ProjectsourceHandwrittenRecognitionHandwrittenRecognitionProgram.cs:line 18 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly,String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile,Evidence assemblySecurity,String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback callback,Object state,Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: 没有为这个问题提供足够的答案.所以,我想知道当他们运行这个项目时是否有人遇到过这个问题? 完整的Preferences.cs如下. using System; namespace NeuralNetworkLibrary { public class Preferences { public const int g_cImageSize = 28; public const int g_cVectorSize = 29; public int m_cNumBackpropThreads; public uint m_nMagicTrainingLabels; public uint m_nMagicTrainingImages; public uint m_nItemsTrainingLabels; public uint m_nItemsTrainingImages; public int m_cNumTestingThreads; public int m_nMagicTestingLabels; public int m_nMagicTestingImages; public uint m_nItemsTestingLabels; public uint m_nItemsTestingImages; public uint m_nRowsImages; public uint m_nColsImages; public int m_nMagWindowSize; public int m_nMagWindowMagnification; public double m_dInitialEtaLearningRate; public double m_dLearningRateDecay; public double m_dMinimumEtaLearningRate; public uint m_nAfterEveryNBackprops; // for limiting the step size in backpropagation,since we are using second order // "Stochastic Diagonal Levenberg-Marquardt" update algorithm. See Yann LeCun 1998 // "Gradianet-Based Learning Applied to Document Recognition" at page 41 public double m_dMicronLimitParameter; public uint m_nNumHessianPatterns; // for distortions of the input image,in an attempt to improve generalization public double m_dMaxScaling; // as a percentage,such as 20.0 for plus/minus 20% public double m_dMaxRotation; // in degrees,such as 20.0 for plus/minus rotations of 20 degrees public double m_dElasticSigma; // one sigma value for randomness in Simard's elastic distortions public double m_dElasticScaling; // after-smoohting scale factor for Simard's elastic distortions private IniFile m_Inifile; //////////// public Preferences() { // set default values m_nMagicTrainingLabels = 0x00000801; m_nMagicTrainingImages = 0x00000803; m_nItemsTrainingLabels = 60000; m_nItemsTrainingImages = 60000; m_nMagicTestingLabels = 0x00000801; m_nMagicTestingImages = 0x00000803; m_nItemsTestingLabels = 10000; m_nItemsTestingImages = 10000; m_nRowsImages = g_cImageSize; m_nColsImages = g_cImageSize; m_nMagWindowSize = 5; m_nMagWindowMagnification = 8; m_dInitialEtaLearningRate = 0.001; m_dLearningRateDecay = 0.794328235; // 0.794328235 = 0.001 down to 0.00001 in 20 epochs m_dMinimumEtaLearningRate = 0.00001; m_nAfterEveryNBackprops = 60000; m_cNumBackpropThreads = 2; m_cNumTestingThreads = 1; // parameters for controlling distortions of input image m_dMaxScaling = 15.0; // like 20.0 for 20% m_dMaxRotation = 15.0; // like 20.0 for 20 degrees m_dElasticSigma = 8.0; // higher numbers are more smooth and less distorted; Simard uses 4.0 m_dElasticScaling = 0.5; // higher numbers amplify the distortions; Simard uses 34 (sic,maybe 0.34 ??) // for limiting the step size in backpropagation,since we are using second order // "Stochastic Diagonal Levenberg-Marquardt" update algorithm. See Yann LeCun 1998 // "Gradient-Based Learning Applied to Document Recognition" at page 41 m_dMicronLimitParameter = 0.10; // since we divide by this,update can never be more than 10x current eta m_nNumHessianPatterns = 500; // number of patterns used to calculate the diagonal Hessian String path = System.IO.Directory.GetCurrentDirectory() + "DataDefault-ini.ini"; m_Inifile = new IniFile(path); ReadIniFile(); } public void ReadIniFile() { // now read values from the ini file String tSection; // Neural Network parameters tSection = "Neural Network Parameters"; Get(tSection,"Initial learning rate (eta)",out m_dInitialEtaLearningRate); Get(tSection,"Minimum learning rate (eta)",out m_dMinimumEtaLearningRate); Get(tSection,"Rate of decay for learning rate (eta)",out m_dLearningRateDecay); Get(tSection,"Decay rate is applied after this number of backprops",out m_nAfterEveryNBackprops); Get(tSection,"Number of backprop threads",out m_cNumBackpropThreads); Get(tSection,"Number of testing threads",out m_cNumTestingThreads); Get(tSection,"Number of patterns used to calculate Hessian",out m_nNumHessianPatterns); Get(tSection,"Limiting divisor (micron) for learning rate amplification (like 0.10 for 10x limit)",out m_dMicronLimitParameter); // Neural Network Viewer parameters tSection = "Neural Net Viewer Parameters"; Get(tSection,"Size of magnification window",out m_nMagWindowSize); Get(tSection,"Magnification factor for magnification window",out m_nMagWindowMagnification); // MNIST data collection parameters tSection = "MNIST Database Parameters"; Get(tSection,"Training images magic number",out m_nMagicTrainingImages); Get(tSection,"Training images item count",out m_nItemsTrainingImages); Get(tSection,"Training labels magic number",out m_nMagicTrainingLabels); Get(tSection,"Training labels item count",out m_nItemsTrainingLabels); Get(tSection,"Testing images magic number",out m_nMagicTestingImages); Get(tSection,"Testing images item count",out m_nItemsTestingImages); Get(tSection,"Testing labels magic number",out m_nMagicTestingLabels); Get(tSection,"Testing labels item count",out m_nItemsTestingLabels); // these two are basically ignored uint uiCount = g_cImageSize; Get(tSection,"Rows per image",out uiCount); m_nRowsImages = uiCount; uiCount = g_cImageSize; Get(tSection,"Columns per image",out uiCount); m_nColsImages = uiCount; // parameters for controlling pattern distortion during backpropagation tSection = "Parameters for Controlling Pattern Distortion During Backpropagation"; Get(tSection,"Maximum scale factor change (percent,like 20.0 for 20%)",out m_dMaxScaling); Get(tSection,"Maximum rotational change (degrees,like 20.0 for 20 degrees)",out m_dMaxRotation); Get(tSection,"Sigma for elastic distortions (higher numbers are more smooth and less distorted; Simard uses 4.0)",out m_dElasticSigma); Get(tSection,"Scaling for elastic distortions (higher numbers amplify distortions; Simard uses 0.34)",out m_dElasticScaling); } private void Get(string lpAppName,out int nDefault) { nDefault = Convert.ToInt32(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return; } private void Get(string lpAppName,out uint nDefault) { nDefault = Convert.ToUInt32(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return; } private void Get(string lpAppName,out double nDefault) { nDefault = Convert.ToDouble(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return; } private void Get(string lpAppName,out byte nDefault) { nDefault = Convert.ToByte(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return ; } private void Get(string lpAppName,out string nDefault) { nDefault = m_Inifile.IniReadValue(lpAppName,lpKeyName); return; } private void Get(string lpAppName,out bool nDefault) { nDefault = Convert.ToBoolean(m_Inifile.IniReadValue(lpAppName,lpKeyName)); return; } } } 解决方法
在这种情况下,问题出在默认.ini文件的小数点.
nDefault = Convert.ToDouble(m_Inifile.IniReadValue(lpAppName,lpKeyName),CultureInfo.InvariantCulture); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |