Exemple #1
0
        public override InternalArray Forward(InternalArray ar)
        {
            if (ar.QIntData != null)
            {
                ar.Data = new float[ar.QIntData.Length];
                for (int i = 0; i < ar.QIntData.Length; i++)
                {
                    ar.Data[i] = ar.QIntData[i] / 256f;
                }
                ar.QIntData = null;
            }
            InternalArray ret = new InternalArray(new int[] { 1, Weight.Shape[0] });

            for (int j = 0; j < Weight.Shape[0]; j++)
            {
                float acc = 0;
                for (int i = 0; i < Weight.Shape[1]; i++)
                {
                    acc += Weight.Get2D(j, i) * ar.Data[i];
                }
                ret.Data[j] = acc;
                if (Bias != null)
                {
                    ret.Data[j] += Bias.Data[j];
                }
            }
            return(ret);
        }
Exemple #2
0
        public InternalArray Process2DImage(InternalArray ar)
        {
            var hin = ar.Shape[0];
            var win = ar.Shape[1];


            var hout = ((hin + 2 * padding[0] - kernelSize[0]) / stride[0]) + 1;
            var wout = ((win + 2 * padding[1] - kernelSize[1]) / stride[1]) + 1;

            InternalArray ret = new InternalArray(new int[] { hout, wout });

            for (int i = 0; i < hout; i++)
            {
                for (int j = 0; j < wout; j++)
                {
                    float avg = 0;

                    for (int i1 = 0; i1 < kernelSize[0]; i1++)
                    {
                        for (int j1 = 0; j1 < kernelSize[1]; j1++)
                        {
                            var x = i * stride[0] + i1 - kernelSize[0] / 2;
                            var y = j * stride[1] + j1 - kernelSize[1] / 2;
                            if (ar.WithIn(x, y))
                            {
                                avg += ar.Get2D(x, y);
                            }
                        }
                    }
                    avg /= kernelSize[0] * kernelSize[1];
                    ret.Set2D(i, j, avg);
                }
            }

            return(ret);
        }
Exemple #3
0
        public InternalArray Process2DImage(InternalArray ar)
        {
            var hin = ar.Shape[0];
            var win = ar.Shape[1];


            var hout = ((hin + 2 * padding[0] - kernelSize[0]) / stride[0]) + 1;
            var wout = ((win + 2 * padding[1] - kernelSize[1]) / stride[1]) + 1;

            InternalArray ret = new InternalArray(new int[] { hout, wout });

            if (ar.QIntData != null)
            {
                ret.QIntData = new short[ret.Data.Length];
                ret.Data     = null;

                for (int i = 0; i < hout; i++)
                {
                    for (int j = 0; j < wout; j++)
                    {
                        short max = 0;
                        bool  was = false;
                        for (int i1 = 0; i1 < kernelSize[0]; i1++)
                        {
                            for (int j1 = 0; j1 < kernelSize[1]; j1++)
                            {
                                var x = i * stride[0] + i1;
                                var y = j * stride[1] + j1;
                                if (ar.WithIn(x, y))
                                {
                                    if (!was)
                                    {
                                        was = true; max = ar.Get2DQuant(x, y);
                                    }
                                    max = Math.Max(max, ar.Get2DQuant(x, y));
                                }
                            }
                        }
                        //avg /= kernelSize[0] * kernelSize[1];
                        ret.Set2DQuant(i, j, max);
                    }
                }
            }
            else
            {
                for (int i = 0; i < hout; i++)
                {
                    for (int j = 0; j < wout; j++)
                    {
                        float max = 0;
                        bool  was = false;
                        for (int i1 = 0; i1 < kernelSize[0]; i1++)
                        {
                            for (int j1 = 0; j1 < kernelSize[1]; j1++)
                            {
                                var x = i * stride[0] + i1;
                                var y = j * stride[1] + j1;
                                if (ar.WithIn(x, y))
                                {
                                    if (!was)
                                    {
                                        was = true; max = ar.Get2D(x, y);
                                    }
                                    max = Math.Max(max, ar.Get2D(x, y));
                                }
                            }
                        }
                        //avg /= kernelSize[0] * kernelSize[1];
                        ret.Set2D(i, j, max);
                    }
                }
            }
            return(ret);
        }