private static void TestForward(NetworkLayerBase cpu, NetworkLayerBase gpu, int samples)
        {
            Tensor x = CreateRandomTensor(samples, cpu.InputInfo.Size);

            cpu.Forward(x, out Tensor z_cpu, out Tensor a_cpu);
            gpu.Forward(x, out Tensor z_gpu, out Tensor a_gpu);
            Assert.IsTrue(z_cpu.ContentEquals(z_gpu));
            Assert.IsTrue(a_cpu.ContentEquals(a_gpu));
            Tensor.Free(x, z_cpu, a_cpu, z_gpu, a_gpu);
        }
 private static unsafe void TestBackward(NetworkLayerBase cpu, NetworkLayerBase gpu, float[,] delta_1, float[,] z)
 {
     fixed(float *pd_1 = delta_1, pz = z)
     {
         Tensor.Reshape(pd_1, delta_1.GetLength(0), delta_1.GetLength(1), out Tensor delta_1t);
         Tensor.Reshape(pz, z.GetLength(0), z.GetLength(1), out Tensor zt);
         zt.Duplicate(out Tensor zt2);
         cpu.Backpropagate(Tensor.Null, delta_1t, zt, ActivationFunctions.LeCunTanhPrime);
         gpu.Backpropagate(Tensor.Null, delta_1t, zt2, ActivationFunctions.LeCunTanhPrime);
         Assert.IsTrue(zt.ContentEquals(zt2));
     }
 }
 private static unsafe void TestForward(NetworkLayerBase cpu, NetworkLayerBase gpu, float[,] x)
 {
     fixed(float *px = x)
     {
         Tensor.Reshape(px, x.GetLength(0), x.GetLength(1), out Tensor xt);
         cpu.Forward(xt, out Tensor z_cpu, out Tensor a_cpu);
         gpu.Forward(xt, out Tensor z_gpu, out Tensor a_gpu);
         Assert.IsTrue(z_cpu.ContentEquals(z_gpu));
         Assert.IsTrue(a_cpu.ContentEquals(a_gpu));
         z_cpu.Free();
         a_cpu.Free();
         z_gpu.Free();
         a_gpu.Free();
     }
 }