From 9f1a56c6995a8c453cf4efd1ad24a282b3383399 Mon Sep 17 00:00:00 2001 From: LordMathis Date: Sun, 23 Nov 2025 20:44:25 +0100 Subject: [PATCH] Refactor Layer interface to return size of weights and biases instead of Tensor references --- include/layer.hpp | 4 ++-- include/layers/activation.hpp | 4 ++-- include/layers/avg_pool.hpp | 4 ++-- include/layers/batch_norm.hpp | 4 ++-- include/layers/conv2d.hpp | 4 ++-- include/layers/dense.hpp | 4 ++-- include/layers/max_pool.hpp | 4 ++-- src/layers/activation.cpp | 8 ++++++-- src/layers/avg_pooling.cpp | 8 ++++++-- src/layers/batch_norm.cpp | 8 ++++---- src/layers/conv2d.cpp | 8 ++++---- src/layers/dense.cpp | 8 ++++---- src/layers/max_pool.cpp | 8 ++++++-- src/model.cpp | 8 ++++---- 14 files changed, 48 insertions(+), 36 deletions(-) diff --git a/include/layer.hpp b/include/layer.hpp index bc70e6e..1c018b5 100644 --- a/include/layer.hpp +++ b/include/layer.hpp @@ -32,11 +32,11 @@ class Layer { virtual void set_weights(void *input) = 0; - virtual CUDANet::Tensor& get_weights() = 0; + virtual size_t get_weights_size() = 0; virtual void set_biases(void *input) = 0; - virtual CUDANet::Tensor& get_biases() = 0; + virtual size_t get_biases_size() = 0; }; } // namespace CUDANet::Layers diff --git a/include/layers/activation.hpp b/include/layers/activation.hpp index dfa25a6..40755fc 100644 --- a/include/layers/activation.hpp +++ b/include/layers/activation.hpp @@ -41,11 +41,11 @@ class Activation : public Layer { void set_weights(void *input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void *input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; private: diff --git a/include/layers/avg_pool.hpp b/include/layers/avg_pool.hpp index 519c5a9..a8a9cc5 100644 --- a/include/layers/avg_pool.hpp +++ b/include/layers/avg_pool.hpp @@ -28,11 +28,11 @@ class AvgPool2d : public Layer { void set_weights(void* input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void* input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; protected: CUDANet::Shape in_shape; diff --git a/include/layers/batch_norm.hpp b/include/layers/batch_norm.hpp index 380da42..601e443 100644 --- a/include/layers/batch_norm.hpp +++ b/include/layers/batch_norm.hpp @@ -22,11 +22,11 @@ class BatchNorm2d : public Layer { void set_weights(void* input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void* input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; void set_running_mean(void* input); diff --git a/include/layers/conv2d.hpp b/include/layers/conv2d.hpp index e3eff27..7218c7e 100644 --- a/include/layers/conv2d.hpp +++ b/include/layers/conv2d.hpp @@ -32,11 +32,11 @@ class Conv2d : public Layer { void set_weights(void* input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void* input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; CUDANet::Shape get_padding_shape(); diff --git a/include/layers/dense.hpp b/include/layers/dense.hpp index 83cee2e..c58d4fb 100644 --- a/include/layers/dense.hpp +++ b/include/layers/dense.hpp @@ -28,11 +28,11 @@ class Dense : public Layer { void set_weights(void *input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void *input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; private: CUDANet::Backend *backend; diff --git a/include/layers/max_pool.hpp b/include/layers/max_pool.hpp index 515f226..f4062d3 100644 --- a/include/layers/max_pool.hpp +++ b/include/layers/max_pool.hpp @@ -27,11 +27,11 @@ class MaxPool2d : public Layer { void set_weights(void *input) override; - CUDANet::Tensor& get_weights() override; + size_t get_weights_size() override; void set_biases(void *input) override; - CUDANet::Tensor& get_biases() override; + size_t get_biases_size() override; diff --git a/src/layers/activation.cpp b/src/layers/activation.cpp index f7661be..1a70c50 100644 --- a/src/layers/activation.cpp +++ b/src/layers/activation.cpp @@ -59,8 +59,12 @@ size_t Activation::output_size() { void Activation::set_weights(void *input) {} -CUDANet::Tensor& Activation::get_weights() {} +size_t Activation::get_weights_size() { + return 0; +} void Activation::set_biases(void *input) {} -CUDANet::Tensor& Activation::get_biases() {} \ No newline at end of file +size_t Activation::get_biases_size() { + return 0; +} \ No newline at end of file diff --git a/src/layers/avg_pooling.cpp b/src/layers/avg_pooling.cpp index 7ecb032..3786cfc 100644 --- a/src/layers/avg_pooling.cpp +++ b/src/layers/avg_pooling.cpp @@ -81,11 +81,15 @@ size_t AvgPool2d::output_size() { void AvgPool2d::set_weights(void* input) {} -CUDANet::Tensor& AvgPool2d::get_weights() {} +size_t AvgPool2d::get_weights_size() { + return 0; +} void AvgPool2d::set_biases(void* input) {} -CUDANet::Tensor& AvgPool2d::get_biases() {} +size_t AvgPool2d::get_biases_size() { + return 0; +} AdaptiveAvgPool2d::AdaptiveAvgPool2d( diff --git a/src/layers/batch_norm.cpp b/src/layers/batch_norm.cpp index 1852111..cd2293d 100644 --- a/src/layers/batch_norm.cpp +++ b/src/layers/batch_norm.cpp @@ -74,16 +74,16 @@ void BatchNorm2d::set_weights(void* input) { weights.set_data(static_cast(input)); } -CUDANet::Tensor& BatchNorm2d::get_weights() { - return weights; +size_t BatchNorm2d::get_weights_size() { + return weights.size(); } void BatchNorm2d::set_biases(void* input) { biases.set_data(static_cast(input)); } -CUDANet::Tensor& BatchNorm2d::get_biases() { - return biases; +size_t BatchNorm2d::get_biases_size() { + return biases.size(); } void BatchNorm2d::set_running_mean(void* input) { diff --git a/src/layers/conv2d.cpp b/src/layers/conv2d.cpp index 58a4deb..45cd92f 100644 --- a/src/layers/conv2d.cpp +++ b/src/layers/conv2d.cpp @@ -96,16 +96,16 @@ void Conv2d::set_weights(void* input) { weights.set_data(static_cast(input)); } -CUDANet::Tensor& Conv2d::get_weights() { - return weights; +size_t Conv2d::get_weights_size() { + return weights.size(); } void Conv2d::set_biases(void* input) { biases.set_data(static_cast(input)); } -CUDANet::Tensor& Conv2d::get_biases() { - return biases; +size_t Conv2d::get_biases_size() { + return biases.size(); } CUDANet::Shape Conv2d::get_padding_shape() { diff --git a/src/layers/dense.cpp b/src/layers/dense.cpp index 240b6bb..3895e57 100644 --- a/src/layers/dense.cpp +++ b/src/layers/dense.cpp @@ -55,14 +55,14 @@ void Dense::set_weights(void* input) { weights.set_data(static_cast(input)); } -CUDANet::Tensor& Dense::get_weights() { - return weights; +size_t Dense::get_weights_size() { + return weights.size(); } void Dense::set_biases(void* input) { biases.set_data(static_cast(input)); } -CUDANet::Tensor& Dense::get_biases() { - return biases; +size_t Dense::get_biases_size() { + return biases.size(); } \ No newline at end of file diff --git a/src/layers/max_pool.cpp b/src/layers/max_pool.cpp index 0a4a61e..a5ff35b 100644 --- a/src/layers/max_pool.cpp +++ b/src/layers/max_pool.cpp @@ -75,8 +75,12 @@ size_t MaxPool2d::output_size() { void MaxPool2d::set_weights(void* input) {} -CUDANet::Tensor& MaxPool2d::get_weights() {} +size_t MaxPool2d::get_weights_size() { + return 0; +} void MaxPool2d::set_biases(void* input) {} -CUDANet::Tensor& MaxPool2d::get_biases() {} \ No newline at end of file +size_t MaxPool2d::get_biases_size() { + return 0; +} \ No newline at end of file diff --git a/src/model.cpp b/src/model.cpp index 91641f2..ace690e 100644 --- a/src/model.cpp +++ b/src/model.cpp @@ -128,20 +128,20 @@ void Model::load_weights(const std::string& path) { Layer* layer = layer_map[tensor_info.name]; if (tensor_info.type == TensorType::WEIGHT) { - if (layer->get_weights().size() != values.size()) { + if (layer->get_weights_size() != values.size()) { std::cerr << "Layer: " << tensor_info.name << " has incorrect number of weights, expected " - << layer->get_weights().size() << " but got " + << layer->get_weights_size() << " but got " << values.size() << ", skipping" << std::endl; continue; } layer->set_weights(values.data()); } else if (tensor_info.type == TensorType::BIAS) { - if (layer->get_biases().size() != values.size()) { + if (layer->get_biases_size() != values.size()) { std::cerr << "Layer: " << tensor_info.name << " has incorrect number of biases, expected " - << layer->get_biases().size() << " but got " + << layer->get_biases_size() << " but got " << values.size() << ", skipping" << std::endl; continue; }