Ejemplo n.º 1
0
        public override int Recognize(string filename)
        {
            List <double> x = AlgsWithFiles.binarImage(filename, baseColor);

            for (int i = 0; i < K; ++i)
            {
                double s = 0;

                for (int j = 0; j < M; ++j)
                {
                    s += weightMatrix[i, j] * x[j];
                }

                s += M / 2.0;

                // здесь s - состояние нейрона первого слоя

                outputs[i] = s;
            }

            Array.Copy(outputs, tmpoutputs, outputs.Length);

            double hammingDist;
            int    indx = -1;

            while (true)
            {
                outputs = Matrix.MultiplyOnVector(feedbackSynapse, tmpoutputs);

                hammingDist = 0;

                for (int i = 0; i < K; ++i)
                {
                    outputs[i] = TresholdFun(outputs[i]);

                    hammingDist += Math.Abs(outputs[i] - tmpoutputs[i]);
                }


                if (hammingDist <= emax)
                {
                    double max = outputs[0];
                    indx = 0;

                    for (int i = 1; i < K; ++i)
                    {
                        if (outputs[i] > max)
                        {
                            max  = outputs[i];
                            indx = i;
                        }
                    }
                    break;
                }

                Array.Copy(outputs, tmpoutputs, outputs.Length);
            }
            return(indx);
        }