将量化的Conv2D与tf.qint8输入一起使用时出错

时间:2018-10-22 05:37:55

标签: python tensorflow quantization

我是量化的新手,我正在学习tensorflow中QuantizedConv2D操作的用法。代码如下

import tensorflow as tf
a = tf.constant([1.5,1.2],shape = [1,1,1,2], name ='a')
a1 = tf.constant([[2.0],[1.0]],shape = [1,1,2,1], name ='b')
min_a= tf.reduce_min(a)
max_a= tf.reduce_max(a)
x = tf.quantize(a,min_a,max_a,tf.qint8)
min_a1= tf.reduce_min(a1)
max_a1= tf.reduce_max(a1)
x1 = tf.quantize(a1,min_a1,max_a1,tf.qint8)
y1 = t  f.nn.quantized_conv2d(x.output,x1.output,x.output_min,x.output_max,x1.output_min,x1.output_max,[1,1,1,1],"SAME")
with tf.Session() as sess:
  print (sess.run(y1))

我收到以下错误:

  

InvalidArgumentError(请参阅上面的回溯):没有OpKernel   已注册以通过这些attr支持Op'QuantizedConv2D'。   注册设备:[CPU],注册内核:device ='CPU';输入   在[DT_QUINT8]中; [DT_QUINT8]中的Tfilter; [DT_QINT32]中的out_type            [[节点:QuantizedConv2D = QuantizedConv2D [Tfilter = DT_QINT8,Tinput = DT_QINT8,膨胀= [1、1、1、1],out_type = DT_QINT32,   padding =“ SAME”,步幅= [1,1,1,1]](QuantizeV2,QuantizeV2_1,   QuantizeV2:1,QuantizeV2:2,QuantizeV2_1:1,QuantizeV2_1:2)]]

我不确定我的代码是正确的还是错误。

任何帮助将不胜感激。

感谢和问候,

Abhinav

1 个答案:

答案 0 :(得分:0)

我认为tf.nn.quantized_conv2d的文档令人困惑,因为此操作仅针对输入数据类型tf.quint8注册。您可以执行以下操作:

x = tf.quantize(a, min_a, max_a, tf.quint8)
x1 = tf.quantize(a1, min_a1, max_a1, tf.quint8)

我在GitHub上打开了issue