Move neural net stuff to a separate subdirectory of ml

This commit is contained in:
Nikita Lisitsa 2022-01-20 14:16:22 +03:00
parent d37edd207b
commit 587a80b0de
6 changed files with 30 additions and 5 deletions

View file

@ -1,6 +1,6 @@
#pragma once
#include <psemek/ml/neural_net.hpp>
#include <psemek/ml/neural_net/neural_net.hpp>
#include <stdexcept>

View file

@ -1,6 +1,6 @@
#pragma once
#include <psemek/ml/activation.hpp>
#include <psemek/ml/neural_net/activation.hpp>
#include <psemek/util/span.hpp>
#include <vector>
@ -40,6 +40,20 @@ namespace psemek::ml
return result;
}
template <typename NN, typename Fn>
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 <typename T>
@ -111,5 +125,16 @@ namespace psemek::ml
: neural_net(std::move(args.first), std::move(args.second))
{}
template <typename T, typename Fn>
void for_each_layer(neural_net<T> const & nn, Fn && fn)
{
detail::for_each_layer_impl(nn, fn);
}
template <typename T, typename Fn>
void for_each_layer(neural_net<T> & nn, Fn && fn)
{
detail::for_each_layer_impl(nn, fn);
}
}

View file

@ -1,4 +1,4 @@
#include <psemek/ml/activation.hpp>
#include <psemek/ml/neural_net/activation.hpp>
namespace psemek::ml
{

View file

@ -1,4 +1,4 @@
#include <psemek/ml/neural_net_evaluator.hpp>
#include <psemek/ml/neural_net/evaluator.hpp>
#include <psemek/util/to_string.hpp>

View file

@ -1,4 +1,4 @@
#include <psemek/ml/neural_net.hpp>
#include <psemek/ml/neural_net/neural_net.hpp>
#include <psemek/util/to_string.hpp>