/*! * \brief Flip the matrix horizontally and vertically, in place. */ derived_t& fflip_inplace() { static_assert(etl_traits<derived_t>::dimensions() <= 2, "Impossible to fflip a matrix of D > 2"); if constexpr (is_2d<derived_t>) { as_derived().ensure_cpu_up_to_date(); std::reverse(as_derived().begin(), as_derived().end()); }
double train_denoising(NIterator noisy_it, NIterator noisy_end, CIterator clean_it, CIterator clean_end, std::size_t max_epochs, Args... args) { dll::rbm_trainer<parent_t, EnableWatcher, RW, true> trainer(args...); return trainer.train(as_derived(), noisy_it, noisy_end, clean_it, clean_end, max_epochs); }
auto train_forward_one(const Input& input) const { // Prepare one fully-ready output auto output = prepare_one_ready_output(as_derived(), input); // Forward propagation train_forward_one(output, input); // Return the forward-propagated result return output; }
void load(std::istream& is) { load(is, as_derived()); }
void load(const std::string& file) { load(file, as_derived()); }
void store(std::ostream& os) const { store(os, as_derived()); }
void store(const std::string& file) const { store(file, as_derived()); }
void display_hidden_unit_samples() const { display_hidden_unit_samples(as_derived()); }
void print() { as_derived().print_impl(); }
double train_denoising(const Samples& noisy, const Samples& clean, std::size_t max_epochs, Args... args) { dll::rbm_trainer<parent_t, EnableWatcher, RW, true> trainer(args...); return trainer.train(as_derived(), noisy.begin(), noisy.end(), clean.begin(), clean.end(), max_epochs); }
void reconstruct(const Sample& items) { reconstruct(items, as_derived()); }
derived_t& scale_inplace(E&& e) { as_derived() *= e; return as_derived(); }
void select_forward_one(Output&& output, const Input& input) const { if constexpr (Train) { as_derived().train_forward_batch(batch_reshape(output), batch_reshape(input)); } else {
void train_forward_one(Output&& output, const Input& input) const { as_derived().train_forward_batch(batch_reshape(output), batch_reshape(input)); }
double train(const Samples& training_data, std::size_t max_epochs, Args... args) { dll::rbm_trainer<parent_t, EnableWatcher, RW, false> trainer(args...); return trainer.train(as_derived(), training_data.begin(), training_data.end(), max_epochs); }
double train(Iterator&& first, Iterator&& last, std::size_t max_epochs, Args... args) { dll::rbm_trainer<parent_t, EnableWatcher, RW, false> trainer(args...); return trainer.train(as_derived(), std::forward<Iterator>(first), std::forward<Iterator>(last), max_epochs); }
void display_visible_unit_activations() const { display_visible_unit_activations(as_derived()); }
void display_visible_unit_samples() const { display_visible_unit_samples(as_derived()); }
ComponentAccessNonConstReturnType operator [] (ComponentIndex const &i) { return as_derived().Derived::operator[](i); }