示例#1
0
        public void EvenPool()
        {
            var Factory       = Defaults.RawFactory;
            var MeanPoolLayer = new PoolLayer()
            {
                Factory     = Factory,
                InputShape  = new int[] { 3, 4, 4 },
                KernelShape = new int[] { 1, 2, 2 },
                Stride      = new int[] { 1, 2, 2 }
            };

            MeanPoolLayer.Prepare();

            var data = new double[1, 48];

            for (int i = 0; i < 48; i++)
            {
                data[0, i] = i;
            }
            var m = Factory.GetEncryptedMatrix(Matrix <double> .Build.DenseOfArray(data), EMatrixFormat.ColumnMajor, 1);

            Utils.ProcessInEnv(env =>
            {
                var t   = MeanPoolLayer.Apply(m);
                var res = t.Decrypt(env);
                Assert.AreEqual(12, res.ColumnCount);
                Assert.AreEqual(1, res.RowCount);
                var expected = new double[] { 2.5, 4.5, 10.5, 12.5, 18.5, 20.5, 26.5, 28.5, 34.5, 36.5, 42.5, 44.5 };
                for (int i = 0; i < 12; i++)
                {
                    Assert.AreEqual(expected[i], res[0, i]);
                }
                t.Dispose();
                m.Dispose();
            }, Factory);
            MeanPoolLayer.Dispose();
        }
示例#2
0
        public void CryptoNetsPoolLayer()
        {
            OperationsCount.Reset();
            int batchSize = 8192;

            var Factory = new EncryptedSealBfvFactory(new ulong[] { 549764251649 /*, 549764284417*/ }, (ulong)batchSize);


            int weightscale = 32;
            var DenseLayer3 = new PoolLayer()
            {
                Source       = new DummyLayer(),
                InputShape   = new int[] { 5 * 13 * 13 },
                KernelShape  = new int[] { 5 * 13 * 13 },
                Stride       = new int[] { 1000 },
                MapCount     = new int[] { 100 },
                Weights      = CryptoNets.CryptoNets.Transpose(Weights.Weights_1, 5 * 13 * 13, 100),
                Bias         = Weights.Biases_2,
                WeightsScale = weightscale * weightscale,
                Factory      = Factory
            };

            DenseLayer3.Prepare();
            var input = Matrix <double> .Build.Dense(8192, 5 * 13 * 13);

            var m     = Factory.GetEncryptedMatrix(input, EMatrixFormat.ColumnMajor, 1);
            var start = DateTime.Now;
            var z     = DenseLayer3.Apply(m);
            var stop  = DateTime.Now;
            var time  = (stop - start).TotalMilliseconds;

            Console.WriteLine("time {0}", time);
            OperationsCount.Print();
            z.Dispose();
            m.Dispose();
            DenseLayer3.Dispose();
        }