/// <summary>初期化フロー</summary> public override void Execute() { generator.Execute(Tensor); if (flow != null) { flow.Execute(); } }
public void SpeedTest() { int length = 65535 * 16; Shape shape = Shape.Vector(length); OverflowCheckedTensor v1 = new OverflowCheckedTensor(shape); UniformRandom ope = new UniformRandom(shape, new Random(1234)); Stopwatch sw = new Stopwatch(); sw.Start(); ope.Execute(v1); ope.Execute(v1); ope.Execute(v1); ope.Execute(v1); sw.Stop(); Console.WriteLine($"{sw.ElapsedMilliseconds / 4} msec"); }
public void ExecuteTest() { int length = 65535 * 15; Shape shape = Shape.Vector(length); OverflowCheckedTensor v1 = new OverflowCheckedTensor(shape); UniformRandom ope = new UniformRandom(shape, new Random(1234)); ope.Execute(v1); float[] y = v1.State; Assert.IsTrue(y.Min() >= 0); Assert.IsTrue(y.Max() < 1); { int[] cnt = new int[10]; for (int i = 0; i < length; i++) { cnt[(int)(y[i] * 10)]++; } for (int i = 0; i < 10; i++) { Assert.AreEqual(0.1, (double)cnt[i] / length, 2e-3, $"[ {i * 0.1f}, {(i + 1) * 0.1f} )"); } } { int[] cnt = new int[20]; for (int i = 1; i < length; i++) { float dy = y[i - 1] - y[i]; cnt[(int)Math.Floor(dy * 10 + 10)]++; } Assert.AreEqual(0.005, (double)cnt[0] / (length - 1), 5e-3); Assert.AreEqual(0.015, (double)cnt[1] / (length - 1), 5e-3); Assert.AreEqual(0.025, (double)cnt[2] / (length - 1), 5e-3); Assert.AreEqual(0.035, (double)cnt[3] / (length - 1), 5e-3); Assert.AreEqual(0.045, (double)cnt[4] / (length - 1), 5e-3); Assert.AreEqual(0.055, (double)cnt[5] / (length - 1), 5e-3); Assert.AreEqual(0.065, (double)cnt[6] / (length - 1), 5e-3); Assert.AreEqual(0.075, (double)cnt[7] / (length - 1), 5e-3); Assert.AreEqual(0.085, (double)cnt[8] / (length - 1), 5e-3); Assert.AreEqual(0.095, (double)cnt[9] / (length - 1), 5e-3); Assert.AreEqual(0.095, (double)cnt[10] / (length - 1), 5e-3); Assert.AreEqual(0.085, (double)cnt[11] / (length - 1), 5e-3); Assert.AreEqual(0.075, (double)cnt[12] / (length - 1), 5e-3); Assert.AreEqual(0.065, (double)cnt[13] / (length - 1), 5e-3); Assert.AreEqual(0.055, (double)cnt[14] / (length - 1), 5e-3); Assert.AreEqual(0.045, (double)cnt[15] / (length - 1), 5e-3); Assert.AreEqual(0.035, (double)cnt[16] / (length - 1), 5e-3); Assert.AreEqual(0.025, (double)cnt[17] / (length - 1), 5e-3); Assert.AreEqual(0.015, (double)cnt[18] / (length - 1), 5e-3); Assert.AreEqual(0.005, (double)cnt[19] / (length - 1), 5e-3); } { int[] cnt = new int[20]; int sft = 1024; for (int i = sft; i < length; i++) { float dy = y[i - sft] - y[i]; cnt[(int)Math.Floor(dy * 10 + 10)]++; } Assert.AreEqual(0.005, (double)cnt[0] / (length - sft), 5e-3); Assert.AreEqual(0.015, (double)cnt[1] / (length - sft), 5e-3); Assert.AreEqual(0.025, (double)cnt[2] / (length - sft), 5e-3); Assert.AreEqual(0.035, (double)cnt[3] / (length - sft), 5e-3); Assert.AreEqual(0.045, (double)cnt[4] / (length - sft), 5e-3); Assert.AreEqual(0.055, (double)cnt[5] / (length - sft), 5e-3); Assert.AreEqual(0.065, (double)cnt[6] / (length - sft), 5e-3); Assert.AreEqual(0.075, (double)cnt[7] / (length - sft), 5e-3); Assert.AreEqual(0.085, (double)cnt[8] / (length - sft), 5e-3); Assert.AreEqual(0.095, (double)cnt[9] / (length - sft), 5e-3); Assert.AreEqual(0.095, (double)cnt[10] / (length - sft), 5e-3); Assert.AreEqual(0.085, (double)cnt[11] / (length - sft), 5e-3); Assert.AreEqual(0.075, (double)cnt[12] / (length - sft), 5e-3); Assert.AreEqual(0.065, (double)cnt[13] / (length - sft), 5e-3); Assert.AreEqual(0.055, (double)cnt[14] / (length - sft), 5e-3); Assert.AreEqual(0.045, (double)cnt[15] / (length - sft), 5e-3); Assert.AreEqual(0.035, (double)cnt[16] / (length - sft), 5e-3); Assert.AreEqual(0.025, (double)cnt[17] / (length - sft), 5e-3); Assert.AreEqual(0.015, (double)cnt[18] / (length - sft), 5e-3); Assert.AreEqual(0.005, (double)cnt[19] / (length - sft), 5e-3); } }