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