#include #include #include #include "kompute/Kompute.hpp" int main() { #if KOMPUTE_ENABLE_SPDLOG spdlog::set_level( static_cast(SPDLOG_ACTIVE_LEVEL)); #endif uint32_t ITERATIONS = 100; float learningRate = 0.1; std::shared_ptr xI{ new kp::Tensor({ 0, 1, 1, 1, 1 }) }; std::shared_ptr xJ{ new kp::Tensor({ 0, 0, 0, 1, 1 }) }; std::shared_ptr y{ new kp::Tensor({ 0, 0, 0, 1, 1 }) }; std::shared_ptr wIn{ new kp::Tensor({ 0.001, 0.001 }) }; std::shared_ptr wOutI{ new kp::Tensor({ 0, 0, 0, 0, 0 }) }; std::shared_ptr wOutJ{ new kp::Tensor({ 0, 0, 0, 0, 0 }) }; std::shared_ptr bIn{ new kp::Tensor({ 0 }) }; std::shared_ptr bOut{ new kp::Tensor({ 0, 0, 0, 0, 0 }) }; std::shared_ptr lOut{ new kp::Tensor({ 0, 0, 0, 0, 0 }) }; std::vector> params = { xI, xJ, y, wIn, wOutI, wOutJ, bIn, bOut, lOut }; kp::Manager mgr; std::shared_ptr sqTensor = mgr.createManagedSequence().lock(); sqTensor->begin(); sqTensor->record(params); sqTensor->end(); sqTensor->eval(); std::shared_ptr sq = mgr.createManagedSequence().lock(); // Record op algo base sq->begin(); sq->record({ wIn, bIn }); sq->record>( params, "shaders/glsl/logistic_regression.comp"); sq->record({ wOutI, wOutJ, bOut, lOut }); sq->end(); // Iterate across all expected iterations for (size_t i = 0; i < ITERATIONS; i++) { sq->eval(); for (size_t j = 0; j < bOut->size(); j++) { wIn->data()[0] -= learningRate * wOutI->data()[j]; wIn->data()[1] -= learningRate * wOutJ->data()[j]; bIn->data()[0] -= learningRate * bOut->data()[j]; } } std::cout << "RESULTS" << std::endl; std::cout << "w1: " << wIn->data()[0] << std::endl; std::cout << "w2: " << wIn->data()[1] << std::endl; std::cout << "b: " << bIn->data()[0] << std::endl; }