Proyecto Final - Turinmachin
Recreación del minijuego de matemáticas de Brain-Age usando redes neuronales
Loading...
Searching...
No Matches
layer_registry.h
Go to the documentation of this file.
1#ifndef PROG3_NN_FINAL_PROJECT_V2025_01_LAYER_REGISTRY_H
2#define PROG3_NN_FINAL_PROJECT_V2025_01_LAYER_REGISTRY_H
3
4#include <algorithm>
5#include <functional>
6#include <istream>
7#include <memory>
8#include <stdexcept>
9#include <unordered_map>
10#include "utec/nn/activation.h"
11#include "utec/nn/dense.h"
12#include "utec/nn/interfaces.h"
13#include "utec/nn/kan.h"
14
15namespace utec::neural_network {
16
21 template <typename T>
24 using LayerCreator = std::function<std::unique_ptr<ILayer<T>>(std::istream&)>;
25
26 public:
34 static void register_layer(LayerId id, LayerCreator creator) {
35 get_map()[id] = std::move(creator);
36 }
37
46 static auto create(LayerId id, std::istream& in) -> std::unique_ptr<ILayer<T>> {
47 auto it = get_map().find(id);
48 if (it == get_map().end()) {
49 throw std::invalid_argument("Invalid layer ID");
50 }
51
52 return it->second(in);
53 }
54
55 private:
60 static auto get_map() -> auto& {
61 static std::unordered_map<LayerId, LayerCreator> map;
62 return map;
63 }
64 };
65
74 template <typename T>
77 [](std::istream&) { return std::make_unique<ReLU<T>>(); });
79 LayerId::Sigmoid, [](std::istream&) { return std::make_unique<Sigmoid<T>>(); });
81 LayerId::Softmax, [](std::istream&) { return std::make_unique<Softmax<T>>(); });
83 return std::make_unique<Dense<T>>(Dense<T>::load(in));
84 });
86 return std::make_unique<Kan<T>>(Kan<T>::load(in));
87 });
88 }
89
90} // namespace utec::neural_network
91
92#endif
static auto load(std::istream &in) -> Dense< T >
Carga la red neuronal en formato pp20.
Definition dense.h:139
static auto load(std::istream &in) -> Kan< T >
Definition kan.h:219
Registro de tipos de capas para deserialización.
Definition layer_registry.h:22
static auto create(LayerId id, std::istream &in) -> std::unique_ptr< ILayer< T > >
Crea una instancia de una capa registrada a partir de su ID. Busca la función asociada al ID proporci...
Definition layer_registry.h:46
static void register_layer(LayerId id, LayerCreator creator)
Registra un tipo de capa junto con su función de construcción. Se asocia el identificador con una fun...
Definition layer_registry.h:34
Capa de activación de Rectified Linear Unit (ReLU). Los valores negativos del input se convierten en ...
Definition activation.h:14
LayerId
Identificador para los diferentes tipos de capas en la red neuronal. Se emplea uint8_t (unsigned 8-bi...
Definition interfaces.h:11
@ Sigmoid
Definition interfaces.h:13
@ Softmax
Definition interfaces.h:15
@ Dense
Definition interfaces.h:14
@ ReLU
Definition interfaces.h:12
@ Kan
Definition interfaces.h:16
void register_all_layers()
Registra todas las capas disponibles en el sistema. Llamado al inicio del programa para asegurar que ...
Definition layer_registry.h:75