8 const Eigen::MatrixXf& weightsOutput,
const Eigen::VectorXf& biasOutput,
9 const StringArray& categories)
10 : m_weights(weights), m_bias(biases), m_weightsOutput(weightsOutput), m_biasOutput(biasOutput),
11 m_outputCategories(categories)
57 int maxIdx = std::distance(
m_outputs.data(), maxElementIter);
74 int maxIdx = std::distance(
m_outputs.data(), maxElementIter);
84 const char* jsonBinaryData =
reinterpret_cast<const char*
>(KrotosBinaryData::logistic_regression_json);
87 String jsonString(jsonBinaryData);
90 auto parsedData = JSON::parse(jsonString);
92 if (!parsedData.isVoid())
94 auto*
object = parsedData.getDynamicObject();
97 Array<var> weightsAllLayers;
98 Array<var> biasesAllLayers;
101 StringArray weightKeys;
102 StringArray biasKeys;
105 for (
auto& prop : object->getProperties())
108 String propertyName = prop.name.toString();
109 if (propertyName.contains(
"weight"))
111 weightKeys.add(propertyName);
113 else if (propertyName.contains(
"bias"))
115 biasKeys.add(propertyName);
123 for (
auto& weightLayerName : weightKeys)
135 for (
auto& biasLayerName : biasKeys)
138 juce::var bias =
object->getProperty(biasLayerName);
143 int biasVecSize = bias.size();
146 Eigen::VectorXf biasVec(biasVecSize);
147 for (
int i = 0; i < biasVecSize; i++)
149 biasVec[i] = bias[i];
152 m_bias.push_back(biasVec);
157 for (
const auto& weights : weightsAllLayers)
159 if (weights.isArray())
162 int numRows = weights.getArray()->size();
163 int numCols = weights.getArray()->begin()->getArray()->size();
164 if (numCols == 0 || numRows == 0)
170 Eigen::MatrixXf weightsMatrix(numRows, numCols);
171 for (
int i = 0; i < numRows; i++)
173 for (
int j = 0; j < numCols; j++)
175 weightsMatrix(i, j) =
176 static_cast<double>(weights.getArray()->getUnchecked(i).getArray()->getUnchecked(j));
185 auto categories =
object->getProperty(
"classes");
186 for (
auto& cat : *categories.getArray())
198Eigen::VectorXf
LinearModel::sigmoid(
const Eigen::VectorXf& lOut) {
return 1.0 / (1.0 + (-lOut.array()).exp()); }
Eigen::VectorXf relu(const Eigen::VectorXf &lOut)
relu activation function
Definition LinearModel.cpp:200
Eigen::VectorXf m_outputs
Definition LinearModel.h:72
void loadModelData()
Definition LinearModel.cpp:81
Eigen::VectorXf m_workingBuffer
Definition LinearModel.h:88
Eigen::VectorXf infer(const Eigen::VectorXf &input)
infers the model to predict output
Definition LinearModel.cpp:35
std::vector< Eigen::VectorXf > m_layerOutput
Definition LinearModel.h:69
int m_layerSize
Definition LinearModel.h:78
std::vector< Eigen::VectorXf > m_bias
Definition LinearModel.h:60
Eigen::MatrixXf m_weightsOutput
Definition LinearModel.h:57
Eigen::VectorXf inferSingle(const Eigen::VectorXf &input)
Definition LinearModel.cpp:64
Eigen::VectorXf m_biasOutput
Definition LinearModel.h:63
StringArray m_outputCategories
Definition LinearModel.h:66
std::vector< Eigen::MatrixXf > m_weights
Definition LinearModel.h:54
LinearModel()
Constructor for the linear model, this will automatically load a model that is expected to exist in t...
Definition LinearModel.cpp:33
StringArray getOutputCategories()
returns the output categories
Definition LinearModel.cpp:193
int m_numLayers
Definition LinearModel.h:75
String getProminentCategory()
returns the prominent category name
Definition LinearModel.cpp:202
var m_weightsVar
Definition LinearModel.h:84
Eigen::VectorXf sigmoid(const Eigen::VectorXf &lOut)
sigmoid activation function
Definition LinearModel.cpp:198
int m_prominentCategoryIndex
Definition LinearModel.h:91
Definition AirAbsorptionFilter.cpp:2