Complete integration with memory failure
This commit is contained in:
@@ -25,6 +25,7 @@ add_executable(
|
|||||||
main/Models.cpp main/Scores.cpp
|
main/Models.cpp main/Scores.cpp
|
||||||
reports/ReportExcel.cpp reports/ReportBase.cpp reports/ExcelFile.cpp
|
reports/ReportExcel.cpp reports/ReportBase.cpp reports/ExcelFile.cpp
|
||||||
results/Result.cpp
|
results/Result.cpp
|
||||||
|
experimental_clfs/XA1DE.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(b_best Boost::boost "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy "${XLSXWRITER_LIB}")
|
target_link_libraries(b_best Boost::boost "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy "${XLSXWRITER_LIB}")
|
||||||
|
|
||||||
@@ -36,6 +37,7 @@ add_executable(b_grid commands/b_grid.cpp ${grid_sources}
|
|||||||
main/HyperParameters.cpp main/Models.cpp main/Experiment.cpp main/Scores.cpp main/ArgumentsExperiment.cpp
|
main/HyperParameters.cpp main/Models.cpp main/Experiment.cpp main/Scores.cpp main/ArgumentsExperiment.cpp
|
||||||
reports/ReportConsole.cpp reports/ReportBase.cpp
|
reports/ReportConsole.cpp reports/ReportBase.cpp
|
||||||
results/Result.cpp
|
results/Result.cpp
|
||||||
|
experimental_clfs/XA1DE.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(b_grid ${MPI_CXX_LIBRARIES} "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy)
|
target_link_libraries(b_grid ${MPI_CXX_LIBRARIES} "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy)
|
||||||
|
|
||||||
@@ -45,6 +47,7 @@ add_executable(b_list commands/b_list.cpp
|
|||||||
main/Models.cpp main/Scores.cpp
|
main/Models.cpp main/Scores.cpp
|
||||||
reports/ReportExcel.cpp reports/ExcelFile.cpp reports/ReportBase.cpp reports/DatasetsExcel.cpp reports/DatasetsConsole.cpp reports/ReportsPaged.cpp
|
reports/ReportExcel.cpp reports/ExcelFile.cpp reports/ReportBase.cpp reports/DatasetsExcel.cpp reports/DatasetsConsole.cpp reports/ReportsPaged.cpp
|
||||||
results/Result.cpp results/ResultsDatasetExcel.cpp results/ResultsDataset.cpp results/ResultsDatasetConsole.cpp
|
results/Result.cpp results/ResultsDatasetExcel.cpp results/ResultsDataset.cpp results/ResultsDatasetConsole.cpp
|
||||||
|
experimental_clfs/XA1DE.cpp
|
||||||
)
|
)
|
||||||
target_link_libraries(b_list "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy "${XLSXWRITER_LIB}")
|
target_link_libraries(b_list "${PyClassifiers}" "${BayesNet}" fimdlp ${Python3_LIBRARIES} "${TORCH_LIBRARIES}" ${LIBTORCH_PYTHON} Boost::python Boost::numpy "${XLSXWRITER_LIB}")
|
||||||
|
|
||||||
|
@@ -66,6 +66,9 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
std::vector<std::vector<double>> XA1DE::predict_proba(std::vector<std::vector<int>>& test_data)
|
std::vector<std::vector<double>> XA1DE::predict_proba(std::vector<std::vector<int>>& test_data)
|
||||||
{
|
{
|
||||||
|
if (use_threads) {
|
||||||
|
return predict_proba_threads(test_data);
|
||||||
|
}
|
||||||
int test_size = test_data[0].size();
|
int test_size = test_data[0].size();
|
||||||
std::vector<std::vector<double>> probabilities;
|
std::vector<std::vector<double>> probabilities;
|
||||||
|
|
||||||
@@ -151,7 +154,8 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
return static_cast<float>(correct) / predictions.size();
|
return static_cast<float>(correct) / predictions.size();
|
||||||
}
|
}
|
||||||
std::vector<std::vector<int>> to_matrix(const torch::Tensor& X)
|
|
||||||
|
std::vector<std::vector<int>> XA1DE::to_matrix(const torch::Tensor& X)
|
||||||
{
|
{
|
||||||
// Ensure tensor is contiguous in memory
|
// Ensure tensor is contiguous in memory
|
||||||
auto X_contig = X.contiguous();
|
auto X_contig = X.contiguous();
|
||||||
@@ -174,24 +178,45 @@ namespace platform {
|
|||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
std::vector<int> to_vector(const torch::Tensor& y)
|
template <typename T>
|
||||||
|
std::vector<T> XA1DE::to_vector(const torch::Tensor& y)
|
||||||
{
|
{
|
||||||
// Ensure the tensor is contiguous in memory
|
// Ensure the tensor is contiguous in memory
|
||||||
auto y_contig = y.contiguous();
|
auto y_contig = y.contiguous();
|
||||||
|
|
||||||
// Access data pointer
|
// Access data pointer
|
||||||
auto data_ptr = y_contig.data_ptr<int>();
|
auto data_ptr = y_contig.data_ptr<T>();
|
||||||
|
|
||||||
// Prepare output container
|
// Prepare output container
|
||||||
std::vector<int> data(y.size(0));
|
std::vector<T> data(y.size(0));
|
||||||
|
|
||||||
// Copy data efficiently
|
// Copy data efficiently
|
||||||
std::copy(data_ptr, data_ptr + y.size(0), data.begin());
|
std::copy(data_ptr, data_ptr + y.size(0), data.begin());
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Fit
|
||||||
|
//
|
||||||
|
// fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing)
|
||||||
XA1DE& XA1DE::fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing)
|
XA1DE& XA1DE::fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing)
|
||||||
{
|
{
|
||||||
return fit(to_matrix(X), to_vector(y), features, className, states, smoothing);
|
auto X_ = to_matrix(X);
|
||||||
|
int a = 1;
|
||||||
|
std::vector<int> y_ = to_vector<int>(y);
|
||||||
|
return fit(X_, y_, features, className, states, smoothing);
|
||||||
|
}
|
||||||
|
XA1DE& XA1DE::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing)
|
||||||
|
{
|
||||||
|
torch::Tensor y = dataset[dataset.size(0) - 1];
|
||||||
|
torch::Tensor X = dataset.slice(0, 0, dataset.size(0) - 1);
|
||||||
|
return fit(X, y, features, className, states, smoothing);
|
||||||
|
}
|
||||||
|
XA1DE& XA1DE::fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights, const bayesnet::Smoothing_t smoothing)
|
||||||
|
{
|
||||||
|
double b = 1;
|
||||||
|
weights_ = to_vector<double>(weights);
|
||||||
|
return fit(dataset, features, className, states, smoothing);
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -17,6 +17,7 @@
|
|||||||
#include "Xaode.hpp"
|
#include "Xaode.hpp"
|
||||||
|
|
||||||
namespace platform {
|
namespace platform {
|
||||||
|
|
||||||
class XA1DE : public bayesnet::BaseClassifier {
|
class XA1DE : public bayesnet::BaseClassifier {
|
||||||
public:
|
public:
|
||||||
XA1DE();
|
XA1DE();
|
||||||
@@ -28,13 +29,11 @@ namespace platform {
|
|||||||
float score(std::vector<std::vector<int>>& X, std::vector<int>& y) override;
|
float score(std::vector<std::vector<int>>& X, std::vector<int>& y) override;
|
||||||
std::vector<int> predict(std::vector<std::vector<int>>& X) override;
|
std::vector<int> predict(std::vector<std::vector<int>>& X) override;
|
||||||
XA1DE& fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override;
|
XA1DE& fit(std::vector<std::vector<int>>& X, std::vector<int>& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override;
|
||||||
|
XA1DE& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override;
|
||||||
XA1DE& fit(torch::Tensor& X, torch::Tensor& y, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override { return *this; };
|
XA1DE& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override;
|
||||||
XA1DE& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const bayesnet::Smoothing_t smoothing) override { return *this; };
|
XA1DE& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights, const bayesnet::Smoothing_t smoothing) override;
|
||||||
XA1DE& fit(torch::Tensor& dataset, const std::vector<std::string>& features, const std::string& className, std::map<std::string, std::vector<int>>& states, const torch::Tensor& weights, const bayesnet::Smoothing_t smoothing) override { return *this; };
|
|
||||||
torch::Tensor predict(torch::Tensor& X) override { return torch::zeros(0); };
|
torch::Tensor predict(torch::Tensor& X) override { return torch::zeros(0); };
|
||||||
torch::Tensor predict_proba(torch::Tensor& X) override { return torch::zeros(0); };
|
torch::Tensor predict_proba(torch::Tensor& X) override { return torch::zeros(0); };
|
||||||
|
|
||||||
int getNumberOfNodes() const override { return 0; };
|
int getNumberOfNodes() const override { return 0; };
|
||||||
int getNumberOfEdges() const override { return 0; };
|
int getNumberOfEdges() const override { return 0; };
|
||||||
int getNumberOfStates() const override { return 0; };
|
int getNumberOfStates() const override { return 0; };
|
||||||
@@ -49,6 +48,7 @@ namespace platform {
|
|||||||
void setHyperparameters(const nlohmann::json& hyperparameters) override;
|
void setHyperparameters(const nlohmann::json& hyperparameters) override;
|
||||||
std::vector<std::string>& getValidHyperparameters() { return validHyperparameters; }
|
std::vector<std::string>& getValidHyperparameters() { return validHyperparameters; }
|
||||||
void setDebug(bool debug) { this->debug = debug; }
|
void setDebug(bool debug) { this->debug = debug; }
|
||||||
|
std::vector<std::string> graph(const std::string& title = "") const override { return {}; }
|
||||||
protected:
|
protected:
|
||||||
void trainModel(const torch::Tensor& weights, const bayesnet::Smoothing_t smoothing) override {};
|
void trainModel(const torch::Tensor& weights, const bayesnet::Smoothing_t smoothing) override {};
|
||||||
|
|
||||||
@@ -57,13 +57,15 @@ namespace platform {
|
|||||||
{
|
{
|
||||||
double sum = std::accumulate(weights_.begin(), weights_.end(), 0.0);
|
double sum = std::accumulate(weights_.begin(), weights_.end(), 0.0);
|
||||||
if (sum == 0) {
|
if (sum == 0) {
|
||||||
throw std::runtime_error("Weights sum zero.");
|
weights_ = std::vector<double>(weights_.size(), 1.0);
|
||||||
}
|
} else {
|
||||||
for (double& w : weights_) {
|
for (double& w : weights_) {
|
||||||
w = w * num_instances / sum;
|
w = w * num_instances / sum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
std::vector<int> to_vector(const torch::Tensor& y);
|
template <typename T>
|
||||||
|
std::vector<T> to_vector(const torch::Tensor& y);
|
||||||
std::vector<std::vector<int>> to_matrix(const torch::Tensor& X);
|
std::vector<std::vector<int>> to_matrix(const torch::Tensor& X);
|
||||||
Xaode aode_;
|
Xaode aode_;
|
||||||
std::vector<double> weights_;
|
std::vector<double> weights_;
|
||||||
|
@@ -35,5 +35,7 @@ static platform::Registrar registrarRaF("RandomForest",
|
|||||||
[](void) -> bayesnet::BaseClassifier* { return new pywrap::RandomForest();});
|
[](void) -> bayesnet::BaseClassifier* { return new pywrap::RandomForest();});
|
||||||
static platform::Registrar registrarXGB("XGBoost",
|
static platform::Registrar registrarXGB("XGBoost",
|
||||||
[](void) -> bayesnet::BaseClassifier* { return new pywrap::XGBoost();});
|
[](void) -> bayesnet::BaseClassifier* { return new pywrap::XGBoost();});
|
||||||
|
static platform::Registrar registrarXA1DE("XA1DE",
|
||||||
|
[](void) -> bayesnet::BaseClassifier* { return new platform::XA1DE();});
|
||||||
|
|
||||||
#endif
|
#endif
|
Reference in New Issue
Block a user