Current section
Files
Jump to
Current section
Files
gen/src/gleam_synapses@neural_network.erl
-module(gleam_synapses@neural_network).
-compile(no_auto_import).
-export([init/1, init_with_seed/2, customized_init/3, prediction/2, errors/4, fit/4, to_json/1, of_json/1, to_svg/1]).
-spec seed_init(gleam@option:option(integer()), list(integer())) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
seed_init(Maybe_seed, Layers) ->
Gen = gleam_synapses@model@net_elems@network:generator(
gleam_zlists:of_list(Layers)
),
case Maybe_seed of
{some, I} ->
minigen:run_with_seed(Gen, I);
none ->
minigen:run(Gen)
end.
-spec fail_if_input_not_match(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())),
list(float())
) -> nil.
fail_if_input_not_match(Network, Input_values) ->
Num_of_input_vals = gleam@list:length(Input_values),
{ok, First_neuron} = gleam@result:then(
gleam_zlists:head(Network),
fun gleam_zlists:head/1
),
Input_layer_size = gleam_zlists:count(erlang:element(3, First_neuron)) - 1,
Is_equal = Num_of_input_vals =:= Input_layer_size,
{} = case Is_equal of
true -> {};
Gleam@Assert ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => Gleam@Assert,
module => <<"gleam_synapses/neural_network"/utf8>>,
function => <<"fail_if_input_not_match"/utf8>>,
line => 36})
end,
nil.
-spec fail_if_expected_not_match(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())),
list(float())
) -> nil.
fail_if_expected_not_match(Network, Expected_output) ->
Num_of_expected_vals = gleam@list:length(Expected_output),
{ok, Output_layer_size} = gleam@result:map(
gleam_zlists:head(gleam_zlists:reverse(Network)),
fun gleam_zlists:count/1
),
Is_equal = Num_of_expected_vals =:= Output_layer_size,
{} = case Is_equal of
true -> {};
Gleam@Assert ->
erlang:error(#{gleam_error => assert,
message => <<"Assertion pattern match failed"/utf8>>,
value => Gleam@Assert,
module => <<"gleam_synapses/neural_network"/utf8>>,
function => <<"fail_if_expected_not_match"/utf8>>,
line => 52})
end,
nil.
-spec init(list(integer())) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
init(Layers) ->
seed_init(none, Layers).
-spec init_with_seed(integer(), list(integer())) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
init_with_seed(Seed, Layers) ->
seed_init({some, Seed}, Layers).
-spec customized_init(
list(integer()),
fun((integer()) -> gleam_synapses@model@net_elems@activation:activation()),
fun((integer()) -> float())
) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
customized_init(Layers, Activation_f, Weight_init_f) ->
gleam_synapses@model@net_elems@network:init(
gleam_zlists:of_list(Layers),
Activation_f,
Weight_init_f
).
-spec prediction(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())),
list(float())
) -> list(float()).
prediction(Network, Input_values) ->
fail_if_input_not_match(Network, Input_values),
Input = gleam_zlists:of_list(Input_values),
gleam_zlists:to_list(
gleam_synapses@model@net_elems@network:output(Network, Input)
).
-spec errors(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())),
float(),
list(float()),
list(float())
) -> list(float()).
errors(Network, Learning_rate, Input_values, Expected_output) ->
fail_if_input_not_match(Network, Input_values),
fail_if_expected_not_match(Network, Expected_output),
Input = gleam_zlists:of_list(Input_values),
Expected = gleam_zlists:of_list(Expected_output),
gleam_zlists:to_list(
gleam_synapses@model@net_elems@network:errors(
Network,
Learning_rate,
Input,
Expected
)
).
-spec fit(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())),
float(),
list(float()),
list(float())
) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
fit(Network, Learning_rate, Input_values, Expected_output) ->
fail_if_input_not_match(Network, Input_values),
fail_if_expected_not_match(Network, Expected_output),
Input = gleam_zlists:of_list(Input_values),
Expected = gleam_zlists:of_list(Expected_output),
gleam_synapses@model@net_elems@network:fit(
Network,
Learning_rate,
Input,
Expected
).
-spec to_json(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron()))
) -> binary().
to_json(Network) ->
gleam_synapses@model@net_elems@network:to_json(Network).
-spec of_json(binary()) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())).
of_json(Json) ->
gleam_synapses@model@net_elems@network:of_json(Json).
-spec to_svg(
gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron()))
) -> binary().
to_svg(Network) ->
gleam_synapses@model@draw:network_svg(Network).