From 432adf57bd5d73f50478c747d63386f9e07314b7 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Tue, 16 Apr 2024 21:07:06 +0200 Subject: [PATCH] Test model weights loading --- src/model/model.cpp | 7 +--- test/model/test_model.cu | 83 ++++++++++++++++++++-------------------- 2 files changed, 43 insertions(+), 47 deletions(-) diff --git a/src/model/model.cpp b/src/model/model.cpp index 5d37aca..d80994c 100644 --- a/src/model/model.cpp +++ b/src/model/model.cpp @@ -51,12 +51,7 @@ float* Model::predict(const float* input) { void Model::addLayer(const std::string& name, Layers::SequentialLayer* layer) { layers.push_back(layer); - - Layers::WeightedLayer* wLayer = dynamic_cast(layer); - - if (wLayer != nullptr) { - layerMap[name] = wLayer; - } + layerMap[name] = layer; } Layers::SequentialLayer* Model::getLayer(const std::string& name) { diff --git a/test/model/test_model.cu b/test/model/test_model.cu index d306598..b6e373c 100644 --- a/test/model/test_model.cu +++ b/test/model/test_model.cu @@ -32,15 +32,7 @@ class ModelTest : public ::testing::Test { ); if (setWeights) { - std::vector conv2dWeights = { - 0.18313f, 0.53363f, 0.39527f, 0.27575f, 0.3433f, 0.41746f, - 0.16831f, 0.61693f, 0.54599f, 0.99692f, 0.77127f, 0.25146f, - 0.4206f, 0.16291f, 0.93484f, 0.79765f, 0.74982f, 0.78336f, - 0.6386f, 0.87744f, 0.33587f, 0.9691f, 0.68437f, 0.65098f, - 0.48153f, 0.97546f, 0.8026f, 0.36689f, 0.98152f, 0.37351f, - 0.68407f, 0.2684f, 0.2855f, 0.76195f, 0.67828f, 0.603f - }; - conv2d->setWeights(conv2dWeights.data()); + conv2d->setWeights(getConv1Weights().data()); } model->addLayer("conv1", conv2d); @@ -58,19 +50,33 @@ class ModelTest : public ::testing::Test { ); if (setWeights) { - std::vector denseWeights = { - 0.36032f, 0.33115f, 0.02948f, 0.09802f, 0.45072f, 0.56266f, - 0.43514f, 0.80946f, 0.43439f, 0.90916f, 0.08605f, 0.07473f, - 0.94788f, 0.66168f, 0.34927f, 0.09464f, 0.61963f, 0.73775f, - 0.51559f, 0.81916f, 0.64915f, 0.03934f, 0.87608f, 0.68364f, - }; - dense->setWeights(denseWeights.data()); + dense->setWeights(getDenseWeights().data()); } model->addLayer("linear", dense); return model; } + std::vector getConv1Weights() { + return std::vector{ + 0.18313f, 0.53363f, 0.39527f, 0.27575f, 0.3433f, 0.41746f, + 0.16831f, 0.61693f, 0.54599f, 0.99692f, 0.77127f, 0.25146f, + 0.4206f, 0.16291f, 0.93484f, 0.79765f, 0.74982f, 0.78336f, + 0.6386f, 0.87744f, 0.33587f, 0.9691f, 0.68437f, 0.65098f, + 0.48153f, 0.97546f, 0.8026f, 0.36689f, 0.98152f, 0.37351f, + 0.68407f, 0.2684f, 0.2855f, 0.76195f, 0.67828f, 0.603f + }; + } + + std::vector getDenseWeights() { + return std::vector{ + 0.36032f, 0.33115f, 0.02948f, 0.09802f, 0.45072f, 0.56266f, + 0.43514f, 0.80946f, 0.43439f, 0.90916f, 0.08605f, 0.07473f, + 0.94788f, 0.66168f, 0.34927f, 0.09464f, 0.61963f, 0.73775f, + 0.51559f, 0.81916f, 0.64915f, 0.03934f, 0.87608f, 0.68364f, + }; + } + void commonTestTeardown(CUDANet::Model *model) { delete model; } @@ -175,38 +181,33 @@ TEST_F(ModelTest, TestModelPredictMultiple) { } TEST_F(ModelTest, TestLoadWeights) { - int outputSize = 3; - CUDANet::Model *model = commonTestSetup(); + CUDANet::Model *model = commonTestSetup(); model->loadWeights("../test/resources/model.bin"); - std::vector input = { - 0.12762f, 0.99056f, 0.77565f, 0.29058f, 0.29787f, 0.58415f, 0.20484f, - 0.05415f, 0.60593f, 0.3162f, 0.08198f, 0.92749f, 0.72392f, 0.91786f, - 0.65266f, 0.80908f, 0.53389f, 0.36069f, 0.18614f, 0.52381f, 0.08525f, - 0.43054f, 0.3355f, 0.96587f, 0.98194f, 0.71336f, 0.78392f, 0.50648f, - 0.40355f, 0.31863f, 0.54686f, 0.1836f, 0.77171f, 0.01262f, 0.41108f, - 0.53467f, 0.3553f, 0.42808f, 0.45798f, 0.29958f, 0.3923f, 0.98277f, - 0.02033f, 0.99868f, 0.90584f, 0.57554f, 0.15957f, 0.91273f, 0.38901f, - 0.27097f, 0.64788f, 0.84272f, 0.42984f, 0.07466f, 0.53658f, 0.83388f, - 0.28232f, 0.48046f, 0.85626f, 0.04721f, 0.36139f, 0.6123f, 0.56991f, - 0.84854f, 0.61415f, 0.2466f, 0.20017f, 0.78952f, 0.93797f, 0.27884f, - 0.30514f, 0.23521f - }; + CUDANet::Layers::WeightedLayer *convLayer = + dynamic_cast(model->getLayer("conv1") + ); + EXPECT_NE(convLayer, nullptr); - std::vector expected = {2e-05f, 0.00021f, 0.99977f}; + std::vector convWeights = convLayer->getWeights(); + std::vector convExpected = getConv1Weights(); - // predict - const float *output = model->predict(input.data()); - - float sum = 0.0f; - for (int i = 0; i < outputSize; ++i) { - EXPECT_NEAR(expected[i], output[i], 1e-5f); - sum += output[i]; + for (int i = 0; i < convExpected.size(); ++i) { + EXPECT_FLOAT_EQ(convExpected[i], convWeights[i]); } - EXPECT_NEAR(sum, 1.0f, 1e-5f); + CUDANet::Layers::WeightedLayer *denseLayer = + dynamic_cast(model->getLayer("linear") + ); + EXPECT_NE(denseLayer, nullptr); + + std::vector denseWeights = denseLayer->getWeights(); + std::vector denseExpected = getDenseWeights(); + + for (int i = 0; i < denseExpected.size(); ++i) { + EXPECT_FLOAT_EQ(denseExpected[i], denseWeights[i]); + } commonTestTeardown(model); - } \ No newline at end of file