Esempio n. 1
0
        private LayerConfiguration GetLayerConfiguration(NumericUpDown neuronCountSelector, ComboBox activationDropdown)
        {
            int    neuronCount  = decimal.ToInt32(neuronCountSelector.Value);
            string selectedItem = (string)activationDropdown.SelectedItem;

            IActivation activation;

            if (selectedItem == "Tanh")
            {
                activation = new HyperbolicTangentActivation();
            }
            else if (selectedItem == "ReLU")
            {
                activation = new RectifiedLinearUnitActivation();
            }
            else if (selectedItem == "Softplus")
            {
                activation = new SoftplusActivation();
            }
            else
            {
                activation = new SigmoidActivation();
            }

            return(new LayerConfiguration(neuronCount, activation));
        }
Esempio n. 2
0
        public void CreateAndCompileModel2()
        {
            Console.WriteLine("Creating model");
            GlobalRandom.InitializeRandom();

            int imgSize = 75;

            ReluActivation    reluActivation    = new ReluActivation();
            SoftmaxActivation softmaxActivation = new SoftmaxActivation();
            SigmoidActivation sigmoidActivation = new SigmoidActivation();

            model = new ConvolutionalNeuralNetwork(imgSize, "grayscale");
            model.Add(new ConvolutionalLayer(5, 5, reluActivation, "valid"));
            model.Add(new MaxPoolingLayer());
            model.Add(new ConvolutionalLayer(5, 3, reluActivation, "valid"));
            model.Add(new MaxPoolingLayer());
            model.Add(new DropoutLayer(0.2));
            model.Add(new FlattenLayer());
            model.Add(new DropoutLayer(0.5));
            model.Add(new DenseLayer(26, sigmoidActivation));

            Console.WriteLine("Model created");

            model.Compile();

            Console.WriteLine("Model compiled");
        }
Esempio n. 3
0
 public LstmLayer(RecurentCellParameters[] cellsParameters, SigmoidActivation sigmoid, HyperbolicActivation tanh)
 {
     InitializeCells(cellsParameters, sigmoid, tanh);
     Input   = new Vector(cellsParameters.First().LengthOfInput);
     Output  = new Vector(cellsParameters.Last().LengthOfOutput);
     Sigmoid = sigmoid;
 }
Esempio n. 4
0
 private void InitializeCells(RecurentCellParameters[] cellsParameters, SigmoidActivation sigmoid, HyperbolicActivation tanh)
 {
     Cells = new List <LstmCell>();
     for (var i = 0; i < cellsParameters.Length; i++)
     {
         Cells.Add(new LstmCell(cellsParameters[i].LengthOfInput, cellsParameters[i].LengthOfOutput,
                                sigmoid, tanh));
     }
 }
Esempio n. 5
0
 private void Calculate()
 {
     if (Inputs.Zeroed() && InputGateSynapses.Zeroed() && ForgetGateSynapses.Zeroed() && OutputGateSypanses.Zeroed())
     {
         cellState       = (inputGateValue * _value) + (forgetGateValue * cellState);
         outputGateValue = SigmoidActivation.Activate(outputGateValue + cellState);
         _value          = TanHActivation.Activate(cellState) * outputGateValue;
         _lastValue      = _value;
     }
 }
Esempio n. 6
0
 public void InputGate(float value)
 {
     inputGateValue += value;
     InputGateSynapses.AccountSignal();
     if (InputGateSynapses.CheckCountAndReset())
     {
         inputGateValue = SigmoidActivation.Activate(inputGateValue + cellState);
         Calculate();
     }
 }
Esempio n. 7
0
 public void ForgetGate(float value)
 {
     forgetGateValue += value;
     ForgetGateSynapses.AccountSignal();
     if (ForgetGateSynapses.CheckCountAndReset())
     {
         forgetGateValue = SigmoidActivation.Activate(forgetGateValue + cellState);
         Calculate();
     }
 }
Esempio n. 8
0
        public XORNetworkLayout()
        {
            var neuronInitializer = new RandomLayerInitializer();
            var outputActivation  = new SigmoidActivation();

            layers = new List <Layer>
            {
                new Layer(2, 3, neuronInitializer, outputActivation),
                new Layer(3, 1, neuronInitializer, outputActivation),
            };

            ConnectLayers();
        }
