static void Main(string[] args) { int epochcount = 6000; int logPointC = 4000; /*basic XOR test in few updates * O - O \ * X O * O - O / * */ NeuralDataSet dataForLearning = CreateNewData(1); NeuralNetwork.NeuralNetwork neuralNetwork = new NeuralNetwork.NeuralNetwork(new int[] { 40 }, 2, 1); DateTime time = DateTime.Now; neuralNetwork.Initialise(); neuralNetwork.StudySpeed = 0.1; neuralNetwork.studyMoment = 0.1; neuralNetwork.RandomiseWeights(); neuralNetwork.SetDataSet(dataForLearning); string log = neuralNetwork.StudyHyperbola(epochcount, logPointC); TimeSpan dif = DateTime.Now - time; Console.WriteLine("Initialising and studiing for {1} epoches succesful, time spent: {0}", dif.ToString(), epochcount); System.IO.StreamWriter writer = new StreamWriter("C:\\Users\\Aleksandr\\Desktop\\log.csv", false); writer.WriteLine(log); writer.Close(); TestNN(neuralNetwork); Console.ReadKey(); }
/// <summary> /// Create a new manager based on a repository available as an XML stream (e.g. StreamReader or StringReader). /// </summary> /// <param name="reader">A TextReader that maps e.g. to a readable file stream.</param> /// <returns>The manager instance bound to the loaded repository.</returns> public static Manager ReadRepository(TextReader reader) { NeuralDataSet database = new NeuralDataSet(); database.ReadXml(reader, System.Data.XmlReadMode.IgnoreSchema); return(new Manager(database)); }
static NeuralDataSet CreateNewData(int repitTimes) { Double[] d1 = new double[] { 0, 0 }; double[] do1 = new double[] { 0 }; Double[] d2 = new double[] { 0, 1 }; double[] do2 = new double[] { 1 }; Double[] d3 = new double[] { 1, 0 }; double[] do3 = new double[] { 1 }; Double[] d4 = new double[] { 1, 1 }; double[] do4 = new double[] { 0 }; NeuralDataSet data = new NeuralDataSet() { Inputs = new double[repitTimes * 4][], ExpectedResult = new double[repitTimes * 4][] }; for (int i = 0; i < (repitTimes); i++) { data.Inputs[i] = d1; data.ExpectedResult[i] = do1; } for (int i = repitTimes; i < (repitTimes * 2); i++) { data.Inputs[i] = d2; data.ExpectedResult[i] = do2; } for (int i = repitTimes * 2; i < (repitTimes * 3); i++) { data.Inputs[i] = d3; data.ExpectedResult[i] = do3; } for (int i = repitTimes * 3; i < (repitTimes * 4); i++) { data.Inputs[i] = d4; data.ExpectedResult[i] = do4; } return(data); }
/// <summary> /// Create a manager with an empty repository. /// </summary> public Manager() { database = new NeuralDataSet(); }
/// <summary> /// Create a manager with the passed repository. /// </summary> /// <param name="repository">The repository to work with.</param> public Manager(NeuralDataSet repository) { database = repository; }
private NeuralDataSet.TrainingItemRow[] SelectTrainingItemsFromTrainingSet(NeuralDataSet.TrainingSetsRow trainingSet) { return (NeuralDataSet.TrainingItemRow[])database.TrainingItem.Select("tiFK_trainingset = " + trainingSet.trID); }
private void AppendNeuronsToNeuronMap(Hashtable map, NeuralDataSet.NeuronsRow[] rows, Layer layer) { for(int i=0;i<rows.Length;i++) map.Add(rows[i].neID,layer[i]); }
private NeuralDataSet.NeuronsRow[] SelectNeuronsFromLayer(NeuralDataSet.LayersRow layer) { return (NeuralDataSet.NeuronsRow[])database.Neurons.Select("neFK_layer = " + layer.laID); }
private NeuralDataSet.LayersRow[] SelectLayersFromNetwork(NeuralDataSet.NetworksRow network) { return (NeuralDataSet.LayersRow[])database.Layers.Select("laFK_network = " + network.nwID); }
private void SaveTrainingSet(NeuralDataSet.TrainingSetsRow trainingSetRow) { NeuralDataSet.SynapsesRow[] synapseRows = SelectSynapsesFromNetwork(currentNetworkRow); for(int i=0;i<synapseRows.Length;i++) database.TrainingItem.AddTrainingItemRow(trainingSetRow,synapseRows[i],((Synapse)currentSynapseMap[synapseRows[i].syID]).Weight); }
private void SaveNetworkStructureAsCurrent(NeuralDataSet.NetworksRow networkRow, Network network) { Hashtable neuronInvMap = new Hashtable(); currentNeuronMap = new Hashtable(); currentSynapseMap = new Hashtable(); Layer layer = network.FirstLayer; SaveLayerAsCurrent(neuronInvMap,layer,networkRow); while(layer.TargetLayer != null) { layer = layer.TargetLayer; SaveLayerAsCurrent(neuronInvMap,layer,networkRow); } foreach(Neuron neuron in neuronInvMap.Keys) foreach(Synapse synapse in neuron.SourceSynapses) { NeuralDataSet.SynapsesRow row = database.Synapses.AddSynapsesRow((NeuralDataSet.NeuronsRow)neuronInvMap[synapse.SourceNeuron],(NeuralDataSet.NeuronsRow)neuronInvMap[neuron],networkRow); currentSynapseMap.Add(row.syID,synapse); } }
private void SaveLayerAsCurrent(Hashtable neuronInvMap, Layer layer, NeuralDataSet.NetworksRow networkRow) { NeuralDataSet.LayersRow layerRow = database.Layers.AddLayersRow(networkRow,layer.Title); for(int i=0;i<layer.Count;i++) { NeuralDataSet.NeuronsRow row = database.Neurons.AddNeuronsRow(layerRow); neuronInvMap.Add(layer[i],row); currentNeuronMap.Add(row.neID,layer[i]); } }
private void SaveLayer(Hashtable neuronInvMap, Layer layer, NeuralDataSet.NetworksRow networkRow) { NeuralDataSet.LayersRow layerRow = database.Layers.AddLayersRow(networkRow,layer.Title); for(int i=0;i<layer.Count;i++) neuronInvMap.Add(layer[i],database.Neurons.AddNeuronsRow(layerRow)); }
private void LoadTrainingSet(NeuralDataSet.TrainingSetsRow trainingSetRow) { NeuralDataSet.TrainingItemRow[] itemRows = SelectTrainingItemsFromTrainingSet(trainingSetRow); for(int i=0;i<itemRows.Length;i++) ((Synapse)currentSynapseMap[itemRows[i].tiFK_synapse]).Weight = itemRows[i].ti_weight; }
private NeuralDataSet.SynapsesRow[] SelectSynapsesFromNetwork(NeuralDataSet.NetworksRow network) { return (NeuralDataSet.SynapsesRow[])database.Synapses.Select("syFK_network = " + network.nwID); }
/// <summary> /// Create a new manager based on a repository available as an XML stream (e.g. StreamReader or StringReader). /// </summary> /// <param name="reader">A TextReader that maps e.g. to a readable file stream.</param> /// <returns>The manager instance bound to the loaded repository.</returns> public static Manager ReadRepository(TextReader reader) { NeuralDataSet database = new NeuralDataSet(); database.ReadXml(reader,System.Data.XmlReadMode.IgnoreSchema); return new Manager(database); }