private void init(StochasticLayer hidden, StochasticLayer visible)
        {
            this.hidden = hidden;
            this.visible = visible;

            inputsCount = hidden.InputsCount;
            hiddenCount = hidden.Neurons.Length;

            weightsGradient = new double[inputsCount][];
            for (int i = 0; i < weightsGradient.Length; i++)
                weightsGradient[i] = new double[hiddenCount];

            visibleBiasGradient = new double[inputsCount];
            hiddenBiasGradient = new double[hiddenCount];

            weightsUpdates = new double[inputsCount][];
            for (int i = 0; i < weightsUpdates.Length; i++)
                weightsUpdates[i] = new double[hiddenCount];

            visibleBiasUpdates = new double[inputsCount];
            hiddenBiasUpdates = new double[hiddenCount];

            storage = new ThreadLocal<ParallelStorage>(() =>
                new ParallelStorage(inputsCount, hiddenCount));
        }
        /// <summary>
        ///   Creates a new <see cref="RestrictedBoltzmannMachine"/>.
        /// </summary>
        ///
        /// <param name="function">The activation function to use in the network neurons.</param>
        /// <param name="inputsCount">The number of inputs for the machine.</param>
        /// <param name="hiddenNeurons">The number of hidden neurons in the machine.</param>
        ///
        public RestrictedBoltzmannMachine(IStochasticFunction function, int inputsCount, int hiddenNeurons)
            : base(function, inputsCount, 1)
        {
            this.visible = new StochasticLayer(function, inputsCount, hiddenNeurons);
            this.hidden  = new StochasticLayer(function, hiddenNeurons, inputsCount);

            base.layers[0] = hidden;
        }
        /// <summary>
        ///   Creates a new <see cref="RestrictedBoltzmannMachine"/>.
        /// </summary>
        ///
        /// <param name="hidden">The hidden layer to be added in the machine.</param>
        /// <param name="visible">The visible layer to be added in the machine.</param>
        ///
        public RestrictedBoltzmannMachine(StochasticLayer hidden, StochasticLayer visible)
            : base(null, hidden.InputsCount, 0)
        {
            this.hidden  = hidden;
            this.visible = visible;

            base.layers[0] = hidden;
        }
示例#4
0
 private void createAlgorithms()
 {
     algorithms = new IUnsupervisedLearning[network.Machines.Count];
     for (int i = 0; i < network.Machines.Count; i++)
     {
         StochasticLayer hidden  = network.Machines[i].Hidden;
         StochasticLayer visible = network.Machines[i].Visible;
         algorithms[i] = configure(hidden, visible, i);
     }
 }
 /// <summary>
 ///   Creates a new <see cref="ContrastiveDivergenceLearning"/> algorithm.
 /// </summary>
 /// 
 /// <param name="hidden">The hidden layer of the hidden-visible layer pair to be trained.</param>
 /// <param name="visible">The visible layer of the hidden-visible layer pair to be trained.</param>
 /// 
 public ContrastiveDivergenceLearning(StochasticLayer hidden, StochasticLayer visible)
 {
     init(hidden, visible);
 }