我是量化的新手,我正在学习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
答案 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。