Ejemplo n.º 1
0
        private void run()
        {
            FPA t1 = PA.Add(PA.InnerProduct(dinput, diwt), theta);             // summation and theta

            FPA ohidden = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t1)), 1.0f)); //applying sigmoid function

            FPA t2 = PA.Add(PA.InnerProduct(ohidden, dowt), tau);              // summation and tau

            FPA ooutput = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t2)), 1.0f));

            FPA oerror = PA.Subtract(doutput, ooutput);                                                                     //numpat no

            FPA herror = PA.Transpose(PA.InnerProduct(dowt, PA.Transpose(oerror, new int[] { 1, 0 })), new int[] { 1, 0 }); // doubtful transpose

            herror = PA.Multiply(PA.Multiply(PA.Subtract(1.0f, t1), t1), herror);

            FPA _owt = PA.Add(dowt, PA.Multiply(PA.InnerProduct(PA.Transpose(t1, new int[] { 1, 0 }), oerror), betao)); // orig no transpose


            FPA _iwt = PA.Multiply(PA.InnerProduct(PA.Transpose(dinput, new int[] { 1, 0 }), herror), betah); //original dinput herror and no transpose

            dtau = PA.Add(PA.Multiply(betao, oerror), dtau);

            dtheta = PA.Add(PA.Multiply(betah, herror), dtheta); //orig oerror

            PA.ToArray(_owt, out owt);
            PA.ToArray(_iwt, out iwt);

            cleanup();
            diwt = new DFPA(iwt);
            dowt = new DFPA(owt);
        }
Ejemplo n.º 2
0
        public FPA LearningRate(FPA t)              //Epsilon(t)
        {
            FPA exponent = -t / m_Theta;
            FPA Epsilont = m_EpsilonInitial * PA.Pow2(PA.Log2(LogBase) * exponent);

            return(Epsilont);
        }
Ejemplo n.º 3
0
        public FPA NeighborhoodRatio(FPA t)          //Sigma(t)
        {
            FPA exponent = -t / m_Theta;
            FPA Sigmat   = m_SigmaInitial * PA.Pow2(PA.Log2(LogBase) * exponent);

            return(Sigmat);
        }
Ejemplo n.º 4
0
        private void run()
        {
            FPA t1 = PA.Add(PA.InnerProduct(dinput, diwt), theta);

            FPA ohidden = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t1)), 1.0f));

            FPA t2 = PA.Add(PA.InnerProduct(ohidden, dowt), tau);

            FPA ooutput = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t2)), 1.0f));

            FPA oerror = PA.Subtract(doutput, ooutput);



            FPA herror = PA.InnerProduct(dowt, PA.Transpose(oerror, new int[] { 1, 0 }));

            herror = PA.InnerProduct(PA.Multiply(PA.Subtract(1.0f, t1), t1), herror);

            FPA _owt = PA.Add(dowt, PA.Multiply(PA.InnerProduct(t1, oerror), betao));

            FPA _iwt = PA.Multiply(PA.InnerProduct(herror, dinput), betah); //original dinput herror

            dtau = PA.Add(PA.Multiply(betao, oerror), dtau);

            dtheta = PA.Add(PA.Multiply(betah, herror), dtheta); //orig herror

            PA.ToArray(_owt, out owt);
            PA.ToArray(_iwt, out iwt);

            diwt = new DFPA(owt);
            dowt = new DFPA(iwt);
        }
Ejemplo n.º 5
0
        public float[] Test(float[] iinput)
        {
            float[,] tinput = new float[1, ni];
            for (int i = 0; i < ni; i++)
            {
                tinput[0, i] = iinput[i];
            }

            dinput = new DFPA(tinput);
            diwt   = new DFPA(iwt);
            dowt   = new DFPA(owt);

            dtheta = PA.Section(dtheta, new Slice(0, 1), new Slice(0, nh));
            dtau   = PA.Section(dtau, new Slice(0, 1), new Slice(0, no));

            FPA t1      = PA.Add(PA.InnerProduct(dinput, diwt), dtheta);
            FPA ohidden = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t1)), 1.0f));
            FPA t2      = PA.Add(PA.InnerProduct(ohidden, dowt), dtau);

            FPA ooutput = PA.Reciprocal(PA.Add(PA.Pow2(PA.Negate(t2)), 1.0f));

            float[,] output;
            float[] routput = new float[no];
            PA.ToArray(ooutput, out output);

            for (int i = 0; i < no; i++)
            {
                routput[i] = output[0, i];
            }

            /*Disposable Floating arrays need to be explicitly "disposed" */
            dinput.Dispose();
            diwt.Dispose();
            dowt.Dispose();
            doutput.Dispose();

            /*Releasing all GPU Resources*/
            PA.UnInit();

            return(routput);
        }
Ejemplo n.º 6
0
        public void DoEpoch(int nb)
        {
            int alen = m_Width * m_Height;

            for (int i = 0; i < nb; ++i)
            {
                //Neighborhood Function
                FPA sbmuc = PA.AddDimension(m_BMUCoord, 1);
                sbmuc = PA.Stretch(sbmuc, 1, alen);
                sbmuc = sbmuc - m_Shape;
                sbmuc = PA.Pow2(sbmuc);
                FPA sqdist = PA.Sum(sbmuc, 0);
                sqdist = PA.AddDimension(sqdist, 0);
                sqdist = PA.Stretch(sqdist, m_PatternLength, 1);
                //PA.Evaluate(sqdist);
                //

                //Learning Rate
                FPA lrate = new FPA((float)_CPU_LearningRate(m_time_val), m_PatternLength, alen);

                /*FPA sLearningRate = PA.AddDimension(LearningRate(m_Time), 1);
                 * sLearningRate = PA.Stretch(sLearningRate, m_PatternLength, alen);*/

                //Difference between units and current pattern
                FPA a   = PA.AddDimension(m_CurrentPatternGPU, 1);
                FPA x   = PA.Stretch(a, 1, alen);
                FPA pol = x - m_Weights;

                //Calcul des deltas
                FPA deltaW = lrate * pol;

                //Mise à jour des poids
                m_Weights = m_Weights + deltaW;

                //Incrémente le compteur de temps
                //m_Time = PA.Add(m_Time, 1.0f);
                m_time_val += 1;
            }
        }