/// <summary> /// Estimate the mean of a visible neuron in an RBM. Propagate downward part, from hidden to visible. /// </summary> /// <param name="rbm">The RBM to use.</param> /// <param name="h">The hidden neurons.</param> /// <param name="i">The visible neuron to use.</param> /// <param name="b">Bias value.</param> /// <returns>The estimated mean.</returns> public double PropDown(RestrictedBoltzmannMachine rbm, double[] h, int i, double b) { double sum = 0.0; for (int j = 0; j < rbm.HiddenCount; j++) { sum += rbm.Layer.Weights[j][i] * h[j]; } sum += b; return(RestrictedBoltzmannMachine.Sigmoid(sum)); }
/// <summary> /// Estimate the mean of a hidden neuron in an RBM. Propagate upward part, from visible to hidden. /// </summary> /// <param name="rbm">The RBM to use.</param> /// <param name="v">The input (v), visible neurons.</param> /// <param name="w">The weights.</param> /// <param name="b">The bias.</param> /// <returns>The mean.</returns> public double PropUp(RestrictedBoltzmannMachine rbm, double[] v, double[] w, double b) { double sum = 0.0; for (int j = 0; j < rbm.VisibleCount; j++) { sum += w[j] * v[j]; } sum += b; return(RestrictedBoltzmannMachine.Sigmoid(sum)); }