Example #1
0
        /// <summary>
        /// Day dream - Reconstruct a randrom matrix (An interesting way of seeing strong features the machine has learnt)
        /// </summary>
        /// <param name="numberOfSamples">How many images/dreams</param>
        /// <returns>Array of Reconstructed dreams</returns>
        public double[][] DayDream(int numberOfSamples)
        {
            var data = RealMatrix.Ones(numberOfSamples, m_numVisibleElements + 1);

            data.Update(0, 1, Distributions.UniformRandromMatrixBool(1, m_numVisibleElements), 1);

            for (int i = 0; i < numberOfSamples; i++)
            {
                var visible            = data.Submatrix(i, 0, 1).ToVector();
                var hidden_activations = (visible * m_weights).ToVector();
                var hidden_probs       = ActivationFunctions.Logistic(hidden_activations);
                var hidden_states      = hidden_probs > RVector.Random(m_numHiddenElements + 1);
                hidden_states[0] = 1;

                var visible_activations = (hidden_states * m_weights.Transpose).ToVector();
                var visible_probs       = ActivationFunctions.Logistic(visible_activations);
                var visible_states      = visible_probs > RVector.Random(m_numVisibleElements + 1);
                data.Update(visible_states, 0, false, i, 0);
            }

            return(data.Submatrix(0, 1).ToArray());
        }