예제 #1
0
        public void DropoutLayer_ForwardTrainPhase(double ratio)
        {
            Context.Instance.Phase = PhaseType.Train;

            var config = new DropoutLayerConfiguration(ratio);
            var layer  = new DropoutLayer(config);

            layer.Setup(bottom, top);
            layer.Forward(bottom, top);

            Assert.Equal(bottom.Count, top.Count);

            using (var topCpu = top.OnCpu())
                using (var bottomCpu = bottom.OnCpu())
                {
                    double scale = 1f / (1f - layer.Parameters.Ratio);

                    int count = bottom.Count;
                    int kept  = 0;
                    for (int i = 0; i < count; i++)
                    {
                        if (!MathHelpers.Equality(topCpu.DataAt(i), 0))
                        {
                            kept++;
                            Assert.True(MathHelpers.Equality(topCpu.DataAt(i), bottomCpu.DataAt(i) * scale));
                        }
                    }
                    ;

                    double stdError = Math.Sqrt(ratio * (1 - ratio) / count);
                    double empiricalDropoutRatio = 1.0d - ((double)kept / count);

                    Assert.True(MathHelpers.Equality(ratio, empiricalDropoutRatio, 1.96 * stdError));
                }
        }
예제 #2
0
        public void DropoutLayer_ForwardTrainPhase(double ratio)
        {
            Context.Instance.Phase = PhaseType.Train;

            var config = new DropoutLayerConfiguration(ratio);
            var layer = new DropoutLayer(config);
            layer.Setup(bottom, top);
            layer.Forward(bottom, top);

            Assert.Equal(bottom.Count, top.Count);

            using (var topCpu = top.OnCpu())
            using (var bottomCpu = bottom.OnCpu())
            {
                double scale = 1f / (1f - layer.Parameters.Ratio);

                int count = bottom.Count;
                int kept = 0;
                for (int i = 0; i < count; i++)
                {
                    if (!MathHelpers.Equality(topCpu.DataAt(i), 0))
                    {
                        kept++;
                        Assert.True(MathHelpers.Equality(topCpu.DataAt(i), bottomCpu.DataAt(i) * scale));
                    }
                };

                double stdError = Math.Sqrt(ratio * (1 - ratio) / count);
                double empiricalDropoutRatio = 1.0d - ((double)kept / count);

                Assert.True(MathHelpers.Equality(ratio, empiricalDropoutRatio, 1.96 * stdError));
            }
        }