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