9 #ifdef MOOSE_LIBTORCH_ENABLED 18 makeScalarHyperParameter(
const Real value)
20 return torch::tensor(value, torch::TensorOptions().dtype(at::kDouble));
24 makeVectorHyperParameter(
const std::vector<Real> & value)
30 insertHyperParameter(std::unordered_map<std::string, torch::Tensor> & hyperparameters,
31 std::unordered_set<std::string> & tunable_hp,
32 const std::string & prefixed_name,
34 const bool is_tunable)
37 tunable_hp.insert(prefixed_name);
38 return hyperparameters.emplace(prefixed_name, std::move(tensor)).first->second;
46 return tensor.dim() == 0;
52 return tensor.dim() == 1;
59 params.
addParam<std::vector<UserObjectName>>(
60 "covariance_functions", {},
"Covariance functions that this covariance function depends on.");
62 "num_outputs", 1,
"The number of outputs expected for this covariance function.");
72 _num_outputs(getParam<unsigned
int>(
"num_outputs")),
73 _dependent_covariance_names(getParam<
std::vector<UserObjectName>>(
"covariance_functions"))
86 const torch::Tensor & ,
90 mooseError(
"Hyperparameter tuning not set up for this covariance function. Please define " 91 "computedKdhyper() to compute gradient.");
97 const bool is_tunable)
99 const auto prefixed_name =
_name +
":" +
name;
100 return insertHyperParameter(
106 const std::vector<Real> & value,
107 const bool is_tunable)
109 const auto prefixed_name =
_name +
":" +
name;
110 return insertHyperParameter(
119 if (dependent_covar->isTunable(
name))
125 mooseError(
"We found hyperparameter ",
name,
" but it was not declared tunable!");
135 dependent_covar->loadHyperParamMap(map);
140 const auto map_iter = map.find(iter.first);
141 if (map_iter == map.end())
146 "Unsupported hyperparameter rank ", map_iter->second.dim(),
" for ", iter.first,
".");
148 iter.second = map_iter->second.clone();
157 dependent_covar->buildHyperParamMap(map);
162 mooseError(
"Unsupported hyperparameter rank ", iter.second.dim(),
" for ", iter.first,
".");
164 map[iter.first] = iter.second.clone();
175 if (dependent_covar->getTuningData(
name, size,
min,
max))
196 size = tensor_value->second.numel();
200 mooseError(
"Unsupported hyperparameter rank ", tensor_value->second.dim(),
" for ",
name,
".");
205 std::map<UserObjectName, std::string> & name_type_map)
const 209 dependent_covar->dependentCovarianceTypes(name_type_map);
210 name_type_map.insert(std::make_pair(dependent_covar->name(), dependent_covar->type()));
HyperParameterMap _hyperparameters
Map of hyperparameters stored as rank-0 or rank-1 tensors.
std::vector< std::string > _dependent_covariance_types
The types of the dependent covariance functions.
std::unordered_set< std::string > _tunable_hp
list of tunable hyper-parameters
const std::string & _name
static bool isVectorHyperParameter(const torch::Tensor &tensor)
Return true if a hyperparameter tensor stores a vector of values.
std::unordered_map< std::string, torch::Tensor > HyperParameterMap
torch::Tensor vectorToTensorCopy(const std::vector< DataType > &vector, c10::IntArrayRef sizes)
static bool isScalarHyperParameter(const torch::Tensor &tensor)
Return true if a hyperparameter tensor stores one scalar value.
std::vector< CovarianceFunctionBase * > _covariance_functions
Vector of pointers to the dependent covariance functions.
static InputParameters validParams()
CovarianceFunctionBase(const InputParameters ¶meters)
void buildHyperParamMap(HyperParameterMap &map) const
Populates the input maps with the owned hyperparameters.
auto max(const L &left, const R &right)
const std::string & name() const
Real value(unsigned n, unsigned alpha, unsigned beta, Real x)
void loadHyperParamMap(const HyperParameterMap &map)
Load some hyperparameters into the local map contained in this object.
torch::Tensor & addRealHyperParameter(const std::string &name, const Real value, const bool is_tunable)
Register a scalar hyperparameter to this covariance function.
void dependentCovarianceTypes(std::map< UserObjectName, std::string > &name_type_map) const
Populate a map with the names and types of the dependent covariance functions.
virtual bool computedKdhyper(torch::Tensor &dKdhp, const torch::Tensor &x, const std::string &hyper_param_name, unsigned int ind) const
Redirect dK/dhp for hyperparameter "hp".
const std::vector< UserObjectName > _dependent_covariance_names
The names of the dependent covariance functions.
void mooseError(Args &&... args) const
torch::Tensor & addVectorRealHyperParameter(const std::string &name, const std::vector< Real > &value, const bool is_tunable)
Register a vector hyperparameter to this covariance function.
static InputParameters validParams()
auto min(const L &left, const R &right)
void ErrorVector unsigned int
virtual bool getTuningData(const std::string &name, unsigned int &size, Real &min, Real &max) const
Get the default minimum and maximum and size of a hyperparameter.
virtual bool isTunable(const std::string &name) const
Check if a given parameter is tunable.
CovarianceFunctionBase * getCovarianceFunctionByName(const UserObjectName &name) const
Lookup a CovarianceFunction object by name and return pointer.