-module(gleam_synapses@model@net_elems@network@network). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([init/3, output/3, errors/4, fit/5, generator/1]). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 10). -spec init( gleam_zlists@interop:z_list(integer()), fun((integer()) -> gleam_synapses@model@net_elems@activation@activation:activation()), fun((integer()) -> float()) ) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())). init(Layer_sizes, Activation_f, Weight_init_f) -> _assert_subject = gleam_zlists:tail(Layer_sizes), {ok, Tl} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"gleam_synapses/model/net_elems/network/network"/utf8>>, function => <<"init"/utf8>>, line => 15}) end, _pipe = gleam_zlists:zip(Layer_sizes, Tl), _pipe@1 = gleam_zlists:with_index(_pipe), gleam_zlists:map( _pipe@1, fun(T) -> {{Lr_sz, Next_lr_sz}, Index} = T, gleam_synapses@model@net_elems@layer@layer:init( Lr_sz, Next_lr_sz, Activation_f(Index), fun() -> fun() -> Weight_init_f(Index) end end ) end ). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 26). -spec output( gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())), gleam_zlists@interop:z_list(float()), boolean() ) -> gleam_zlists@interop:z_list(float()). output(Network, Input_val, In_parallel) -> gleam_zlists:reduce( Network, Input_val, fun(X, Acc) -> gleam_synapses@model@net_elems@layer@layer:output( X, Acc, In_parallel ) end ). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 36). -spec fed_forward_acc_f( gleam_zlists@interop:z_list({gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())}), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron()), boolean() ) -> gleam_zlists@interop:z_list({gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())}). fed_forward_acc_f(Already_fed, Next_layer, In_parallel) -> _assert_subject = gleam_zlists:head(Already_fed), {ok, {Errors_val, Layer_val}} = case _assert_subject of {ok, {_, _}} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"gleam_synapses/model/net_elems/network/network"/utf8>>, function => <<"fed_forward_acc_f"/utf8>>, line => 41}) end, Next_input = gleam_synapses@model@net_elems@layer@layer:output( Layer_val, Errors_val, In_parallel ), gleam_zlists:cons(Already_fed, {Next_input, Next_layer}). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 46). -spec fed_forward( gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())), gleam_zlists@interop:z_list(float()), boolean() ) -> gleam_zlists@interop:z_list({gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())}). fed_forward(Network, Input_val, In_parallel) -> _assert_subject = gleam_zlists:uncons(Network), {ok, {Net_hd, Net_tl}} = case _assert_subject of {ok, {_, _}} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"gleam_synapses/model/net_elems/network/network"/utf8>>, function => <<"fed_forward"/utf8>>, line => 51}) end, Init_feed = begin _pipe = {Input_val, Net_hd}, gleam_zlists:singleton(_pipe) end, gleam_zlists:reduce( Net_tl, Init_feed, fun(X, Acc) -> fed_forward_acc_f(Acc, X, In_parallel) end ). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 60). -spec back_propagated_acc_f( float(), {gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron()))}, {gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())}, boolean() ) -> {gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron()))}. back_propagated_acc_f( Learning_rate, Errors_with_already_propagated, Input_with_layer, In_parallel ) -> {Errors_val, Already_propagated} = Errors_with_already_propagated, {Last_input, Last_layer} = Input_with_layer, Last_output_with_errors = begin _pipe = gleam_synapses@model@net_elems@layer@layer:output( Last_layer, Last_input, In_parallel ), gleam_zlists:zip(_pipe, Errors_val) end, {Next_errors, Propagated_layer} = gleam_synapses@model@net_elems@layer@layer:back_propagated( Last_layer, Learning_rate, Last_input, Last_output_with_errors, In_parallel ), Next_already_propagated = gleam_zlists:cons( Already_propagated, Propagated_layer ), {Next_errors, Next_already_propagated}. -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 83). -spec back_propagated( float(), gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list({gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())}), boolean() ) -> {gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron()))}. back_propagated( Learning_rate, Expected_output, Reversed_inputs_with_layers, In_parallel ) -> _assert_subject = gleam_zlists:uncons(Reversed_inputs_with_layers), {ok, {{Last_input, Last_layer}, Reversed_inputs_with_layers_tl}} = case _assert_subject of {ok, {{_, _}, _}} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"gleam_synapses/model/net_elems/network/network"/utf8>>, function => <<"back_propagated"/utf8>>, line => 89}) end, Output_val = gleam_synapses@model@net_elems@layer@layer:output( Last_layer, Last_input, In_parallel ), Errors_val = begin _pipe = gleam_zlists:zip(Output_val, Expected_output), gleam_zlists:map( _pipe, fun(T) -> {A, B} = T, A - B end ) end, Output_with_errors = gleam_zlists:zip(Output_val, Errors_val), {Init_errors, First_propagated} = gleam_synapses@model@net_elems@layer@layer:back_propagated( Last_layer, Learning_rate, Last_input, Output_with_errors, In_parallel ), Init_acc = {Init_errors, gleam_zlists:singleton(First_propagated)}, gleam_zlists:reduce( Reversed_inputs_with_layers_tl, Init_acc, fun(X, Acc) -> back_propagated_acc_f(Learning_rate, Acc, X, In_parallel) end ). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 113). -spec errors( gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())), gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(float()), boolean() ) -> gleam_zlists@interop:z_list(float()). errors(Network, Input_val, Expected_output, In_parallel) -> _pipe = Network, _pipe@1 = fed_forward(_pipe, Input_val, In_parallel), _pipe@2 = back_propagated(+0.0, Expected_output, _pipe@1, In_parallel), gleam@pair:first(_pipe@2). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 125). -spec fit( gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())), float(), gleam_zlists@interop:z_list(float()), gleam_zlists@interop:z_list(float()), boolean() ) -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron())). fit(Network, Learning_rate, Input_val, Expected_output, In_parallel) -> _pipe = Network, _pipe@1 = fed_forward(_pipe, Input_val, In_parallel), _pipe@2 = back_propagated( Learning_rate, Expected_output, _pipe@1, In_parallel ), gleam@pair:second(_pipe@2). -file("/home/dimos/Projects/Gleam/gleam_synapses/src/gleam_synapses/model/net_elems/network/network.gleam", 138). -spec generator(gleam_zlists@interop:z_list(integer())) -> minigen:generator(gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron@neuron:neuron()))). generator(Layer_sizes) -> _assert_subject = gleam_zlists:tail(Layer_sizes), {ok, Tl} = case _assert_subject of {ok, _} -> _assert_subject; _assert_fail -> erlang:error(#{gleam_error => let_assert, message => <<"Pattern match failed, no pattern matched the value."/utf8>>, value => _assert_fail, module => <<"gleam_synapses/model/net_elems/network/network"/utf8>>, function => <<"generator"/utf8>>, line => 139}) end, _pipe = gleam_zlists:zip(Layer_sizes, Tl), _pipe@2 = gleam_zlists:reduce( _pipe, minigen:always(gleam_zlists:new()), fun(T, Acc_gen) -> {Lr_sz, Next_lr_sz} = T, minigen:then( Acc_gen, fun(Acc_zls) -> _pipe@1 = gleam_synapses@model@net_elems@layer@layer:generator( Lr_sz, Next_lr_sz ), minigen:map( _pipe@1, fun(Layer) -> gleam_zlists:cons(Acc_zls, Layer) end ) end ) end ), minigen:map(_pipe@2, fun gleam_zlists:reverse/1).