Quickstart¶
Use the CPU backend for correctness checks and the GPU backend for larger batch transforms and ridge solves.
Train a batch ELM¶
#include <vector>
#include "core/elm.hpp"
int main() {
constexpr std::size_t numInputs = 2;
constexpr std::size_t numHiddenNodes = 8;
constexpr std::size_t numSamples = 4;
constexpr std::size_t numOutputs = 1;
std::vector<float> trainData = {
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 0.0f,
1.0f, 1.0f,
};
std::vector<float> targets = {0.0f, 1.0f, 1.0f, 2.0f};
feature_elm::BatchElm<float> model(
numInputs,
numHiddenNodes,
feature_elm::ActivationFunction::kSigmoid,
feature_elm::Backend::kCpu,
1e-6f);
if (!model.train(trainData, targets, numSamples, numOutputs)) {
return 1;
}
auto prediction = model.predict({0.5f, 0.5f});
return prediction.has_value() ? 0 : 1;
}
Train ML-ELM on stacked ELM-AE features¶
#include <vector>
#include "core/ml_elm.hpp"
int main() {
constexpr std::size_t numInputs = 64;
constexpr std::size_t numSamples = 100;
constexpr std::size_t numOutputs = 10;
std::vector<float> trainData(numSamples * numInputs);
std::vector<float> targets(numSamples * numOutputs);
feature_elm::MlElm<float> model(
numInputs,
{64, 32},
feature_elm::ActivationFunction::kSigmoid,
feature_elm::Backend::kCpu,
1e-6f,
42u);
return model.train(trainData, targets, numSamples, numOutputs) ? 0 : 1;
}
Run an online stream¶
#include <vector>
#include "core/os_elm.hpp"
int main() {
feature_elm::RlsOptions<float> options;
options.forgettingFactor = 0.98f; // FOS-ELM behavior.
feature_elm::OsElm<float> model(
2,
16,
feature_elm::ActivationFunction::kSigmoid,
feature_elm::Backend::kCpu,
options);
std::vector<float> initialData = {0.0f, 0.0f, 1.0f, 1.0f};
std::vector<float> initialTargets = {0.0f, 1.0f};
if (!model.initialize(initialData, initialTargets, 2, 1)) {
return 1;
}
std::vector<float> newData = {2.0f, 2.0f};
std::vector<float> newTargets = {1.0f};
return model.update(newData, newTargets, 1) ? 0 : 1;
}
Run the demo¶
docker build -f docker/Dockerfile.demo.cpu -t feature-elm-demo-cpu .
docker run --rm -p 8888:8888 feature-elm-demo-cpu
Open http://localhost:8888 after the server starts.