Тензорный поток на квантование канала

Как я могу смоделировать поканальное квантование во время вывода? Эта статья определяет послойное квантование как

Мы можем указать один квантователь (определяемый масштабом и нулевой точкой) для всего тензора, называемого послойным квантованием.

и поканальное квантование как

Поканальное квантование имеет разный масштаб и смещение для каждого сверточного ядра.

Предположим, у нас есть этот подграф

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')

При текущих имеющихся API я, вероятно, сделал бы что-то подобное, чтобы имитировать квантование на уровне во время вывода.

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 < / а>).

Существуют ли какие-либо операции в тензорном потоке, которые могут обрабатывать квантование на канал, или есть способ заставить его работать с существующими операциями?


person shoubhik    schedule 13.01.2019    source источник


Ответы (1)