首页 / 神经网络 / 用于识别C#中手写数字的神经网络
用于识别C#中手写数字的神经网络
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了用于识别C#中手写数字的神经网络,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9345字,纯文字阅读大概需要14分钟。
内容图文
![用于识别C#中手写数字的神经网络](/upload/InfoBanner/zyjiaocheng/772/88d5d605ac554209a2aa0fd314aea0f5.jpg)
我已经通过一个名为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:\Users\PC_USER\Downloads\Example\Code Project\source\HandwrittenRecognition\NeuralNetworkLibrary\ArchiveSerialization\Preferences.cs:line 178
at NeuralNetworkLibrary.Preferences.ReadIniFile() in c:\Users\PC_USER\Downloads\Example\Code Project\source\HandwrittenRecognition\NeuralNetworkLibrary\ArchiveSerialization\Preferences.cs:line 109
at NeuralNetworkLibrary.Preferences..ctor() in c:\Users\PC_USER\Downloads\Example\Code Project\source\HandwrittenRecognition\NeuralNetworkLibrary\ArchiveSerialization\Preferences.cs:line 97
at HandwrittenRecogniration.Mainform..ctor() in c:\Users\PC_USER\Downloads\Example\Code Project\source\HandwrittenRecognition\HandwrittenRecognition\Mainform.cs:line 66
at HandwrittenRecogniration.Program.Main() in c:\Users\PC_USER\Downloads\Example\Code Project\source\HandwrittenRecognition\HandwrittenRecognition\Program.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, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, 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() + "\\Data\\Default-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, string lpKeyName, out int nDefault)
{
nDefault = Convert.ToInt32(m_Inifile.IniReadValue(lpAppName, lpKeyName));
return;
}
private void Get(string lpAppName, string lpKeyName, out uint nDefault)
{
nDefault = Convert.ToUInt32(m_Inifile.IniReadValue(lpAppName, lpKeyName));
return;
}
private void Get(string lpAppName, string lpKeyName, out double nDefault)
{
nDefault = Convert.ToDouble(m_Inifile.IniReadValue(lpAppName, lpKeyName));
return;
}
private void Get(string lpAppName, string lpKeyName, out byte nDefault)
{
nDefault = Convert.ToByte(m_Inifile.IniReadValue(lpAppName, lpKeyName));
return ;
}
private void Get(string lpAppName, string lpKeyName, out string nDefault)
{
nDefault = m_Inifile.IniReadValue(lpAppName, lpKeyName);
return;
}
private void Get(string lpAppName, string lpKeyName, out bool nDefault)
{
nDefault = Convert.ToBoolean(m_Inifile.IniReadValue(lpAppName, lpKeyName));
return;
}
}
}
解决方法:
在这种情况下,问题出在默认.ini文件的小数点.
nDefault = Convert.ToDouble(m_Inifile.IniReadValue(lpAppName, lpKeyName), CultureInfo.InvariantCulture);
内容总结
以上是互联网集市为您收集整理的用于识别C#中手写数字的神经网络全部内容,希望文章能够帮你解决用于识别C#中手写数字的神经网络所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。