使用当前的Tensorflow 量化操作,如何在推理过程中模拟每通道的量化?此纸将每层的量化定义为
我们可以为被称为每层量化的整个张量指定一个量化器(由标度和零点定义)。
和每通道量化为
每个卷积核的每个信道量化都有不同的尺度和偏移量.
假设我们有这个子图
import tensorflow as tf
x = np.random.uniform(size=500*80*64*1)
.astype('float32')
.reshape(500, 80, 64, 1)
W1 = tf.get_variable('W1', 9, 5, 1, 96],
initializer=tf.truncated_normal_initializer(stddev=0.1))
h1 = tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='VALID')在当前的APIs中,我可能会这样做,在推理时模拟每层的量化。
import tensorflow as tf
x = np.random.uniform(size=500*80*64*1)
.astype('float32')
.reshape(500, 80, 64, 1)
min_x = tf.reduce_min(x)
max_x = tf.reduce_max(x)
W1 = tf.get_variable('W1', 9, 5, 1, 96],
initializer=tf.truncated_normal_initializer(stddev=0.1))
min_W1 = tf.reduce_min(W1)
max_W1 = tf.reduce_max(W1)
qX = tf.quantize(A, min_X, max_X, tf.quint8, mode='MIN_FIRST')
qW = tf.quantize(W, min_W, max_W, tf.quint8, mode='MIN_FIRST')
# This is how one would simulate per layer quantization for convolution.
qAW = tf.nn.quantized_conv2d(qX[0], qW[0], qX[1], qX[2], qW[1], qW[2],
strides = [1, 1, 1, 1], padding='VALID')我的问题是如何模拟每个信道量化?据我所知,tf.quantization.quantize实际上是在进行每层的量化,而不是每通道的量化。另外,tf.nn.quantized_conv2d实际上是对量化层核卷积进行量化层输入.
根据我对每通道量化的理解,将出现k、output_min和output_max.在我的示例中,k是96 (内核数,类似于这个API接口 )。
在tensorflow中是否有任何现有的操作可以处理每个通道的量化,或者是否有一种使其与现有操作操作一起工作的方法?
发布于 2019-01-19 07:24:24
目前还没有办法对tflite上的每通道量化推理进行模拟。正如我所看到的,tensorflow开发人员现在正在实现实验对称每信道量化。但是没有办法去测试它
https://stackoverflow.com/questions/54166589
复制相似问题