DiSMEC++
initializer.h
Go to the documentation of this file.
1 // Copyright (c) 2021, Aalto University, developed by Erik Schultheis
2 // All rights reserved.
3 //
4 // SPDX-License-Identifier: MIT
5 
6 #ifndef DISMEC_INITIALIZER_H
7 #define DISMEC_INITIALIZER_H
8 
9 #include "matrix_types.h"
10 #include "fwd.h"
11 #include "parallel/numa.h"
12 #include "stats/tracked.h"
13 #include "spec.h"
14 #include <memory>
15 #include <filesystem>
16 #include <optional>
17 
18 namespace dismec::init {
31  public:
32  virtual ~WeightsInitializer() = default;
33 
35  virtual void get_initial_weight(label_id_t label_id, Eigen::Ref<DenseRealVector> target,
37  };
38 
39 
54  public:
55  virtual ~WeightInitializationStrategy() = default;
56 
64  [[nodiscard]] virtual std::unique_ptr<WeightsInitializer>
65  make_initializer(const std::shared_ptr<const GenericFeatureMatrix>& features) const = 0;
66  };
67 
68  // constructor functions
70  std::shared_ptr<WeightInitializationStrategy> create_zero_initializer();
71 
74  std::shared_ptr<WeightInitializationStrategy> create_constant_initializer(DenseRealVector vec);
75 
77  std::shared_ptr<WeightInitializationStrategy> create_pretrained_initializer(std::shared_ptr<model::Model> model);
78 
80  std::shared_ptr<WeightInitializationStrategy> create_numpy_initializer(const std::filesystem::path& weights,
81  std::optional<std::filesystem::path> biases);
82 
84  std::shared_ptr<WeightInitializationStrategy> create_feature_mean_initializer(std::shared_ptr<DatasetBase> data, real_t pos=1, real_t neg=-2);
85 
87  std::shared_ptr<WeightInitializationStrategy> create_multi_pos_mean_strategy(std::shared_ptr<DatasetBase> data, int max_pos, real_t pos=1, real_t neg=-2);
88 
96  std::shared_ptr<WeightInitializationStrategy> create_ova_primal_initializer(
97  const std::shared_ptr<DatasetBase>& data, RegularizerSpec regularizer, LossType loss);
98 }
99 
100 #endif //DISMEC_INITIALIZER_H
Base class for all weight init strategies.
Definition: initializer.h:53
virtual std::unique_ptr< WeightsInitializer > make_initializer(const std::shared_ptr< const GenericFeatureMatrix > &features) const =0
Creats a new, thread local WeightsInitializer.
Base class for all weight initializers.
Definition: initializer.h:30
virtual ~WeightsInitializer()=default
virtual void get_initial_weight(label_id_t label_id, Eigen::Ref< DenseRealVector > target, objective::Objective &objective)=0
Generate an initial vector for the given label. The result should be placed in target.
Strong typedef for an int to signify a label id.
Definition: types.h:20
Class that models an optimization objective.
Definition: objective.h:41
A base class to be used for all types that implement some for of statistics tracking.
Definition: tracked.h:42
Forward-declares types.
std::shared_ptr< WeightInitializationStrategy > create_zero_initializer()
Creates an initialization strategy that initializes all weight vectors to zero.
Definition: zero.cpp:33
std::shared_ptr< WeightInitializationStrategy > create_pretrained_initializer(std::shared_ptr< model::Model > model)
Creates an initialization strategy that uses an already trained model to set the initial weights.
Definition: pretrained.cpp:48
std::shared_ptr< WeightInitializationStrategy > create_feature_mean_initializer(std::shared_ptr< DatasetBase > data, real_t pos=1, real_t neg=-2)
Creates an initialization strategy based on the mean of positive and negative features.
Definition: msi.cpp:90
std::shared_ptr< WeightInitializationStrategy > create_multi_pos_mean_strategy(std::shared_ptr< DatasetBase > data, int max_pos, real_t pos=1, real_t neg=-2)
Creates an initialization strategy based on the mean of positive and negative features.
Definition: multi_pos.cpp:212
std::shared_ptr< WeightInitializationStrategy > create_constant_initializer(DenseRealVector vec)
Definition: constant.cpp:56
std::shared_ptr< WeightInitializationStrategy > create_ova_primal_initializer(const std::shared_ptr< DatasetBase > &data, RegularizerSpec regularizer, LossType loss)
Definition: ova-primal.cpp:15
std::shared_ptr< WeightInitializationStrategy > create_numpy_initializer(const std::filesystem::path &weights, std::optional< std::filesystem::path > biases)
Creates an initialization strategy that uses weights loaded from a npy file.
Definition: numpy.cpp:58
std::variant< objective::SquaredNormConfig, objective::HuberConfig, objective::ElasticConfig > RegularizerSpec
Definition: spec.h:143
types::DenseVector< real_t > DenseRealVector
Any dense, real values vector.
Definition: matrix_types.h:40
LossType
Definition: spec.h:129
float real_t
The default type for floating point values.
Definition: config.h:17