Pow

y = pow x

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

Examples

1 import grain.testing;
2 import std.typecons;
3 import numir;
4 import mir.ndslice;
5 import mir.math : pow;
6 
7 auto p = 2.0f;
8 auto hfunc = Pow!(float, 2)(p);
9 auto hx = uniform!float(2, 3).slice.variable;
10 auto hy = hfunc.forward(hx);
11 auto hgy = uniform!float(2, 3).slice.variable;
12 auto hgx = hfunc.backward(hgy);
13 gradCheck(hfunc, hx, hgy, 1e-3, 1e-3, 1e-3);
14 assert(approxEqual(hy.sliced, hx.sliced.map!(a => pow(a, p))));
15 
16 version (grain_cuda) {
17     auto dfunc = Pow!(float, 2)(p);
18     auto dy = dfunc.forward(hx.to!DeviceStorage);
19     assert(approxEqual(dy.to!HostStorage.sliced, hy.sliced));
20     auto dgx = dfunc.backward(hgy.to!DeviceStorage);
21     assert(approxEqual(dgx.to!HostStorage.sliced, hgx.sliced));
22 }

Meta