BNNSQuantizerFunctionDequantize
A constant that specifes conversion to a higher precision.
Declaration
var BNNSQuantizerFunctionDequantize: BNNSQuantizerFunction { get }Discussion
The following code dequantizes a 16-bit integer matrix to a single-precision matrix. The code applies the scale along the zeroth axis and, therefore, the scale tensor contains four elements.
static func dequantize() {
let inputData = UnsafeMutableBufferPointer<Int16>.allocate(capacity: 8)
_ = inputData.initialize(from: [1000, 2000, 3000, 4000,
5000, 6000, 7000, 8000])
let inputDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutRowMajorMatrix,
size: (4, 2, 0, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: inputData.baseAddress!,
data_type: BNNSDataType.int16,
table_data: nil,
table_data_type: BNNSDataType.int16,
data_scale: 1, data_bias: 0)
let outputData = UnsafeMutableBufferPointer<Float>.allocate(capacity: 8)
let outputDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutRowMajorMatrix,
size: (4, 2, 0, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: outputData.baseAddress!,
data_type: BNNSDataType.float,
table_data: nil,
table_data_type: BNNSDataType.float,
data_scale: 1, data_bias: 0)
let scaleData = UnsafeMutableBufferPointer<Int16>.allocate(capacity: 4)
_ = scaleData.initialize(from: [1, 10, 100, 1000])
let scaleDescriptor = BNNSNDArrayDescriptor(flags: BNNSNDArrayFlags(0),
layout: BNNSDataLayoutVector,
size: (4, 0, 0, 0, 0, 0, 0, 0),
stride: (0, 0, 0, 0, 0, 0, 0, 0),
data: scaleData.baseAddress!,
data_type: BNNSDataType.int16,
table_data: nil,
table_data_type: BNNSDataType.int16,
data_scale: 1, data_bias: 0)
var layerParams = BNNSLayerParametersQuantization(axis_mask: 1,
function: BNNSQuantizerFunctionDequantize,
i_desc: inputDescriptor,
o_desc: outputDescriptor,
scale: scaleDescriptor,
bias: BNNSNDArrayDescriptor())
BNNSDirectApplyQuantizer(&layerParams,
nil,
1,
8,
8)
// Prints:
// [1000.0, 200.0, 30.0, 4.0,
// 5000.0, 600.0, 70.0, 8.0]
print(Array(outputData))
inputData.deallocate()
outputData.deallocate()
scaleData.deallocate()
}