test abs simple case, gradcheck and cpu/cuda equality
1 import grain.testing; 2 import std.typecons; 3 import numir; 4 import mir.ndslice; 5 6 auto xs = [[-1.0f, 2.0f, -3.0f], [1.0f, 0.0f, 0.0f]].nparray; 7 auto ys = [[1.0f, 2.0f, 3.0f], [1.0f, 0.0f, 0.0f]].nparray; 8 auto hfunc = Abs!(float, 2)(); 9 auto hx = xs.variable; 10 auto hy = hfunc.forward(hx); 11 assert(approxEqual(hy.sliced, ys)); 12 13 auto gxs = [[-0.1f, 0.2f, -0.3f], [0.5f, 0.0f, 0.0f]].nparray; 14 auto gys = [[0.1f, 0.2f, 0.3f], [0.5f, 0.6f, 0.7f]].nparray; 15 auto hgy = gys.variable; 16 auto hgx = hfunc.backward(hgy); 17 assert(approxEqual(hgx.sliced, gxs)); 18 19 version (grain_cuda) { 20 auto dfunc = Abs!(float, 2)(); 21 auto dy = dfunc.forward(hx.to!DeviceStorage); 22 assert(approxEqual(dy.to!HostStorage.sliced, hy.sliced)); 23 auto dgx = dfunc.backward(hgy.to!DeviceStorage); 24 assert(approxEqual(dgx.to!HostStorage.sliced, hgx.sliced)); 25 }
y = abs x