diff --git a/src/PTQ/PTQ.cpp b/src/PTQ/PTQ.cpp index 828b724b650ad6d2d8c1db6ad4a4ba648503f7b3..1172c0105691ec4b5801366d5f287453f3fe4603 100644 --- a/src/PTQ/PTQ.cpp +++ b/src/PTQ/PTQ.cpp @@ -30,6 +30,7 @@ #include "aidge/operator/ArgMax.hpp" #include "aidge/operator/Abs.hpp" #include "aidge/operator/Reshape.hpp" +#include "aidge/operator/Round.hpp" #include "aidge/recipes/Recipes.hpp" @@ -81,41 +82,40 @@ static void fillTensor(std::shared_ptr<Tensor> tensor, float value) static void rescaleTensor(std::shared_ptr<Tensor> tensor, float scaling) { - // Get the tensor data pointer - float * castedTensor = static_cast <float *> (tensor->getImpl()->rawPtr()); + auto mulOp = Mul_Op(); + mulOp.setDataType(tensor->dataType()); + mulOp.setBackend(tensor->backend()); - // Rescale the tensor - for(std::size_t i = 0; i < tensor->size(); i++) - castedTensor[i] *= scaling; + std::shared_ptr<Aidge::Tensor> scalingTensor = std::make_shared<Aidge::Tensor>(Aidge::Array1D<float, 1> {scaling}); + scalingTensor->setDataType(tensor->dataType()); + scalingTensor->setBackend(tensor->backend()); + + mulOp.associateInput(0, tensor); + mulOp.associateInput(1, scalingTensor); + + mulOp.forward(); + + auto outTensor = mulOp.getOutput(0); + *tensor = *outTensor; + //tensor->copyCast(*outTensor); } static void roundTensor(std::shared_ptr<Tensor> tensor) { - // Get the tensor data pointer - float * castedTensor = static_cast <float *> (tensor->getImpl()->rawPtr()); + auto roundOp = Round_Op(); + roundOp.setDataType(tensor->dataType()); + roundOp.setBackend(tensor->backend()); - // Rescale the tensor - for(std::size_t i = 0; i < tensor->size(); i++) - castedTensor[i] = std::nearbyint(castedTensor[i]);//Round + roundOp.associateInput(0, tensor); + roundOp.forward(); + + auto outTensor = roundOp.getOutput(0); + *tensor = *outTensor; + //tensor->copyCast(*outTensor) } static float getTensorAbsoluteMax(std::shared_ptr<Tensor> tensor) { -/* - // Get the tensor data pointer and edit it - float * castedTensor = static_cast<float*>(tensor->getImpl()->rawPtr()); - - // Get the tensor absolute max value - float maxValue = 0.0f; - for (std::size_t i = 0; i < tensor->size(); ++i) { - if(std::fabs(castedTensor[i]) > maxValue) { - maxValue = std::fabs(castedTensor[i]); - } - } - - return maxValue; -*/ - // get the abs tensor std::shared_ptr<Tensor> absTensor = std::make_shared<Tensor>(tensor->abs());