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(); }
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(); }