Esempio n. 9
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="nbInputs"></param>
 /// <param name="structure"></param>
 /// <param name="learningRate"></param>
 public NeuralNetwork(int nbInputs, int[] structure, double learningRate = BASE_LEARNING_RATE)
 {
     ActivationEquation = new SigmoidActivation();
     NbNecessaryInputs  = nbInputs;
     Layout             = structure;
     Layers             = new Layer[structure.Length];
     //On instancie le premier etage des hidden layer.
     Layers[0] = new Layer(structure[0], NbNecessaryInputs);
     //On instancie les etages suivants on mettant le nombre de connexions pour les neurones au nombre de neurones de letage precedent
     for (int i = 1; i < NbLayers; i++)
     {
         Layers[i] = new Layer(structure[i], structure[i - 1]);
     }
 }
Esempio n. 10
0
        public string Upload(ImageData upload)
        {
            string path       = Server.MapPath(@"~/App_Data/network.json");
            var    activation = new SigmoidActivation();
            var    outputList = Enumerable.Range(0, 10).Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList();
            var    network    = new Network(activation, 784, outputList, path);

            string raw = upload.base64Image;

            byte[]    data = Convert.FromBase64String(raw.Substring(raw.IndexOf(',') + 1));
            Bitmap    bitmap;
            const int imageSize = 28;

            using (var inStream = new MemoryStream(data, 0, data.Length))
            {
                using (var outstream = new MemoryStream())
                {
                    using (var imagefactory = new ImageProcessor.ImageFactory())
                    {
                        imagefactory.Load(inStream)
                        .Resize(new ResizeLayer(new Size(imageSize, imageSize), ResizeMode.Stretch))
                        .Filter(MatrixFilters.GreyScale)
                        .Filter(MatrixFilters.Invert)
                        .Flip(true)
                        .Rotate(90)
                        .Save(outstream);
                    }
                    outstream.Position = 0;
                    bitmap             = new Bitmap(outstream);
                }
            }

            var inputs = new List <double>();

            for (int x = 0; x < imageSize; x++)
            {
                for (int y = 0; y < imageSize; y++)
                {
                    Color pixel = bitmap.GetPixel(x, y);
                    inputs.Add(((pixel.R + pixel.G + pixel.B) / 3.0d) / 255.0d);
                }
            }

            network.UpdateNetwork(inputs);
            string result = network.GetMostLikelyAnswer();

            return(string.Format("I think it looks like a {0}", result));
        }
Esempio n. 11
0
        public void SigmoidActivation_Activiation()
        {
            var actual = new float[] { -20, -10, -5, -1, 0, 1, 5, 10, 20 };
            var sut    = new SigmoidActivation();

            sut.Activation(actual);

            var expected = new float[] { 2.06115369E-09f, 4.539787E-05f, 0.006692851f,
                                         0.268941432f, 0.5f, 0.7310586f, 0.9933072f, 0.9999546f, 1 };

            Assert.AreEqual(expected[0], actual[0]);
            Assert.AreEqual(expected[1], actual[1]);
            Assert.AreEqual(expected[2], actual[2]);
            Assert.AreEqual(expected[3], actual[3]);
            Assert.AreEqual(expected[4], actual[4]);
            Assert.AreEqual(expected[5], actual[5]);
            Assert.AreEqual(expected[6], actual[6]);
            Assert.AreEqual(expected[7], actual[7]);
            Assert.AreEqual(expected[8], actual[8]);
        }
        private void okButton_Click(object sender, RoutedEventArgs e)
        {
            ActivationFunction activator = new SigmoidActivation();

            neuralNetwork = new NeuralNetwork();
            neuralNetwork.CreateLayer(activator, inputNeurons, true);

            foreach (TextBox textBox in hiddenNeuronTextBoxes)
            {
                int numberOfNeurons;

                if (Int32.TryParse(textBox.Text, out numberOfNeurons))
                {
                    neuralNetwork.CreateLayer(activator, numberOfNeurons, true);
                }
            }

            neuralNetwork.CreateLayer(activator, outputNeurons, false);

            Close();
        }
