From 587a80b0de065c50e5c16bf0432b7dec136893ee Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 20 Jan 2022 14:16:22 +0300 Subject: [PATCH] Move neural net stuff to a separate subdirectory of ml --- .../psemek/ml/{ => neural_net}/activation.hpp | 0 .../evaluator.hpp} | 2 +- .../psemek/ml/{ => neural_net}/neural_net.hpp | 27 ++++++++++++++++++- .../ml/source/{ => neural_net}/activation.cpp | 2 +- .../evaluator.cpp} | 2 +- .../ml/source/{ => neural_net}/neural_net.cpp | 2 +- 6 files changed, 30 insertions(+), 5 deletions(-) rename libs/ml/include/psemek/ml/{ => neural_net}/activation.hpp (100%) rename libs/ml/include/psemek/ml/{neural_net_evaluator.hpp => neural_net/evaluator.hpp} (96%) rename libs/ml/include/psemek/ml/{ => neural_net}/neural_net.hpp (82%) rename libs/ml/source/{ => neural_net}/activation.cpp (72%) rename libs/ml/source/{neural_net_evaluator.cpp => neural_net/evaluator.cpp} (89%) rename libs/ml/source/{ => neural_net}/neural_net.cpp (91%) diff --git a/libs/ml/include/psemek/ml/activation.hpp b/libs/ml/include/psemek/ml/neural_net/activation.hpp similarity index 100% rename from libs/ml/include/psemek/ml/activation.hpp rename to libs/ml/include/psemek/ml/neural_net/activation.hpp diff --git a/libs/ml/include/psemek/ml/neural_net_evaluator.hpp b/libs/ml/include/psemek/ml/neural_net/evaluator.hpp similarity index 96% rename from libs/ml/include/psemek/ml/neural_net_evaluator.hpp rename to libs/ml/include/psemek/ml/neural_net/evaluator.hpp index e8ebebab..82aafb51 100644 --- a/libs/ml/include/psemek/ml/neural_net_evaluator.hpp +++ b/libs/ml/include/psemek/ml/neural_net/evaluator.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/libs/ml/include/psemek/ml/neural_net.hpp b/libs/ml/include/psemek/ml/neural_net/neural_net.hpp similarity index 82% rename from libs/ml/include/psemek/ml/neural_net.hpp rename to libs/ml/include/psemek/ml/neural_net/neural_net.hpp index 7a673283..9b44f504 100644 --- a/libs/ml/include/psemek/ml/neural_net.hpp +++ b/libs/ml/include/psemek/ml/neural_net/neural_net.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include @@ -40,6 +40,20 @@ namespace psemek::ml return result; } + template + void for_each_layer_impl(NN & nn, Fn && fn) + { + auto const layer_sizes = nn.layer_sizes(); + auto const weights = nn.weights(); + std::size_t offset = 0; + for (std::size_t l = 0; l + 1 < layer_sizes.size(); ++l) + { + std::size_t count = (layer_sizes[l] + 1) * layer_sizes[l + 1]; + fn(l, util::span{weights.data() + offset, weights.data() + offset + count}); + offset += count; + } + } + } template @@ -111,5 +125,16 @@ namespace psemek::ml : neural_net(std::move(args.first), std::move(args.second)) {} + template + void for_each_layer(neural_net const & nn, Fn && fn) + { + detail::for_each_layer_impl(nn, fn); + } + + template + void for_each_layer(neural_net & nn, Fn && fn) + { + detail::for_each_layer_impl(nn, fn); + } } diff --git a/libs/ml/source/activation.cpp b/libs/ml/source/neural_net/activation.cpp similarity index 72% rename from libs/ml/source/activation.cpp rename to libs/ml/source/neural_net/activation.cpp index 76078957..d677776f 100644 --- a/libs/ml/source/activation.cpp +++ b/libs/ml/source/neural_net/activation.cpp @@ -1,4 +1,4 @@ -#include +#include namespace psemek::ml { diff --git a/libs/ml/source/neural_net_evaluator.cpp b/libs/ml/source/neural_net/evaluator.cpp similarity index 89% rename from libs/ml/source/neural_net_evaluator.cpp rename to libs/ml/source/neural_net/evaluator.cpp index 7e38e788..433fb004 100644 --- a/libs/ml/source/neural_net_evaluator.cpp +++ b/libs/ml/source/neural_net/evaluator.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/libs/ml/source/neural_net.cpp b/libs/ml/source/neural_net/neural_net.cpp similarity index 91% rename from libs/ml/source/neural_net.cpp rename to libs/ml/source/neural_net/neural_net.cpp index 21787751..4d10ef54 100644 --- a/libs/ml/source/neural_net.cpp +++ b/libs/ml/source/neural_net/neural_net.cpp @@ -1,4 +1,4 @@ -#include +#include #include