Beispiel #1
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Train bias. </summary>
        ///
        /// <param name="PLayer">       The layer. </param>
        /// <param name="PWhich">       The which. </param>
        /// <param name="PPosPhase">    The position phase. </param>
        /// <param name="PNegPhase">    The negative phase. </param>
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        private static void TrainBias(RestrictedBoltzmannMachineLayer PLayer, int PWhich, double PPosPhase, double PNegPhase)
        {
            double biaschange = (learnrate.momentumBiases * PLayer.GetBiasChange(PWhich)) +
                                (learnrate.biases * (PPosPhase - PNegPhase));

            PLayer.SetBiasChange(PWhich, biaschange);
            PLayer.SetBias(PWhich, PLayer.GetBias(PWhich) + biaschange);
        }
Beispiel #2
0
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>   Trains. </summary>
        ///
        /// <param name="PLayerVis">    The layer vis. </param>
        /// <param name="PLayerHid">    The layer HID. </param>
        /// <param name="PData">        The data. </param>
        /// <param name="PLearnRate">   The learn rate. </param>
        /// <param name="PWeightSet">   Set the weight belongs to. </param>
        ////////////////////////////////////////////////////////////////////////////////////////////////////

        public static void Train(RestrictedBoltzmannMachineLayer PLayerVis,
                                 RestrictedBoltzmannMachineLayer PLayerHid, TrainingData PData,
                                 RestrictedBoltzmannMachineLearningRate PLearnRate,
                                 RestrictedBoltzmannMachineWeightSet PWeightSet)
        {
            weightset = PWeightSet;
            learnrate = PLearnRate;
            for (int i = 0; i < PLayerVis.Count; i++)
            {
                for (int j = 0; j < PLayerHid.Count; j++)
                {
                    TrainWeight(i, j, CalculateTrainAmount(PData.posVisible[i], PData.posHidden[j],
                                                           PData.negVisible[i], PData.negHidden[j]));
                }
                TrainBias(PLayerVis, i, PData.posVisible[i], PData.negVisible[i]);
            }
            for (int j = 0; j < PLayerHid.Count; j++)
            {
                TrainBias(PLayerHid, j, PData.posHidden[j], PData.negHidden[j]);
            }
        }