-module(customized_network_test). -compile(no_auto_import). -export([neural_network_of_to_json_test/0, neural_network_prediction_test/0, neural_network_normal_errors_test/0, neural_network_zero_errors_test/0, fit_neural_network_prediction_test/0, neural_network_to_svg_test/0]). -spec my_neural_network() -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())). my_neural_network() -> gleam_synapses@neural_network:of_json( <<"[[{\"activationF\":\"sigmoid\",\"weights\":[0.9211880913772268,0.027180243817137795,0.10852652658514339,-0.20162813099768573,-0.10075233916843396]},{\"activationF\":\"sigmoid\",\"weights\":[-0.9489930079469029,-0.26015677306584273,-0.6978873003833059,0.2874994065396639,0.7276149322065253]},{\"activationF\":\"sigmoid\",\"weights\":[-0.9357227175449083,-0.9155202030305005,-0.9129309852279106,-0.6978999469719491,0.8063910194692945]},{\"activationF\":\"sigmoid\",\"weights\":[0.47588465535587576,-0.5681549645809776,0.9815364553014789,-0.6175472916357287,0.6688055519864093]},{\"activationF\":\"sigmoid\",\"weights\":[-0.18065888278217646,-0.8943132277876955,0.294939737903549,-0.13946653126709108,-0.975106575568284]},{\"activationF\":\"sigmoid\",\"weights\":[0.4437184379986423,0.2690674140331535,0.32810615530021336,0.17323902449022643,0.09221847729601618]}],[{\"activationF\":\"identity\",\"weights\":[-0.8928384189584146,-0.3161167802991376,-0.21496286920606544,0.25806133542967125,0.8131999422319118,0.3867614051417534,0.45388143955720217]},{\"activationF\":\"identity\",\"weights\":[-0.5964794872043058,0.7903102784527913,-0.9051888424151342,-0.09122610135386999,0.6535569969369026,-0.22748365874317633,-0.13615987609385183]},{\"activationF\":\"identity\",\"weights\":[0.6208093403826789,0.33538576542866516,0.753380386023317,-0.2055709809859254,0.9488128412675767,-0.07338684978278609,-0.7968643692136412]},{\"activationF\":\"identity\",\"weights\":[-0.35625015691520523,-0.06294831714455151,-0.5599640923034961,-0.35867440290460384,0.5199823465293354,0.6691922308539804,-0.8999692624692617]},{\"activationF\":\"identity\",\"weights\":[-0.26545912729664556,0.37560221411197214,0.2923244847426285,-0.8896329641128919,0.5311148426965802,0.6182392962661842,-0.20406638996276305]},{\"activationF\":\"identity\",\"weights\":[-0.18786441034717605,-0.5055219662230839,0.04524373070462362,-0.11891872316176122,-0.9069098420319777,-0.49189194418627435,0.9655404131465519]},{\"activationF\":\"identity\",\"weights\":[-0.2337494582987365,0.03348554207672061,0.5612844635907202,-0.7847214826295577,0.4115511461873751,-0.5715595557401487,-0.5608001287671116]},{\"activationF\":\"identity\",\"weights\":[0.14039252306721073,0.896464828302568,-0.8349609673341298,-0.3124209022398132,0.6436975813480024,-0.818871154230379,0.5071867885500334]}],[{\"activationF\":\"leakyReLU\",\"weights\":[-0.1496727007713341,-0.9446600359811137,0.09017935830009893,-0.07576012821021783,0.07030263961505323,-0.11406885695371116,-0.7461112874103033,0.6833332651740873,-0.8010245653234098]},{\"activationF\":\"leakyReLU\",\"weights\":[0.09559309427323814,-0.7879378967496491,-0.8000009310923726,0.7686306359582724,-0.25249222972726404,-0.014427663912890187,-0.11461181526757702,0.21053088617197546,-0.8854886060416924]},{\"activationF\":\"leakyReLU\",\"weights\":[0.8977806470434868,0.2759342617685159,0.3579625812601752,-0.2766215427970271,0.45365535947447677,0.16974844709537806,-0.06753778989996984,-0.7966183698132514,0.10365561824201519]},{\"activationF\":\"leakyReLU\",\"weights\":[0.15614262821491143,0.7307043329040679,-0.3024535882183548,0.8996197510630033,-0.5483748571969123,-0.4933601809685686,0.8877285560646404,-0.2549474709795905,-0.05003354274804406]},{\"activationF\":\"leakyReLU\",\"weights\":[0.20640525641997542,-0.7982126402919107,-0.4301615753543542,0.6235826001059404,0.39016787049890334,0.4847542393708937,0.041606408464528455,-0.5472453822430938,-0.7980597656641701]}],[{\"activationF\":\"tanh\",\"weights\":[-0.4203698112641414,0.7385922108576337,-0.17832762689312132,0.9771813932353159,-0.39248885855237936,0.44173755976288676]},{\"activationF\":\"tanh\",\"weights\":[0.6408935521820589,-0.1255305117848784,0.5138918346393466,-0.8575752178510132,-0.37135956253563385,-0.06644905302411086]},{\"activationF\":\"tanh\",\"weights\":[0.8661031205839747,0.346207271189116,-0.4354090876965633,0.005500142063942892,0.10443723474592459,-0.9447855799384712]}]]"/utf8>> ). -spec input_values() -> list(float()). input_values() -> [1.0, 0.5625, 0.511111, 0.47619]. -spec expected_output() -> list(float()). expected_output() -> [0.4, 0.05, 0.2]. -spec prediction() -> list(float()). prediction() -> gleam_synapses@neural_network:prediction( my_neural_network(), input_values() ). -spec my_fit_network() -> gleam_zlists@interop:z_list(gleam_zlists@interop:z_list(gleam_synapses@model@net_elems@neuron:neuron())). my_fit_network() -> gleam_synapses@neural_network:fit( my_neural_network(), 0.01, input_values(), expected_output() ). -spec neural_network_of_to_json_test() -> gleam@should:expectation(). neural_network_of_to_json_test() -> Layers = fun() -> [4, 6, 5, 3] end, Activation_f = fun(Layer_index) -> case Layer_index of 0 -> gleam_synapses@activation_function:sigmoid(); 1 -> gleam_synapses@activation_function:identity(); 2 -> gleam_synapses@activation_function:leaky_re_lu(); _ -> gleam_synapses@activation_function:tanh() end end, Weight_init_f = fun(_) -> minigen:run(minigen:float()) end, Just_created_neural_network_json = gleam_synapses@neural_network:to_json( gleam_synapses@neural_network:customized_init( Layers(), Activation_f, Weight_init_f ) ), gleam@should:equal( gleam_synapses@neural_network:to_json( gleam_synapses@neural_network:of_json( Just_created_neural_network_json ) ), Just_created_neural_network_json ). -spec neural_network_prediction_test() -> gleam@should:expectation(). neural_network_prediction_test() -> gleam@should:equal( prediction(), [-0.013959435951885419, -0.16770539176070562, 0.6127887629040737] ). -spec neural_network_normal_errors_test() -> gleam@should:expectation(). neural_network_normal_errors_test() -> gleam@should:equal( gleam_synapses@neural_network:errors( my_neural_network(), 0.01, input_values(), expected_output() ), [-0.18229373795952497, -0.10254022760223279, -0.09317233470223074, -0.08680645507894617] ). -spec neural_network_zero_errors_test() -> gleam@should:expectation(). neural_network_zero_errors_test() -> gleam@should:equal( gleam_synapses@neural_network:errors( my_neural_network(), 0.01, input_values(), prediction() ), [0.0, 0.0, 0.0, 0.0] ). -spec fit_neural_network_prediction_test() -> gleam@should:expectation(). fit_neural_network_prediction_test() -> gleam@should:equal( gleam_synapses@neural_network:prediction( my_fit_network(), input_values() ), [-0.006109464554744089, -0.17704281722371465, 0.6087944183600162] ). -spec neural_network_to_svg_test() -> gleam@should:expectation(). neural_network_to_svg_test() -> gleam@should:equal( gleam_synapses@neural_network:to_svg(my_neural_network()), <<""/utf8>> ).