Abs

y = abs x

struct Abs (
T
size_t dim
) {
Variable!(T, dim, HostStorage) hx;
Variable!(T, dim, DeviceStorage) dx;
}

Examples

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 }

Meta