コード例 #1
0
        public override Tensor GlobalAvgVariancePool2D(Tensor X)
        {
            var O  = NewTensor(X.batch, 2, 1, X.channels);
            var fn = BestKernel(ComputeKernelLibrary.GlobalPool2D(X.shape, O.shape, "GlobalAvgVariancePool2D"));

            fn.SetTensor("X", X.shape, Pin(X).buffer);
            fn.SetTensor("O", O.shape, Pin(O).buffer);

            fn.Dispatch();
            return(O);
        }
コード例 #2
0
        protected virtual Tensor GlobalPool2D(string smallKernelName, string globalKernelName, Tensor X)
        {
            // downsample with pyramid approach
            while (X.height * X.width >= 256)
            {
                var pool   = new [] { 4, 4 };
                var stride = pool;
                var noPad  = new[] { 0, 0, 0, 0 };

                var lastLength = X.length;
                X = Pool2D(smallKernelName, X, pool, stride, noPad);
                Assert.IsTrue(X.length < lastLength);
            }

            var O  = NewTensor(X.batch, 1, 1, X.channels);
            var fn = BestKernel(ComputeKernelLibrary.GlobalPool2D(X.shape, O.shape, globalKernelName));

            fn.SetTensor("X", X.shape, Pin(X).buffer);
            fn.SetTensor("O", O.shape, Pin(O).buffer);

            fn.Dispatch();
            return(O);
        }