54 free(hidden_units_pred);
55 free(hiddenbias_pred);
62 #define cast_uint32_t static_cast<uint32_t> 66 float offset = (p < 0) ? 1.0
f : 0.0
f;
67 float clipp = (p < -126) ? -126.0
f : p;
69 float z = clipp - w + offset;
74 } v = {
cast_uint32_t((1 << 23) * (clipp + 121.2740575
f + 27.7280233
f / (4.84252568
f - z) - 1.49012907
f * z))};
81 static inline float fasttanh(
float p) {
return -1.0f + 2.0f / (1.0f +
fastexp(-2.0
f * p)); }
93 for (
unsigned int i = 0; i < n.
k; ++i)
99 ss <<
"OutputLayer" << i;
152 template <
bool is_learn,
bool recompute_h
idden>
165 float save_min_label;
166 float save_max_label;
167 float dropscale = n.
dropout ? 2.0f : 1.0f;
174 std::ostringstream outputStringStream;
190 if (recompute_hidden)
194 for (
unsigned int i = 0; i < n.
k; ++i)
196 if (hiddenbias_pred[i].
scalar == 0)
208 for (
unsigned int i = 0; i < n.
k; ++i)
216 for (
unsigned int i = 0; i < n.
k; ++i)
219 outputStringStream <<
' ';
220 outputStringStream << i <<
':' << hidden_units[i].scalar <<
',' 230 bool converse =
false;
231 float save_partial_prediction = 0;
232 float save_final_prediction = 0;
233 float save_ec_loss = 0;
249 for (
unsigned int i = 0; i < n.
k; ++i)
251 float sigmah = (dropped_out[i]) ? 0.0
f : dropscale *
fasttanh(hidden_units[i].
scalar);
253 out_fs.
values[i] = sigmah;
265 float sqrtk = std::sqrt((
float)n.
k);
322 if (fabs(gradient) > 0)
335 for (
unsigned int i = 0; i < n.
k; ++i)
340 float sigmahprime = dropscale * (1.0f - sigmah * sigmah);
345 float gradhw = 0.5f * nu * gradient * sigmahprime;
373 for (
unsigned int i = 0; i < n.
k; ++i)
375 dropped_out[i] = !dropped_out[i];
384 ec.
loss = save_ec_loss;
392 bool finalize_predictions)
394 for (
size_t c = 0;
c < count;
c++)
397 predict_or_learn_multi<false, true>(n, base, ec);
399 predict_or_learn_multi<false, false>(n, base, ec);
400 if (finalize_predictions)
406 ec.
ft_offset -= (uint64_t)(step * count);
419 auto n = scoped_calloc_or_throw<nn>();
420 bool meanfield =
false;
422 new_options.
add(
make_option(
"nn", n->k).keep().help(
"Sigmoidal feedforward network with <k> hidden units"))
425 .help(
"Train or test sigmoidal feedforward network with input passthrough."))
426 .
add(
make_option(
"multitask", n->multitask).keep().help(
"Share hidden layer across all reduced tasks."))
427 .
add(
make_option(
"dropout", n->dropout).keep().help(
"Train or test sigmoidal feedforward network using dropout."))
428 .
add(
make_option(
"meanfield", meanfield).help(
"Train or test sigmoidal feedforward network using mean field."));
437 if (n->multitask && !all.
quiet)
438 std::cerr <<
"using multitask sharing for neural network " << (all.
training ?
"training" :
"testing") << std::endl;
444 std::cerr <<
"using mean field for neural network " << (all.
training ?
"training" :
"testing") << std::endl;
447 if (n->dropout && !all.
quiet)
448 std::cerr <<
"using dropout for neural network " << (all.
training ?
"training" :
"testing") << std::endl;
450 if (n->inpass && !all.
quiet)
451 std::cerr <<
"using input passthrough for neural network " << (all.
training ?
"training" :
"testing") << std::endl;
453 n->finished_setup =
false;
458 n->save_xsubi = n->xsubi;
460 n->hidden_units = calloc_or_throw<float>(n->k);
461 n->dropped_out = calloc_or_throw<bool>(n->k);
462 n->hidden_units_pred = calloc_or_throw<polyprediction>(n->k);
463 n->hiddenbias_pred = calloc_or_throw<polyprediction>(n->k);
466 n->increment = base->increment;
469 init_learner(n, base, predict_or_learn_multi<true, true>, predict_or_learn_multi<false, true>, n->k + 1);
void set_multipredict(void(*u)(T &, L &, E &, size_t, size_t, polyprediction *, bool))
static float fastexp(float p)
float finalize_prediction(shared_data *sd, float ret)
v_array< namespace_index > indices
void predict(E &ec, size_t i=0)
void push_back(feature_value v, feature_index i)
std::shared_ptr< audit_strings > audit_strings_ptr
v_array< feature_index > indicies
std::vector< std::string > * interactions
void finish_setup(nn &n, vw &all)
void dealloc_example(void(*delete_label)(void *), example &ec, void(*delete_prediction)(void *))
std::shared_ptr< rand_state > _random_state
constexpr unsigned char nn_output_namespace
the core definition of a set of features.
base_learner * make_base(learner< T, E > &base)
v_array< feature_value > values
virtual void add_and_parse(const option_group_definition &group)=0
float merand48(uint64_t &initial)
base_learner * nn_setup(options_i &options, vw &all)
#define add_passthrough_feature(ec, i, x)
void predict_or_learn_multi(nn &n, single_learner &base, example &ec)
constexpr uint64_t nn_constant
virtual float first_derivative(shared_data *, float prediction, float label)=0
constexpr float hidden_max_activation
polyprediction * hidden_units_pred
std::shared_ptr< rand_state > get_random_state()
std::array< features, NUM_NAMESPACES > feature_space
single_learner * as_singleline(learner< T, E > *l)
void(* set_minmax)(shared_data *sd, float label)
void noop_mm(shared_data *, float)
void set_finish_example(void(*f)(vw &all, T &, E &))
learner< T, E > & init_learner(free_ptr< T > &dat, L *base, void(*learn)(T &, L &, E &), void(*predict)(T &, L &, E &), size_t ws, prediction_type::prediction_type_t pred_type)
void push_back(const T &new_ele)
void end_pass(example &ec, vw &all)
void multipredict(nn &n, single_learner &base, example &ec, size_t count, size_t step, polyprediction *pred, bool finalize_predictions)
virtual bool was_supplied(const std::string &key)=0
constexpr uint64_t constant
void(* print_text)(int, std::string, v_array< char >)
option_group_definition & add(T &&op)
int add(svm_params ¶ms, svm_example *fec)
constexpr float hidden_min_activation
v_array< audit_strings_ptr > space_names
typed_option< T > make_option(std::string name, T &location)
void set_end_pass(void(*f)(T &))
void finish_example(vw &all, nn &, example &ec)
std::vector< std::string > interactions
void multipredict(E &ec, size_t lo, size_t count, polyprediction *pred, bool finalize_predictions)
static float fastpow2(float p)
loss_function * squared_loss
LEARNER::base_learner * setup_base(options_i &options, vw &all)
void update(E &ec, size_t i=0)
void learn(E &ec, size_t i=0)
static float fasttanh(float p)
constexpr unsigned char constant_namespace
loss_function * getLossFunction(vw &all, std::string funcName, float function_parameter)
polyprediction * hiddenbias_pred
std::pair< std::string, std::string > audit_strings
void return_simple_example(vw &all, void *, example &ec)