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