Exemple #1
0
        public void Redraw( )
        {
            var    img = input.Get2DImageFrom4DArray(0, 0);
            Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
            var    gr  = Graphics.FromImage(bmp);

            gr.Clear(Color.White);
            int ww = int.Parse(textBox1.Text);

            for (int i = 0; i < img.Shape[0]; i++)
            {
                for (int j = 0; j < img.Shape[1]; j++)
                {
                    gr.DrawRectangle(Pens.Black, j * ww, i * ww, ww, ww);
                    gr.DrawString(Math.Round(img.Get2D(i, j), 3) + "", new Font("Consolas", 10), Brushes.Black, j * ww, i * ww);
                }
            }
            pictureBox1.Image = bmp;
            MaxPool2d pool = new MaxPool2d(2, 2);
            var       res  = pool.Forward(input);
            var       img2 = res.Get2DImageFrom4DArray(0, 0);


            Bitmap bmp2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);
            var    gr2  = Graphics.FromImage(bmp2);

            gr2.Clear(Color.White);

            for (int i = 0; i < img2.Shape[0]; i++)
            {
                for (int j = 0; j < img2.Shape[1]; j++)
                {
                    gr2.DrawRectangle(Pens.Black, j * ww, i * ww, ww, ww);
                    gr2.DrawString(Math.Round(img2.Get2D(i, j), 3) + "", new Font("Consolas", 10), Brushes.Black, j * ww, i * ww);
                }
            }
            pictureBox2.Image = bmp2;
        }
Exemple #2
0
        /// <summary>
        /// stride=1, kernel=1,padding=0
        /// </summary>
        /// <param name="ar"></param>
        /// <param name="hout"></param>
        /// <param name="wout"></param>
        /// <param name="c"></param>
        /// <param name="hin"></param>
        /// <param name="win"></param>
        /// <returns></returns>
        public InternalArray ProcessImageOptimizedNoPaddingKernel1(InternalArray ar, int hout, int wout, int c, int hin, int win)
        {
            InternalArray ret = new InternalArray(new int[] { outChannels, hout, wout });

            InternalArray[,] filters = new InternalArray[outChannels, c];

            for (int ch = 0; ch < outChannels; ch++)
            {
                for (int zz = 0; zz < c; zz++)
                {
                    var kernel = Weight.Get2DImageFrom4DArray(ch, zz);
                    filters[ch, zz] = kernel;
                }
            }


            Parallel.For(0, hout, (i) =>
            {
                for (int j = 0; j < wout; j++)
                {
                    var index2 = i * ret.offsets[1] + j;
                    for (int ch = 0; ch < outChannels; ch++)
                    {
                        float val = 0;
                        var index = i * ar.offsets[1] + j;
                        for (int zz = 0; zz < c; zz++)
                        {
                            var kernel = filters[ch, zz];
                            val       += kernel.Data[0] * ar.Data[index];
                            index     += ar.offsets[0];
                        }
                        //ret.Data[ch * ret.offsets[0] + i * ret.offsets[1] + j] = val;
                        ret.Data[index2] = val;
                        index2          += ret.offsets[0];
                    }
                }
            });


            return(ret);
        }