ARTS 2.5.11 (git: 725533f0)
tessem.cc
Go to the documentation of this file.
1
12#include "tessem.h"
13#include "file.h"
14#include "matpack_data.h"
15#include "mystring.h"
16
22void tessem_read_ascii(std::ifstream& is, TessemNN& net) {
23 is >> net.nb_inputs >> net.nb_cache >> net.nb_outputs;
24
25 net.b1.resize(net.nb_cache);
26 for (Index i = 0; i < net.nb_cache; i++) is >> double_imanip() >> net.b1[i];
27
28 net.b2.resize(net.nb_outputs);
29 for (Index i = 0; i < net.nb_outputs; i++) is >> double_imanip() >> net.b2[i];
30
31 net.w1.resize(net.nb_cache, net.nb_inputs);
32 for (Index i = 0; i < net.nb_cache; i++)
33 for (Index j = 0; j < net.nb_inputs; j++) is >> double_imanip() >> net.w1(i, j);
34
35 net.w2.resize(net.nb_outputs, net.nb_cache);
36 for (Index i = 0; i < net.nb_outputs; i++)
37 for (Index j = 0; j < net.nb_cache; j++) is >> double_imanip() >> net.w2(i, j);
38
39 net.x_min.resize(net.nb_inputs);
40 for (Index i = 0; i < net.nb_inputs; i++) is >> double_imanip() >> net.x_min[i];
41
42 net.x_max.resize(net.nb_inputs);
43 for (Index i = 0; i < net.nb_inputs; i++) is >> double_imanip() >> net.x_max[i];
44
45 net.y_min.resize(net.nb_outputs);
46 for (Index i = 0; i < net.nb_outputs; i++) is >> double_imanip() >> net.y_min[i];
47
48 net.y_max.resize(net.nb_outputs);
49 for (Index i = 0; i < net.nb_outputs; i++) is >> double_imanip() >> net.y_max[i];
50}
51
68void tessem_prop_nn(VectorView ny, const TessemNN& net, ConstVectorView nx) {
69 ARTS_USER_ERROR_IF (nx.nelem() != net.nb_inputs,
70 "Tessem NN requires ", net.nb_inputs,
71 " values, but input vector has ", nx.nelem(), " element.")
72
73 ARTS_USER_ERROR_IF (ny.nelem() != net.nb_outputs,
74 "Tessem NN generates ", net.nb_outputs,
75 " values, but output vector has ", ny.nelem(), " element.")
76
77 // preprocessing
78 Vector new_x(nx);
79 new_x[0] *= 1e-9;
80 new_x[4] *= 1e3;
81 for (Index i = 0; i < net.nb_inputs; i++)
82 new_x[i] =
83 -1. + (new_x[i] - net.x_min[i]) / (net.x_max[i] - net.x_min[i]) * 2;
84
85 // propagation
86 Vector trans = net.b1;
87 for (Index i = 0; i < net.nb_cache; i++) {
88 for (Index j = 0; j < net.nb_inputs; j++)
89 trans[i] += net.w1(i, j) * new_x[j];
90
91 trans[i] = 2. / (1. + exp(-2. * trans[i])) - 1.;
92 }
93
94 Vector new_y = net.b2;
95 for (Index i = 0; i < net.nb_outputs; i++) {
96 for (Index j = 0; j < net.nb_cache; j++)
97 new_y[i] += net.w2(i, j) * trans[j];
98 }
99
100 // postprocessing
101 for (Index i = 0; i < net.nb_outputs; i++)
102 ny[i] = net.y_min[i] + (new_y[i] + 1.) / 2. * (net.y_max[i] - net.y_min[i]);
103}
Input manipulator class for doubles to enable nan and inf parsing.
#define ARTS_USER_ERROR_IF(condition,...)
Definition debug.h:137
This file contains basic functions to handle ASCII files.
This file contains the definition of String, the ARTS string class.
Vector x_max
Definition tessem.h:23
Matrix w1
Definition tessem.h:20
Matrix w2
Definition tessem.h:21
Index nb_outputs
Definition tessem.h:16
Vector b2
Definition tessem.h:19
Vector y_max
Definition tessem.h:25
Index nb_inputs
Definition tessem.h:15
Index nb_cache
Definition tessem.h:17
Vector y_min
Definition tessem.h:24
Vector b1
Definition tessem.h:18
Vector x_min
Definition tessem.h:22
void tessem_read_ascii(std::ifstream &is, TessemNN &net)
Definition tessem.cc:22
void tessem_prop_nn(VectorView ny, const TessemNN &net, ConstVectorView nx)
Definition tessem.cc:68
This file contains functions that are adapted from TESSEM code which is used to calculate surface emi...