82 vector<float> dropout_in;
83 vector<float> dropout_out;
87 vector<int> forward_nodes;
99 float dropout_prob_in;
100 float dropout_prob_out;
101 float sparse_zero_prob;
113 vector<float> b_mean, b_var;
114 vector<float> alpha, beta;
115 float normalization_update_factor;
116 vector<double> curr_mean, curr_var;
131 vector<float> sweights;
136 int update_weights_flag;
140 int only_forward_flag;
143 micNode() { data_node = -1; data_node_p = NULL; update_weights_flag = 1; only_forward_flag = 0; subtype =
""; }
146 int init_wgts_rand(
float min_range,
float max_range);
149 int init_wgts_rand_normal(
float mean,
float std);
151 int fill_input_node(
int *perm,
int len,
MedMat<float> &x_mat,
int last_is_bias_flag);
152 int fill_output_node(
int *perm,
int len,
MedMat<float> &y_mat, vector<float> &sample_weights);
154 int get_input_batch(
int do_grad_flag);
155 int forward_batch(
int do_grad_flag);
157 int forward_batch_leaky_relu(
int do_grad_flag);
158 int forward_batch_normalization(
int do_grad_flag);
159 int forward_batch_softmax(
int do_grad_flag);
160 int forward_batch_regression(
int do_grad_flag);
170 int back_propagete_from(
micNode *next);
171 int get_backprop_delta();
173 int weights_gd_step();
174 int weights_normalization_step();
177 void print(
const string &prefix,
int i_state,
int i_in);
179 std::default_random_engine gen;
215 string params_init_string;
218 int predict_batch_size;
223 vector<float> samp_ratio;
229 float weights_init_std;
233 float def_learning_rate, def_lambda, def_momentum;
234 vector<float> learning_rates;
237 float normalization_factor;
238 float sparse_zero_prob;
240 vector<int> n_hidden;
241 vector<float> dropout_in_probs;
250 float min_improve_n_back;
251 int n_preds_per_sample;
259 int last_layer_to_keep;
265 void init_defaults() {
266 batch_size = 1024; predict_batch_size = 30000; nfeat = 0; n_categ = 0; n_per_categ = 1; max_wgt_norm = 0; min_wgt_norm = 0;
267 weights_init_std = (float)0.01; rate_decay = (float)0.97;
269 dropout_in_probs.clear();
271 def_A = (float)1.0; def_B = (float)0.01;
272 def_learning_rate = (float)0.1; def_lambda = 0; def_momentum = (float)0.9; normalization_factor = (float)0.99;
274 sparse_zero_prob = 0;
277 n_preds_per_sample = 1;
281 min_improve_n_back = (float)0.001;
283 last_layer_to_keep = -1;
290 int node_infos_init_finish();
299 vector<micNode> nodes;
302 vector<micNode> nodes_last_best;
304 micNet() { nodes.clear(); }
306 void copy_nodes(vector<micNode> &in_nodes);
309 int add_input_layer();
310 int add_fc_leaky_relu_layer(
int in_node,
int n_hidden,
float dropout_out_p,
float sparse_prob,
float learn_rate);
311 int add_normalization_layer(
int in_node);
312 int add_softmax_output_layer(
int in_node);
313 int add_regression_output_layer(
int in_node);
314 int add_autoencoder_loss(
int in_node,
int data_node);
318 int init_fully_connected(
const string &init_str);
320 int init_net(
const string &init_string);
325 int forward_batch(
int do_grad_flag);
326 int back_prop_batch();
333 void predict_single(
const vector<float> &x, vector<float> &preds)
const;
335 vector<vector<int>> index_by_categ;
336 int get_batch_with_samp_ratio(
MedMat<float> &y_train,
int batch_len, vector<int> &chosen);
340 int test_grad_numerical(
int i_node,
int i_in,
int i_out,
float epsilon);
344 int init_from_string(
string init_str);
349 size_t get_size() {
return MedSerialize::get_size(version, params.params_init_string, nodes); }
350 size_t serialize(
unsigned char *blob) {
return MedSerialize::serialize(blob, version, params.params_init_string, nodes); }
353 size_t size = MedSerialize::deserialize(blob, version, init_str);
354 fprintf(stderr,
"micNet deserialize init with %s\n", init_str.c_str());
356 size += MedSerialize::deserialize(&blob[size], nodes);
357 for (
auto &node : nodes) { node.my_net =
this; }
361 int n_preds_per_sample()
const {
return params.n_preds_per_sample; }