# Hey
module Matrice {
type Mat<#M, #N> =
[#M, [#N, num]];
type CVec<#M> =
[#M, [1, num]];
let add <- fn(m1: Mat<#M, #N>, m2: Mat<#M, #N>): Mat<#M, #N> {
...
};
let transpose <- fn(m: Mat<#M, #N>): Mat<#N, #M> {
...
};
let dot <- fn(m1: Mat<#M, P>, m2: mat<P, #N>): <#M, #N> {
...
};
let cvec <- fn(a: [#N, T]): CVec<#N> {
...
};
let lvec <- fn(a: [#N, T]): LVec<#N> {
a.cvec().transpose()
};
}
from Matrice use *;
# machine learning
type Layer =
(CVec<#M>) -> CVec<#N>;
type Activation =
(num) -> num;
let relu <- fn(a: num): num {
...
};
let classic_layer <- fn(m: Mat<#M, #N>, b: CVec<#M>, a: Activation): Layer {
return fn(v: CVec<#M>): CVec<#N> {
v
|> transpose()
|> dot(m)
|> add(b)
|> map(a)
};
};
let m = [[1, 2, 3], [4, 5, 6]];
let b = [4, 5, 6].cvec();
let b = [4, 5, 6].cvec();
let v = [1, 2, 3].cvec();
v
|> classic_layer(m, b, relu)
|> classic_layer(m, b, relu)
|> classic_layer(m, b, relu);