OpenNN
Open-source neural networks library
Loading...
Searching...
No Matches
model_expression.h
Go to the documentation of this file.
1// OpenNN: Open Neural Networks Library
2// www.opennn.net
3//
4// M O D E L E X P R E S S I O N H E A D E R
5//
6// Artificial Intelligence Techniques SL
7// artelnics@artelnics.com
8
9#pragma once
10
11#include "variable.h"
12
13namespace opennn
14{
15
16class NeuralNetwork;
17class Layer;
18class Bounding;
19class Unscaling;
20class Recurrent;
21class Scaling;
22class Dense;
23
25{
26public:
27
29
31
32 string build_expression() const;
33
34 void save(const filesystem::path&, ProgrammingLanguage) const;
35
36private:
37
38 const NeuralNetwork* neural_network = nullptr;
39
40 string get_expression_c() const;
41 string get_expression_python() const;
42 string get_expression_php() const;
43 string get_expression_javascript() const;
44
45 static string get_layer_expression(const Layer&, const vector<string>&, const vector<string>&);
46
47 void emit_c_prelude(ostringstream&) const;
48 void emit_c_activations(ostringstream&, const string& expression) const;
49 void emit_c_calculate_outputs(ostringstream&, const string& expression, const vector<string>& lines, bool has_softmax) const;
50 void emit_c_main(ostringstream&) const;
51
52 void emit_php_prelude(ostringstream&) const;
53 void emit_php_activations(ostringstream&, const string& expression) const;
54 void emit_php_inputs_setup(ostringstream&) const;
55 void emit_php_body(ostringstream&, const vector<string>& lines, bool has_softmax) const;
56 void emit_php_response(ostringstream&) const;
57
58 void emit_python_prelude(ostringstream&) const;
59 void emit_python_class_header(ostringstream&) const;
60 void emit_python_activations(ostringstream&, const string& expression) const;
61 void emit_python_calculate_outputs(ostringstream&, const vector<string>& lines, bool has_softmax) const;
62 void emit_python_batch_and_main(ostringstream&) const;
63
64 void emit_js_prelude(ostringstream&) const;
65 void emit_js_inputs_html(ostringstream&) const;
66 void emit_js_outputs_html(ostringstream&, bool use_category_select) const;
67 void emit_js_runtime(ostringstream&, const string& expression, const vector<string>& lines, bool has_softmax, bool use_category_select) const;
68
69 static vector<string> split_expression_lines(const string&);
70 static void rename_spaced_var_definitions(vector<string>&);
71 static vector<string> prepare_body_lines(const string& expression);
72 static vector<string> fix_names(const vector<string>&, const string& default_prefix);
73 static vector<string> fix_get_expression_outputs(const string&, const vector<string>&, const ProgrammingLanguage&);
74 static void apply_name_mapping(string&, const vector<string>& original, const vector<string>& mapped);
75 static string process_body_line(const string&, const vector<string>& input_names, const vector<string>& fixed_input_names);
76 static string replace_reserved_keywords(const string&);
77
78 struct ActivationBodies
79 {
80 const char* c;
81 const char* javascript;
82 const char* python;
83 const char* php;
84 };
85
86 static const vector<pair<string, ActivationBodies>>& activation_table();
87
88 static string write_bounding_expression(const Bounding&, const vector<string>& , const vector<string>&);
89 static string write_scaling_expression(const Scaling&, const vector<string>&, const vector<string>&);
90 static string write_unscaling_expression(const Unscaling&, const vector<string>&, const vector<string>&);
91 static string write_recurrent_expression(const Recurrent&, const vector<string>&, const vector<string>&);
92 static string write_dense_expression(const Dense&, const vector<string>&, const vector<string>&);
93};
94
95}
96
97// OpenNN: Open Neural Networks Library.
98// Copyright(C) 2005-2026 Artificial Intelligence Techniques, SL.
99// Licensed under the GNU Lesser General Public License v2.1 or later.
Per-feature output-clamping layer.
Definition bounding_layer.h:36
Fully-connected layer: y = activation(BN(x * W + b)) with optional dropout.
Definition dense_layer.h:38
Abstract base class for every layer in an OpenNN NeuralNetwork.
Definition layer.h:167
ProgrammingLanguage
Definition model_expression.h:28
@ C
Definition model_expression.h:28
@ PHP
Definition model_expression.h:28
@ JavaScript
Definition model_expression.h:28
@ Python
Definition model_expression.h:28
ModelExpression(const NeuralNetwork *)
void save(const filesystem::path &, ProgrammingLanguage) const
string build_expression() const
Stack of Layers forming a trainable model.
Definition neural_network.h:44
Plain (Elman-style) recurrent layer over fixed-length sequences.
Definition recurrent_layer.h:34
Per-feature input normalization layer.
Definition scaling_layer.h:38
Per-output inverse normalization layer.
Definition unscaling_layer.h:37
Definition adaptive_moment_estimation.h:19