Esempio n. 13
0
        public void SigmoidActivation_Derivative()
        {
            var activatedSigmoid = new float[] { 2.06115369E-09f, 4.539787E-05f, 0.006692851f,
                                                 0.268941432f, 0.5f, 0.7310586f, 0.9933072f, 0.9999546f, 1 };

            var actual = new float[9];
            var sut    = new SigmoidActivation();

            sut.Derivative(activatedSigmoid, actual);

            var expected = new float[] { 2.06115369E-09f, 4.53958055E-05f,
                                         0.00664805667f, 0.196611941f, 0.25f, 0.196611926f, 0.006648033f,
                                         4.54166766E-05f, 1 };

            Assert.AreEqual(expected[0], actual[0]);
            Assert.AreEqual(expected[1], actual[1]);
            Assert.AreEqual(expected[2], actual[2]);
            Assert.AreEqual(expected[3], actual[3]);
            Assert.AreEqual(expected[4], actual[4]);
            Assert.AreEqual(expected[5], actual[5]);
            Assert.AreEqual(expected[6], actual[6]);
            Assert.AreEqual(expected[7], actual[7]);
            Assert.AreEqual(expected[8], actual[8]);
        }
 // нужно передать значение активации
 public LstmCell(int lengthOfInput, int lengthOfOutput, SigmoidActivation sigmoid, HyperbolicActivation tanh)
 {
     InitializeData(lengthOfInput, lengthOfOutput);
     Sigmoid = sigmoid;
     Tanh    = tanh;
 }
Esempio n. 15
0
        public static void TestOpenCLTrainingWithConfig(IErrorFunction errorFunc, TrainingConfig.Regularization regularization, float regularizationLambda, float learningRate, bool mix_activations = false)
        {
            IActivationFunction alternateActivation = new SigmoidActivation();

            if (mix_activations)
            {
                alternateActivation = new ReLUActivation();
            }

            int input_neurons = 10;
            var layer_config  = new List <Tuple <IActivationFunction, int> >();

            layer_config.Add(new Tuple <IActivationFunction, int>(new SigmoidActivation(), 512));
            layer_config.Add(new Tuple <IActivationFunction, int>(alternateActivation, 12));
            layer_config.Add(new Tuple <IActivationFunction, int>(new SigmoidActivation(), 3));
            layer_config.Add(new Tuple <IActivationFunction, int>(alternateActivation, 51));
            layer_config.Add(new Tuple <IActivationFunction, int>(new SigmoidActivation(), 30));

            Network networkReference     = Network.CreateNetworkInitRandom(input_neurons, layer_config);
            var     jsonData             = networkReference.ExportToJSON();
            Network networkCpuTrained    = Network.CreateNetworkFromJSON(jsonData);
            Network networkOpenCLTrained = Network.CreateNetworkFromJSON(jsonData);

            var cpuCalculator    = ComputeDeviceFactory.CreateFallbackComputeDevice();
            var openCLCalculator = GetFirstOpenCLDevice();

            var rnd = new Random();
            List <TrainingSuite.TrainingData> trainingData = new List <TrainingSuite.TrainingData>();

            for (int i = 0; i < 1000; i++)
            {
                float[] input  = new float[input_neurons];
                float[] output = new float[layer_config.Last().Item2];

                var idx = rnd.Next(0, input.Length);
                input[rnd.Next(0, input.Length)] = 1.0f;

                for (int j = 0; j < 10; j++)
                {
                    output[j * 3 + 0] = idx * 0.1f;
                    output[j * 3 + 1] = 1.0f - (idx * 0.1f);
                    output[j * 3 + 2] = idx * 0.05f;
                }

                trainingData.Add(new TrainingSuite.TrainingData(input, output));
            }

            TrainingSuite suite = new TrainingSuite(trainingData);

            suite.config.epochs = 1;
            suite.config.shuffleTrainingData = false;
            suite.config.miniBatchSize       = 13;

            suite.config.costFunction         = errorFunc;
            suite.config.regularization       = regularization;
            suite.config.regularizationLambda = regularizationLambda;
            suite.config.learningRate         = learningRate;

            var promise1 = networkCpuTrained.Train(suite, cpuCalculator);
            var promise2 = networkOpenCLTrained.Train(suite, openCLCalculator);

            promise1.Await();
            promise2.Await();

            Assert.IsTrue(promise1.IsReady() && promise2.IsReady());

            float[] testInput = new float[input_neurons];

            var cpuTrainedOutput    = networkCpuTrained.Compute(testInput, cpuCalculator);
            var openCLTrainedOutput = networkOpenCLTrained.Compute(testInput, cpuCalculator);

            ValidateFloatArray(cpuTrainedOutput, openCLTrainedOutput);
        }