Sync public subset from Flux (private)

This commit is contained in:
Gitea CI
2025-10-06 20:14:13 +00:00
parent 272e77c536
commit b2d00af0e1
390 changed files with 152131 additions and 0 deletions

View File

@@ -0,0 +1,28 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/vector.h"
#include "./utils/matrix.h"
#include "./utils/random.h"
namespace neural_networks{
template <typename T>
struct activation_ReLU{
utils::Matrix<T> outputs;
void forward(utils::Matrix<T> inputs){
outputs = numerics::max(inputs, T{0});
//outputs.print();
}
};
} // end namespace neural_networks

View File

@@ -0,0 +1,37 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/vector.h"
#include "./utils/matrix.h"
#include "./numerics/max.h"
#include "./numerics/matsubtract.h"
#include "./numerics/exponential.h"
#include "./numerics/matdiv.h"
namespace neural_networks{
template <typename T>
struct activation_softmax{
utils::Matrix<T> exp_values;
utils::Matrix<T> probabilities;
utils::Matrix<T> outputs;
void forward(const utils::Matrix<T> inputs){
exp_values = numerics::exponential(numerics::matsubtract(inputs, numerics::max(inputs, "rows"), "col"));
probabilities = numerics::matdiv(exp_values, numerics::matsum(exp_values, "col"), "col");
outputs = probabilities;
}
};
} // end namespace neural_networks

View File

@@ -0,0 +1,42 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/matrix.h"
#include "./utils/vector.h"
#include "./utils/random.h"
//#include <math.h>
namespace neural_networks{
template <typename TX, typename Ty>
void create_spital_data(const uint64_t samples, const uint64_t classes, utils::Matrix<TX>& X, utils::Vector<Ty>& y) {
const uint64_t rows = samples*classes;
TX r, t;
uint64_t row_idx;
if ((rows != X.rows()) || (X.cols() != 2)){
X.resize(samples*classes, 2);
}
if (rows != y.size()){
y.resize(rows);
}
for (uint64_t i = 0; i < classes; ++i){
for (uint64_t j = 0; j < samples; ++j){
r = static_cast<TX>(j)/static_cast<TX>(samples);
t = static_cast<TX>(i)*4.0 + (4.0+r);
row_idx = (i*samples) + j;
X(row_idx, 0) = r*std::cos(t*2.5) + utils::random(TX{-0.15}, TX{0.15});
X(row_idx, 1) = r*std::sin(t*2.5) + utils::random(TX{-0.15}, TX{0.15});
y[row_idx] = static_cast<Ty>(i);
}
}
}
} // end namesoace NN

View File

@@ -0,0 +1,42 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/vector.h"
#include "./utils/matrix.h"
#include "./utils/random.h"
namespace neural_networks{
template <typename T>
struct dense_layer{
utils::Matrix<T> weights;
utils::Vector<T> biases;
utils::Matrix<T> outputs;
// Default Constructor
dense_layer() = default;
// Constructor
dense_layer(const uint64_t n_inputs, const uint64_t n_neurons){
weights.random(n_inputs, n_neurons, -1, 1);
biases.resize(n_neurons, T{0});
//weights.print();
//outputs.resize()
}
void forward(utils::Matrix<T> inputs){
outputs = numerics::matadd(numerics::matmul_auto(inputs, (weights)), biases, "row");
}
};
} // end namespace neural_networks

View File

@@ -0,0 +1,34 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/vector.h"
#include "./utils/matrix.h"
namespace neural_networks{
template <typename Td, typename Ti>
struct Loss{
utils::Matrix<Td> sample_losses;
Td data_losses;
virtual utils::Vector<Td> forward(const utils::Matrix<Td>& output, const utils::Matrix<Ti>& y) = 0;
Td calculate(const utils::Matrix<Td>& output, const utils::Matrix<Ti>& y){
// Calculate sample losses
sample_losses = forward(output, y);
// Calculate mean loss
data_losses = numerics::mean(sample_losses);
return data_losses;
}
};
} // end namespace neural_networks

View File

@@ -0,0 +1,34 @@
#pragma once
#include "./core/omp_config.h"
#include "./utils/vector.h"
#include "./utils/matrix.h"
namespace neural_networks{
template <typename Td, typename Ti>
struct Loss{
utils::Matrix<Td> sample_losses;
Td data_losses;
virtual utils::Vector<Td> forward(const utils::Matrix<Td>& output, const utils::Matrix<Ti>& y) = 0;
Td calculate(const utils::Matrix<Td>& output, const utils::Matrix<Ti>& y){
// Calculate sample losses
sample_losses = forward(output, y);
// Calculate mean loss
data_losses = numerics::mean(sample_losses);
return data_losses;
}
};
} // end namespace neural_networks

View File

@@ -0,0 +1,12 @@
// #include "./modules/neural_networks/neural_networks.h"
#pragma once
#include "datasets/spiral.h"
#include "layers/dense_layer.h"
#include "activation_functions/ReLU.h"
#include "activation_functions/Softmax.h"
#include "loss/loss.h"