11 #include <boost/assert.hpp> 12 #include <boost/numeric/conversion/cast.hpp> 29 : m_NumDimensions(numDimensions)
31 if (numDimensions < 1)
41 std::fill(m_Dimensions.begin(), m_Dimensions.begin() + m_NumDimensions, 0);
45 : m_NumDimensions(numDimensions)
47 if (numDimensions < 1)
57 if (dimensionSizes ==
nullptr)
62 std::copy(dimensionSizes, dimensionSizes + numDimensions, m_Dimensions.begin());
71 : m_NumDimensions(other.m_NumDimensions)
73 std::copy(other.m_Dimensions.cbegin(), other.m_Dimensions.cbegin() + other.m_NumDimensions, m_Dimensions.begin());
78 m_NumDimensions = other.m_NumDimensions;
79 std::copy(other.m_Dimensions.cbegin(), other.m_Dimensions.cbegin() + other.m_NumDimensions, m_Dimensions.begin());
85 CheckDimensionIndex(i);
86 return m_Dimensions.at(i);
91 CheckDimensionIndex(i);
92 return m_Dimensions.at(i);
97 return ((m_NumDimensions == other.m_NumDimensions) &&
98 std::equal(m_Dimensions.cbegin(), m_Dimensions.cbegin() + m_NumDimensions, other.m_Dimensions.cbegin()));
103 return !(*
this == other);
108 if (m_NumDimensions == 0)
113 unsigned int count = 1;
114 for (
unsigned int i = 0; i < m_NumDimensions; i++)
116 count *= m_Dimensions[i];
122 void TensorShape::CheckDimensionIndex(
unsigned int i)
const 124 if (i >= m_NumDimensions)
126 std::stringstream errorMessage;
127 errorMessage <<
"Invalid dimension index: " << i <<
" (number of dimensions is " << m_NumDimensions <<
")";
143 float quantizationScale,
144 int32_t quantizationOffset)
146 , m_DataType(dataType)
153 const unsigned int* dimensionSizes,
155 float quantizationScale,
156 int32_t quantizationOffset)
157 : m_Shape(numDimensions, dimensionSizes)
158 , m_DataType(dataType)
166 const std::vector<float>& quantizationScales,
167 unsigned int quantizationDim)
169 , m_DataType(dataType)
176 const unsigned int* dimensionSizes,
178 const std::vector<float>& quantizationScales,
179 unsigned int quantizationDim)
180 : m_Shape(numDimensions, dimensionSizes)
181 , m_DataType(dataType)
188 : m_Shape(other.m_Shape)
189 , m_DataType(other.m_DataType)
190 , m_Quantization(other.m_Quantization)
195 m_Shape = other.m_Shape;
196 m_DataType = other.m_DataType;
197 m_Quantization = other.m_Quantization;
203 return ((m_Shape == other.m_Shape) &&
204 (m_DataType == other.m_DataType) &&
205 (m_Quantization == other.m_Quantization));
210 return !(*
this == other);
222 match &= m_DataType == other.m_DataType;
239 return m_Quantization.m_Scales;
244 m_Quantization.m_Scales = scales;
249 if (m_Quantization.m_Scales.empty())
256 return m_Quantization.m_Scales[0];
261 m_Quantization.m_Scales = { scale };
266 if (!m_Quantization.m_Offset.has_value())
272 return m_Quantization.m_Offset.value();
277 m_Quantization.m_Offset = MakeOptional<int32_t>(offset);
282 return m_Quantization.m_QuantizationDim;
287 m_Quantization.m_QuantizationDim = quantizationDim;
299 template<
typename MemoryType>
301 : m_MemoryArea(nullptr)
305 template<
typename MemoryType>
307 : m_MemoryArea(memoryArea)
312 template<
typename MemoryType>
319 template<
typename MemoryType>
322 m_Info = other.m_Info;
unsigned int GetNumElements() const
bool operator!=(const TensorShape &other) const
unsigned int operator[](unsigned int i) const
bool IsTypeSpaceMatch(const TensorInfo &other) const
Check that the types are the same and, if quantize, that the quantization parameters are the same...
TensorShape & operator=(const TensorShape &other)
constexpr bool IsQuantizedType()
bool HasPerAxisQuantization() const
Optional< unsigned int > GetQuantizationDim() const
unsigned int GetNumBytes() const
Copyright (c) 2020 ARM Limited.
std::vector< float > GetQuantizationScales() const
bool HasMultipleQuantizationScales() const
bool operator==(const TensorShape &other) const
TensorShape()
Empty (invalid) constructor.
TensorInfo()
Empty (invalid) constructor.
int32_t GetQuantizationOffset() const
float GetQuantizationScale() const
void SetQuantizationScale(float scale)
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
const TensorInfo & GetInfo() const
TensorInfo & operator=(const TensorInfo &other)
void SetQuantizationDim(const Optional< unsigned int > &quantizationDim)
bool operator==(const TensorInfo &other) const
bool operator!=(const TensorInfo &other) const
BaseTensor()
Empty (invalid) constructor.
void SetQuantizationOffset(int32_t offset)
void SetQuantizationScales(const std::vector< float > &scales)
constexpr unsigned int MaxNumOfTensorDimensions
unsigned int GetNumElements() const
constexpr unsigned int GetDataTypeSize(DataType dataType)