-module(gleam_synapses@model@net_elems@activation@activation). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([f/1, deriv/1, inverse/1, generator/0]). -export_type([activation/0]). -type activation() :: sigmoid | identity | tanh | leaky_re_lu. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/activation/activation.gleam", 12). -spec sigmoid_f(float()) -> float(). sigmoid_f(X) -> case (1.0 + math:exp(+0.0 - X)) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> 1.0 / Gleam@denominator end. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/activation/activation.gleam", 16). -spec f(activation()) -> fun((float()) -> float()). f(Activation) -> case Activation of sigmoid -> fun sigmoid_f/1; identity -> fun gleam@function:identity/1; tanh -> fun math:tanh/1; leaky_re_lu -> fun(X) -> case X < +0.0 of true -> 0.01 * X; false -> X end end end. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/activation/activation.gleam", 30). -spec deriv(activation()) -> fun((float()) -> float()). deriv(Activation) -> case Activation of sigmoid -> fun(D) -> sigmoid_f(D) * (1.0 - sigmoid_f(D)) end; identity -> fun(_) -> 1.0 end; tanh -> fun(D@1) -> 1.0 - (math:tanh(D@1) * math:tanh(D@1)) end; leaky_re_lu -> fun(D@2) -> case D@2 < +0.0 of true -> 0.01; false -> 1.0 end end end. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/activation/activation.gleam", 44). -spec inverse(activation()) -> fun((float()) -> float()). inverse(Activation) -> case Activation of sigmoid -> fun(Y) -> T = case (1.0 - Y) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> Y / Gleam@denominator end, math:log(T) end; identity -> fun gleam@function:identity/1; tanh -> fun(Y@1) -> 0.5 * math:log(case (1.0 - Y@1) of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator@1 -> (1.0 + Y@1) / Gleam@denominator@1 end) end; leaky_re_lu -> fun(Y@2) -> case Y@2 < +0.0 of true -> Y@2 / 0.01; false -> Y@2 end end end. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/activation/activation.gleam", 61). -spec generator() -> minigen:generator(activation()). generator() -> minigen:always(sigmoid).