static void Main(string[] args) { var dir = ConfigurationManager.AppSettings["FileDirectory"]; var dataSet = new DataSet(); dataSet.Id = 1;//int.Parse(currDir.Split('\\').Last()); var files = Directory.GetFiles(dir+"/singatures").ToList(); //files.Remove(files.Last()); IFeatureExtractor featureEngine = new RadonTransformFeatureExtractor(); foreach (var file in files) { dataSet.Signatures.Add(featureEngine.Extract(file)); } double max = 0; foreach (var st in dataSet.Signatures) { for (int i = 0; i < 8; i++) { for(int j=0; j< 21;j++) if (max < st.Data[i, j]) max = st.Data[i, j]; } } foreach (var st in dataSet.Signatures) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 21; j++) st.Data[i, j] /= max; } } //var network = new NeuralNetworkBp(); //network.Train(dataSet); //var toCheck = Directory.GetFiles(dir +"/test").First(); //var check = featureEngine.Extract(toCheck); //for (int i = 0; i < 8; i++) //{ // for (int j = 0; j < 21; j++) // check.Data[i, j] /= max; //} //network.Verify(check); //var forgeryName = Directory.GetFiles(dir + "/forgery").First(); //var forgery = featureEngine.Extract(forgeryName); //network.Verify(forgery); }
public int Train(DataSet dataSet) { var data = dataSet.Signatures.Select(i => i.Data.Cast<double>().ToArray()).ToArray(); var dict = new Dictionary<string, double[]>(); for (int i = 0; i < data.Count(); i++) { dict.Add((i+1).ToString(), data[i]); } network = new NeuralNetwork<string>(new Layer3<string>(8*21, (int)((double)((8*21 + 4)*FirstLayerParameter)), (int)((double)((8 * 21 + 4) * SecondLayerParameter)), 4), dict); return 1; }
public int Train(DataSet dataSet) { Network = new BasicNetwork(); Network.AddLayer(new BasicLayer(null, true, 8 * 21)); var first = ((8 * 21 + 4) * FirstLayerParameter); Network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, (int)first)); var second = ((8 * 21 + 4) * SecondLayerParameter); Network.AddLayer(new BasicLayer(new ActivationSigmoid(), true, (int)second)); Network.AddLayer(new BasicLayer(null, false, 1)); // Network.AddLayer(new ); Network.Structure.FinalizeStructure(); Network.Reset(); //IMLData x = new BasicNeuralData(); var set = new double[dataSet.Signatures.Count + dataSet.Forgeries.Count][]; var ideal = new double[dataSet.Signatures.Count + dataSet.Forgeries.Count][]; for (int i = 0; i < dataSet.Signatures.Count; i++) { set[i] = dataSet.Signatures[i].Data.Cast<double>().ToArray(); ideal[i] = new double[] {1}; } for (int i = dataSet.Signatures.Count; i < dataSet.Signatures.Count + dataSet.Forgeries.Count; i++) { set[i] = dataSet.Forgeries[i- dataSet.Signatures.Count].Data.Cast<double>().ToArray(); ideal[i] = new double[] { 0 }; } IMLDataSet trainingSet = new BasicMLDataSet(set, ideal); IMLTrain train = new ResilientPropagation(Network, trainingSet); int epoch = 1; var errors = new List<double>(); do { train.Iteration(); // Console.WriteLine(@"Epoch #" + epoch + @" Error:" + train.Error); epoch++; errors.Add(train.Error); } while ( epoch < 10000); train.FinishTraining(); return 1; }
public DataSet GetTeachingDataset(string[] files, string[] forgeries = null) { if(forgeries == null) forgeries = new string[0]; var dataSet = new DataSet(); foreach (var file in files) { dataSet.Signatures.Add(Extract(file)); } foreach (var forgery in forgeries) { dataSet.Forgeries.Add(Extract(forgery)); } //WTF is going on? double max = 0; foreach (var st in dataSet.Signatures) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 21; j++) if (max < st.Data[i, j]) max = st.Data[i, j]; } } foreach (var st in dataSet.Forgeries) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 21; j++) if (max < st.Data[i, j]) max = st.Data[i, j]; } } //foreach (var st in dataSet.Signatures) //{ // for (int i = 0; i < 8; i++) // { // for (int j = 0; j < 21; j++) // st.Data[i, j] /= max; // } //} //foreach (var st in dataSet.Forgeries) //{ // for (int i = 0; i < 8; i++) // { // for (int j = 0; j < 21; j++) // st.Data[i, j] /= max; // } //} return dataSet; }