Ejemplo n.º 1
0
        public void I_should_be_able_to_save_and_load_a_pretrained_neural_network(
            int inputCount,
            int hiddenCount,
            int outputCount)
        {
            // Arrange
            var originalNetwork = new TinyNeuralNetwork(inputCount, hiddenCount, outputCount);

            // Act
            originalNetwork.Save(_filePath);
            var loadedNetwork = TinyNeuralNetwork.Load(_filePath);

            // Assert
            loadedNetwork.Should().BeEquivalentTo(originalNetwork);
        }
Ejemplo n.º 2
0
        public void Given_a_xor_truth_table_neural_network_should_learn_the_xor_operation()
        {
            // Arrange
            var input = new float[][]
            {
                new [] { 1f, 1f },
                new [] { 1f, 0f },
                new [] { 0f, 1f },
                new [] { 0f, 0f },
            };
            var expected = new float[][]
            {
                new [] { 0f },
                new [] { 1f },
                new [] { 1f },
                new [] { 0f },
            };

            var network      = new TinyNeuralNetwork(2, 4, 1);
            var learningRate = 1f;

            for (int i = 0; i < 1000; i++)
            {
                for (int j = 0; j < input.Length; j++)
                {
                    network.Train(input[j], expected[j], learningRate);
                }
                Shuffle(input, expected);
                learningRate *= .99f;
            }

            // Act
            var actualCategorical = input.Select(network.Predict);

            // Assert
            var actualNumeric   = actualCategorical.Select(x => Math.Round(x[0]));
            var expectedNumeric = expected.Select(x => x[0]);

            actualNumeric.Should().BeEquivalentTo(expectedNumeric);
        }