Exemple #1
0
        /// <summary>
        /// Calculates weights for the hopfield net to learn the specified training
        /// set
        /// </summary>
        /// <param name="trainingSet">
        ///            training set to learn </param>
        public override void learn(DataSet trainingSet)
        {
            int   M             = trainingSet.size();
            int   N             = neuralNetwork.getLayerAt(0).NeuronsCount;
            Layer hopfieldLayer = neuralNetwork.getLayerAt(0);

            for (int i = 0; i < N; i++)
            {
                for (int j = 0; j < N; j++)
                {
                    if (j == i)
                    {
                        continue;
                    }
                    Neuron     ni  = hopfieldLayer.getNeuronAt(i);
                    Neuron     nj  = hopfieldLayer.getNeuronAt(j);
                    Connection cij = nj.getConnectionFrom(ni);
                    Connection cji = ni.getConnectionFrom(nj);
                    double     w   = 0;
                    for (int k = 0; k < M; k++)
                    {
                        DataSetRow trainingSetRow = trainingSet.getRowAt(k);
                        double     pki            = trainingSetRow.Input[i];
                        double     pkj            = trainingSetRow.Input[j];
                        w = w + pki * pkj;
                    }                     // k
                    cij.Weight.Value = w;
                    cji.Weight.Value = w;
                }         // j
            }             // i
        }