⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 batch mode.cs

📁 Handwriting recognition
💻 CS
字号:
using System;
using System.IO;
using XOR_ANN.GUI;
using XOR_ANN.ANN;

namespace XOR_ANN.Batch_Run
{
	/// <summary>
	/// Summary description for Controller.
	/// </summary>
	public class BatchMode
	{

		public void runABatchFile() 
		{
			SingletonGlobalParameters.instance().BATCH_MODE = true;

			// Use choose the file
			// Let the user choose a LOAD file
			System.Windows.Forms.OpenFileDialog fileDialog = new System.Windows.Forms.OpenFileDialog();
			fileDialog.Filter = "ANN Assignment Batch files (*.csv)|*.csv"; 
			fileDialog.InitialDirectory  = @"C:\temp";
			fileDialog.ShowDialog();
			string fileName = fileDialog.FileName;

			if (File.Exists(fileName))
			{
				// Pull the data out of the file
				BatchDataStructure[]	batchData = this.readBatchFile(fileName);

				// Make space for the output file
				File.Delete("C:\\ANN_Results.csv");
				StreamWriter fileWriter = new StreamWriter(@"C:\ANN_Results.csv");
				fileWriter.WriteLine("Training Data was " + batchData[0].dataFile);
				fileWriter.WriteLine("Test Data was " + batchData[0].testFile);
				fileWriter.WriteLine("Maximum Epochs was " + batchData[0].maximumEpochs);
				// Write Column Headers
				fileWriter.WriteLine("Test No, Learning Rate,Momentum,Hidden Nodes,Error Tolerance,Percentage Convergance, Epochs,Seconds,Converged %, Best Guess %, Converged % on Training Data");
				fileWriter.Close();

				// Loop for each run
				for (int i=0; i<batchData.Length; i++) 
				{
					SingletonGlobalParameters.instance().INPUT_WIDTH	= batchData[i].dataWidth;
					SingletonGlobalParameters.instance().INPUT_HEIGHT	= batchData[i].dataHeight;
					SingletonGlobalParameters.instance().LEARNING_RATE	= batchData[i].learningRate;
					SingletonGlobalParameters.instance().MAXIMUM_EPOCHS = batchData[i].maximumEpochs;
					SingletonGlobalParameters.instance().MOMENTUM		= batchData[i].momentum;
					SingletonGlobalParameters.instance().HIDDEN_NODES	= batchData[i].hiddenNodes;
					SingletonGlobalParameters.instance().OUTPUT_TOLERANCE		= batchData[i].errorTolerance;
					SingletonGlobalParameters.instance().CONVERGE_PERCENTAGE	= batchData[i].percentForConvergence;

					// Make a new Execution engine
					MainFormLogic nonGUILogic = new MainFormLogic();	// using a new class ensures old data has gone
					// Give it the test data
					nonGUILogic.LoadSampleData(batchData[i].dataFile);
					// Now train
					int	epochCount = 0;
					int seconds = 0;
					nonGUILogic.train(out epochCount, out seconds);

					// Test the sample data
					float convergedPercentage;
					float bestguessPercentage;
					float originalDataConvergedPercentage;
					float originalDatabestguessPercentage;

					// Test with sample data	
					nonGUILogic.TestWeightsWithADataFile(batchData[i].testFile, out convergedPercentage, out bestguessPercentage);
					// Retest with original data
					nonGUILogic.TestWeightsWithADataFile(batchData[i].dataFile, out originalDataConvergedPercentage, out originalDatabestguessPercentage);

					fileWriter = new StreamWriter(@"C:\ANN_Results.csv",true);	// append the file
					fileWriter.WriteLine(i + "," +  batchData[i].learningRate + "," +  batchData[i].momentum + "," +
							batchData[i].hiddenNodes + "," + batchData[i].errorTolerance + "," + batchData[i].percentForConvergence + "," + 
							epochCount + "," + seconds + "," + convergedPercentage + "," + bestguessPercentage + "," + originalDataConvergedPercentage);
					// Save the state to "number.pkl"
					File.Delete(@"C:\" + i + ".pkl");
					nonGUILogic.saveData(@"C:\" + i + ".pkl");
					fileWriter.Close();
				}

					// Execute 
				    // Update outputfile
			}
			SingletonGlobalParameters.instance().BATCH_MODE = false;
		}
	
		private	BatchDataStructure[] readBatchFile(string pFileName) 
		{
			BatchDataStructure[]	output = new BatchDataStructure[100];	//xyzzy note this is set to 100!!!
			StreamReader fileReader = new StreamReader(pFileName);

			// Read the header
			string  sampleDataFile	= this.getNextHeaderParameter(fileReader);
			string  trainDataFile	= this.getNextHeaderParameter(fileReader);
			int		dataWidth		= Convert.ToInt32(this.getNextHeaderParameter(fileReader));
			int		dataHeight		= Convert.ToInt32(this.getNextHeaderParameter(fileReader));
			int		maximumEpochs	= Convert.ToInt32(this.getNextHeaderParameter(fileReader));

			// Initialise DataStructure
			for (int i=0; i<output.Length; i++) 
			{
				output[i]	= new BatchDataStructure();
				output[i].dataFile		= sampleDataFile;
				output[i].testFile		= trainDataFile;
				output[i].dataWidth		= dataWidth;
				output[i].dataHeight	= dataHeight;
				output[i].maximumEpochs	= maximumEpochs;
			}

			// Read every data line (each line is one run)
			fileReader.ReadLine();	// Ingore the headers
			this.readDataLines(fileReader, ref output);
			fileReader.Close();	// Close file

			return output;
		}

		private	string	getNextHeaderParameter(StreamReader pFileReader) 
		{
			string	workingString	= pFileReader.ReadLine();
			workingString	= workingString.Substring(workingString.IndexOf(",")+1);
			workingString	= workingString.Substring(0, workingString.IndexOf(","));
			return workingString;
		}

		private	void readDataLines(StreamReader pFileReader, ref BatchDataStructure[] pOutput) 
		{
			int rowsToProcess = -1;
			while (1==1) 
			{
				string	workingString	= pFileReader.ReadLine();
				if (workingString == null)
					break;
				rowsToProcess++;

				// Parse the current row
				string[] parsedString = workingString.Split(',');
				pOutput[rowsToProcess].learningRate				= (float)Convert.ToDouble(parsedString[0]);
				pOutput[rowsToProcess].momentum					= (float)Convert.ToDouble(parsedString[1]);
				pOutput[rowsToProcess].hiddenNodes				= Convert.ToInt32(parsedString[2]);
				pOutput[rowsToProcess].errorTolerance			= (float)Convert.ToDouble(parsedString[3]);
				pOutput[rowsToProcess].percentForConvergence	= (float)Convert.ToDouble(parsedString[4]);
			}

			// Resize the Array
			BatchDataStructure[] pWorking= new BatchDataStructure[rowsToProcess+1];
			Array.Copy(pOutput, 0, pWorking, 0, rowsToProcess+1);
			pOutput = pWorking;
		}



	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -