コード例 #1
0
        private void UpdateNetwork()
        {
            // 6.1 Update hidden layer weights
            for (int i = 0; i < hidden.Neurons.Length; i++)
            {
                StochasticNeuron neuron = hidden.Neurons[i];
                for (int j = 0; j < neuron.Weights.Length; j++)
                {
                    neuron.Weights[j] += weightsUpdates[j][i] - learningRate * decay * neuron.Weights[j];
                }
                neuron.Threshold += hiddenBiasUpdates[i];
            }

            // 6.2 Update visible layer with reverse weights
            for (int i = 0; i < visible.Neurons.Length; i++)
            {
                visible.Neurons[i].Threshold += visibleBiasUpdates[i];
            }
            visible.CopyReversedWeightsFrom(hidden);
        }
コード例 #2
0
        /// <summary>
        ///   Creates a new <see cref="ActivationNetwork"/> from this instance.
        /// </summary>
        ///
        /// <param name="outputs">The number of output neurons in the last layer.</param>
        /// <param name="function">The activation function to use in the last layer.</param>
        ///
        /// <returns>An <see cref="ActivationNetwork"/> containing this network.</returns>
        ///
        public ActivationNetwork ToActivationNetwork(IActivationFunction function, int outputs)
        {
            ActivationNetwork ann = new ActivationNetwork(function,
                                                          inputsCount, hidden.Neurons.Length, outputs);

            // For each neuron
            for (int i = 0; i < hidden.Neurons.Length; i++)
            {
                ActivationNeuron aneuron = ann.Layers[0].Neurons[i] as ActivationNeuron;
                StochasticNeuron sneuron = hidden.Neurons[i];

                // For each weight
                for (int j = 0; j < sneuron.Weights.Length; j++)
                {
                    aneuron.Weights[j] = sneuron.Weights[j];
                }
                aneuron.Threshold          = sneuron.Threshold;
                aneuron.ActivationFunction = sneuron.ActivationFunction;
            }

            return(ann);
        }