//////////////////////////////////////////////////////////////////////////////////////////////////// /// <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); }
//////////////////////////////////////////////////////////////////////////////////////////////////// /// <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]); } }