static void Real() { var inputLayer = new InputLayer3D(1, 1, 1); var outputLayer = new OutputLayer(1) { ActivationFunction = new ConstOutputArrayFunction() }; var dataProvider = new FunctionProvider(); InitializeTrainingData(dataProvider.TrainData); var perceptron1 = new PerceptronLayer(10, 2) { ActivationFunction = new SigmoidFunction() }; var perceptron2 = new PerceptronLayer(10, 10) { ActivationFunction = new SigmoidFunction() }; var perceptron3 = new PerceptronLayer(8, 10) { ActivationFunction = new SigmoidFunction() }; var perceptron4 = new PerceptronLayer(6, 8) { ActivationFunction = new SigmoidFunction() }; var perceptron5 = new PerceptronLayer(2, 6) { ActivationFunction = new SigmoidFunction() }; MultiLayerPerceptron network = new MultiLayerPerceptron { InputLayer = inputLayer, OutputLayer = outputLayer, DataProvider = dataProvider }; network.HiddenLayers.Add(perceptron1); network.HiddenLayers.Add(perceptron2); network.HiddenLayers.Add(perceptron3); network.HiddenLayers.Add(perceptron4); network.HiddenLayers.Add(perceptron5); var trainer = new FCTrainer(network, 10, 1, dataProvider); trainer.Train(1); var error = network.Test(1); }
static void OneTrainingData() { var inputLayer = new InputLayer3D(1, 1, 3); var outputLayer = new OutputLayer(2) { ActivationFunction = new ConstOutputArrayFunction() }; var weight1 = new List <Array3D> { new Array3D(0.1, 0.3), new Array3D(0.3, 0.1) }; var weight2 = new List <Array3D> { new Array3D(0.4, 0.5), new Array3D(0.3, 0.5) }; var perceptron1 = new PerceptronLayer(weight1) { ActivationFunction = new SigmoidFunction() }; var perceptron2 = new PerceptronLayer(weight2) { ActivationFunction = new SigmoidFunction() }; var dataProvider = new FunctionProvider { TrainData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0.3, 0.4, 0.5), Expected = new Array3D(0.2, 0.6) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(0.2, 0.4, 0.7), Expected = new Array3D(0.1, 0.8) } } }; var network = new MultiLayerPerceptron { InputLayer = inputLayer, OutputLayer = outputLayer, DataProvider = dataProvider }; network.HiddenLayers.Add(perceptron1); network.HiddenLayers.Add(perceptron2); var trainer = new FCTrainer(network, 2, 1, dataProvider); trainer.Train(100); }
private static void OneData() { var trainImage = @"C:\Programming\ConvolutionNeuralNetwork\Images\Train\One\One_0.jpg"; var expected = new Array3D(0, 1, 0, 0, 0, 0, 0, 0, 0, 0); var network = new ConvolutionNN { InputLayer = new InputLayer3D(28, 28), OutputLayer = new OutputLayer(10), DataProvider = new OneIP(trainImage, expected) }; network.HiddenLayers.Add(new ConvolutionalLayer(3, 2, 2, 3)); network.HiddenLayers.Add(new PoolingLayer()); network.HiddenLayers.Add(new ConvolutionalLayer(3, 2, 2, 3)); network.HiddenLayers.Add(new PoolingLayer()); network.HiddenLayers.Add(new NarrowLayer()); network.HiddenLayers.Add(new PerceptronLayer(100, 147)); network.HiddenLayers.Add(new PerceptronLayer(50, 100)); network.HiddenLayers.Add(new PerceptronLayer(10, 50)); var trainer = new FCTrainer(network, 10, 1, network.DataProvider); trainer.Train(1000); }
static void Xor() { const int batchSize = 4; const int epochSize = 16; var inputLayer = new InputLayer3D(1, 1, 1); var outputLayer = new OutputLayer(1) { ActivationFunction = new ConstOutputArrayFunction() }; var dataProvider = new FunctionProvider { TrainData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 1), Expected = new Array3D(1.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 0), Expected = new Array3D(1.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0.0) } }, TestData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 1), Expected = new Array3D(1) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 0), Expected = new Array3D(1) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0) } }, IsQueue = false }; var oneData = new FunctionProvider { TrainData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0.0) } }, IsQueue = false }; var function = new FunctionProvider(x => Math.Pow(x, 2)); var weight1 = new List <Array3D> { new Array3D(0.1, 0.3), new Array3D(0.3, 0.1) }; var weight2 = new List <Array3D> { new Array3D(0.4, 0.5) }; var perceptron1 = new PerceptronLayer(5, 2) { ActivationFunction = new TanhActivationFunction() }; perceptron1.Trainer = new MiniBatchPerceptronTrainer(perceptron1.Neurals, false) { BatchSize = batchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1 }; var perceptron2 = new PerceptronLayer(1, 5) { ActivationFunction = new TanhActivationFunction() }; perceptron2.Trainer = new MiniBatchPerceptronTrainer(perceptron2.Neurals, true) { BatchSize = batchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1 }; var network = new MultiLayerPerceptron { InputLayer = inputLayer, OutputLayer = outputLayer, DataProvider = dataProvider }; network.HiddenLayers.Add(perceptron1); network.HiddenLayers.Add(perceptron2); var trainer = new FCTrainer(network, epochSize, batchSize, dataProvider); trainer.Train(200); }
private void InitializeNetwork() { var inputLayer = new InputLayer3D(1, 1, 1); var outputLayer = new OutputLayer(1) { ActivationFunction = new ConstOutputArrayFunction() }; var dataProvider = new FunctionProvider { TrainData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 1), Expected = new Array3D(1.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 0), Expected = new Array3D(1.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0.0) } }, TestData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 1), Expected = new Array3D(1) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 0), Expected = new Array3D(1) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0) } }, IsQueue = false }; var oneData = new FunctionProvider { TrainData = { new TrainingData <Array3D, Array3D> { Input = new Array3D(0, 0), Expected = new Array3D(0.0) }, new TrainingData <Array3D, Array3D> { Input = new Array3D(1, 1), Expected = new Array3D(0.0) } }, IsQueue = false }; var function = new FunctionProvider(x => Math.Pow(x, 2)); var perceptron1 = new PerceptronLayer(10, 1) { ActivationFunction = new TanhActivationFunction() }; perceptron1.Trainer = new MiniBatchPerceptronTrainer(perceptron1.Neurals, false) { BatchSize = BatchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1 }; var perceptron2 = new PerceptronLayer(1, 10) { ActivationFunction = new TanhActivationFunction() }; perceptron2.Trainer = new MiniBatchPerceptronTrainer(perceptron2.Neurals, true) { BatchSize = BatchSize, ActivationFunction = new TanhActivationFunction(), LearningRate = 0.1, Momentum = 0.1 }; Network = new MultiLayerPerceptron { InputLayer = inputLayer, OutputLayer = outputLayer, DataProvider = function }; Network.HiddenLayers.Add(perceptron1); Network.HiddenLayers.Add(perceptron2); Trainer = new FCTrainer(Network, EpochSize, BatchSize, function); }