示例#1
0
        public void ComputeTwiceGradientShouldYieldTheSameResult()
        {
            const int inputWidth  = 20;
            const int inputHeight = 20;
            const int inputDepth  = 2;

            var layer = new ReluLayer();

            layer.Init(inputWidth, inputHeight, inputDepth);

            // Forward pass
            var input  = BuilderInstance.Volume.Random(new Shape(inputWidth, inputHeight, inputDepth));
            var output = layer.DoForward(input, true);

            // Set output gradients to 1
            var outputGradient = BuilderInstance.Volume.SameAs(new double[output.Shape.TotalLength].Populate(1.0), output.Shape);

            // Backward pass to retrieve gradients
            layer.Backward(outputGradient);
            var step1 = ((Volume.Double.Volume)layer.InputActivationGradients.Clone()).ToArray();

            layer.Backward(outputGradient);
            var step2 = ((Volume.Double.Volume)layer.InputActivationGradients.Clone()).ToArray();

            Assert.IsTrue(step1.SequenceEqual(step2));
        }
示例#2
0
        public void SerializationTest()
        {
            // Create a ReluLayer
            var layer = new ReluLayer();

            layer.Init(10, 10, 3);

            using (var ms = new MemoryStream())
            {
                // Serialize
                IFormatter formatter = new BinaryFormatter();
                formatter.Serialize(ms, layer);

                // Deserialize
                ms.Position = 0;
                var result = formatter.Deserialize(ms) as ReluLayer;

                Assert.AreEqual(layer.InputDepth, result.InputDepth);
                Assert.AreEqual(layer.InputHeight, result.InputHeight);
                Assert.AreEqual(layer.InputWidth, result.InputWidth);
                Assert.AreEqual(layer.OutputDepth, result.OutputDepth);
                Assert.AreEqual(layer.OutputHeight, result.OutputHeight);
                Assert.AreEqual(layer.OutputWidth, result.OutputWidth);
            }
        }
示例#3
0
        public void Instantiation()
        {
            const int inputWidth  = 20;
            const int inputHeight = 20;
            const int inputDepth  = 2;

            var layer = new ReluLayer();

            layer.Init(inputWidth, inputHeight, inputDepth);

            Assert.AreEqual(20, layer.OutputWidth);
            Assert.AreEqual(20, layer.OutputHeight);
            Assert.AreEqual(2, layer.OutputDepth);
        }
示例#4
0
        public void ReluLayerSerialization()
        {
            var layer = new ReluLayer();

            layer.Init(28, 24, 1);
            var data = layer.GetData();

            Assert.AreEqual(28, data["InputWidth"]);
            Assert.AreEqual(24, data["InputHeight"]);
            Assert.AreEqual(1, data["InputDepth"]);

            var deserialized = LayerBase <double> .FromData(data) as ReluLayer;

            Assert.IsNotNull(deserialized);
            Assert.AreEqual(28, deserialized.InputWidth);
            Assert.AreEqual(24, deserialized.InputHeight);
            Assert.AreEqual(1, deserialized.InputDepth);
            Assert.AreEqual(layer.OutputWidth, deserialized.OutputWidth);
            Assert.AreEqual(layer.OutputHeight, deserialized.OutputHeight);
            Assert.AreEqual(layer.OutputDepth, deserialized.OutputDepth);
        }