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