Как конвертировать результаты qint32 в quint8 - PullRequest
0 голосов
/ 02 ноября 2018

Я довольно плохо знаком с квантованием в тензорном потоке. У меня есть следующий код:

import tensorflow as tf
from tensorflow.python.ops.gen_math_ops import quantized_mat_mul
from tensorflow.python.ops.gen_math_ops import quantized_add

a = tf.constant([1.4,-1.2],shape =[1,2],dtype = tf.float32)
a1 = tf.constant([[1.0],[1.0]],shape = [2,1], dtype=tf.float32)
bias_a = tf.constant([-1.2,1.2],shape=[1,2],dtype = tf.float32)

min_a= tf.reduce_min(a)
max_a= tf.reduce_max(a)
x = tf.quantize(a,min_a,max_a,tf.quint8)

min_a1= tf.reduce_min(a1)
max_a1= tf.reduce_max(a1)
x1 = tf.quantize(a1,min_a1,max_a1,tf.quint8)

min_bias_a= tf.reduce_min(bias_a)
max_bias_a= tf.reduce_max(bias_a)
bias_a_x = tf.quantize(bias_a,min_bias_a,max_bias_a,tf.qint32)

y =tf.matmul(a,a1)
y1 = quantized_mat_mul(x.output,x1.output,x.output_min,x.output_max,x1.output_min,x1.output_max)

o = quantized_add(y1.out,bias_a_x.output,y1.min_out,y1.max_out,bias_a_x.output_min,bias_a_x.output_max)

Результаты y1 следующие (qint32, float_max, float_min), где float_max и float_min представляют минимальное и максимальное значения с плавающей запятой для квантованного 32-битного вывода int.

Однако для quantized_add требуются входные данные в следующем формате (quint8, float_max, float_min), где float_max и float_min - значения max и min float, представляющие квантованный результат uint8.

Я хотел знать, есть ли способ преобразовать результаты qint32 в quint8, чтобы я мог передать их в функцию quantized_add?

Буду очень признателен, если кто-нибудь сможет мне помочь.

Спасибо и С уважением, Абхинав Джордж

1 Ответ

0 голосов
/ 03 ноября 2018

Вы можете разыграть типы от tf.int32 до tf.quint8 следующим образом:

y1_out = tf.cast(y1.out, tf.quint8)
bias_a_x_out = tf.cast(bias_a_x.output, tf.quint8)

А затем выполните quantized_add как:

o = quantized_add(y1_out, 
              bias_a_x_out, 
              y1.min_out, 
              y1.max_out, 
              bias_a_x.output_min, 
              bias_a_x.output_max)
...