MCPcopy Create free account
hub / github.com/ARM-software/armnn / CheckScaleSetOnQuantizedType

Function CheckScaleSetOnQuantizedType

src/armnn/Network.cpp:802–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

800}
801
802bool CheckScaleSetOnQuantizedType(Layer* layer, Optional<std::vector<std::string>&> errMessages)
803{
804 bool noErrors = true;
805 unsigned int numOutputs = layer->GetNumOutputSlots();
806 for (unsigned int i = 0; i < numOutputs; i++) {
807 OutputSlot& outputSlot = layer->GetOutputSlot(i);
808 TensorInfo info = outputSlot.GetTensorInfo();
809 auto quantizationDataType = info.GetDataType();
810 auto quantizationScales = info.GetQuantizationScales();
811 // For any Quantized Tensor ensure scale(s) are set
812 switch(quantizationDataType) {
813 case DataType::QAsymmU8:
814 case DataType::QSymmS16:
815 case DataType::QSymmS8:
816 case DataType::QAsymmS8:
817 if ((quantizationDataType == DataType::QAsymmU8 || quantizationDataType == DataType::QAsymmS8)
818 && info.HasPerAxisQuantization()) {
819 throw InvalidArgumentException("Per Axis Quantization is not supported in "
820 "Asymmetric Quantization Datatype.");
821 }
822 // Softmax under QuantisedAsymm8 must always be scale (1.0f/256.0f) and offset 0
823 if (!info.HasPerAxisQuantization() && quantizationDataType == DataType::QAsymmU8 &&
824 (info.GetQuantizationScale() != (1.0f / 256.0f) ||
825 info.GetQuantizationOffset() != 0) &&
826 layer->GetType() == armnn::LayerType::Softmax) {
827 std::stringstream ss;
828 ss << "Quantization parameters for Softmax layer (Scale: " <<
829 info.GetQuantizationScale() << " and Offset: " << info.GetQuantizationOffset() <<
830 ") are incorrect and have been updated to Scale: 0.00390625 and Offset: 0";
831 ARMNN_LOG(warning) << ss.str();
832 info.SetQuantizationScale((1.0f / 256.0f));
833 info.SetQuantizationOffset(0);
834 outputSlot.SetTensorInfo(info);
835 ReportError(ss.str(), errMessages);
836 }
837 break;
838 default:
839 break;
840 }
841 }
842 return noErrors;
843}
844
845OptimizationResult AttemptBackendAssignment(BackendSettings& backendSettings,
846 Graph& graph,

Callers 1

Calls 14

ReportErrorFunction · 0.85
GetOutputSlotMethod · 0.80
GetQuantizationScalesMethod · 0.80
SetQuantizationScaleMethod · 0.80
SetQuantizationOffsetMethod · 0.80
GetNumOutputSlotsMethod · 0.45
GetDataTypeMethod · 0.45
GetQuantizationScaleMethod · 0.45
GetQuantizationOffsetMethod · 0.45
GetTypeMethod · 0.45

Tested by

no test coverage detected