From 434c327a9dffa22f5627fd9d0c997e77d57a99e1 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Thu, 20 Jan 2022 13:46:09 +0300 Subject: [PATCH] Throw an exception if number of neural net layer sizes & activation types do not match --- libs/ml/include/psemek/ml/neural_net.hpp | 11 ++++++++++- libs/ml/source/neural_net.cpp | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/libs/ml/include/psemek/ml/neural_net.hpp b/libs/ml/include/psemek/ml/neural_net.hpp index 24c976d6..28403632 100644 --- a/libs/ml/include/psemek/ml/neural_net.hpp +++ b/libs/ml/include/psemek/ml/neural_net.hpp @@ -4,7 +4,7 @@ #include #include -#include +#include namespace psemek::ml { @@ -15,6 +15,12 @@ namespace psemek::ml char const * what() noexcept; }; + struct wrong_activation_types_count_error + : std::runtime_error + { + wrong_activation_types_count_error(std::size_t expected, std::size_t actual); + }; + namespace detail { @@ -98,6 +104,9 @@ namespace psemek::ml { if (layer_sizes_.empty()) throw empty_neural_net_error{}; + + if (layer_sizes_.size() != activation_types_.size() + 1) + throw wrong_activation_types_count_error{layer_sizes_.size() - 1, activation_types_.size()}; } template diff --git a/libs/ml/source/neural_net.cpp b/libs/ml/source/neural_net.cpp index 94ce67a9..21787751 100644 --- a/libs/ml/source/neural_net.cpp +++ b/libs/ml/source/neural_net.cpp @@ -1,5 +1,7 @@ #include +#include + namespace psemek::ml { @@ -8,6 +10,10 @@ namespace psemek::ml return "neural net must have at least a single layer"; } + wrong_activation_types_count_error::wrong_activation_types_count_error(std::size_t expected, std::size_t actual) + : std::runtime_error(util::to_string("wrong number of activation types: expected ", expected, ", got ", actual)) + {} + template struct neural_net; template struct neural_net;