Exemple #1
0
        private NeuralTuringMachine[] TrainInternal(double[][] input, double[][] knownOutput)
        {
            NeuralTuringMachine[] machines = new NeuralTuringMachine[input.Length];

            //FORWARD phase
            _machine.InitializeMemoryState();
            machines[0] = new NeuralTuringMachine(_machine);
            machines[0].Process(input[0]);
            for (int i = 1; i < input.Length; i++)
            {
                machines[i] = new NeuralTuringMachine(machines[i - 1]);
                machines[i].Process(input[i]);
            }

            //Gradient reset
            _gradientResetter.Reset();
            _machine.UpdateWeights(_gradientResetter);

            //BACKWARD phase
            for (int i = input.Length - 1; i >= 0; i--)
            {
                machines[i].BackwardErrorPropagation(knownOutput[i]);
            }
            _machine.BackwardErrorPropagation();

            //Weight updates
            _weightUpdater.Reset();
            _machine.UpdateWeights(_weightUpdater);
            return(machines);
        }