def _add_assign_add(): scale = tf.placeholder("double", name="pok/update/scale") typedScales = { scale.dtype: scale, } group_assign = [] group_assign_add = [] group_assign_add_quantized = [] for v in tf.trainable_variables(): # Input variables name = "pok/update/var/" + v.name.replace(':', '/') vin = tf.placeholder(v.dtype, v.shape, name=name) typedScale = typedScales.get(v.dtype) if typedScale is None: typedScale = tf.cast(scale, v.dtype) typedScales[v.dtype] = typedScale group_assign.append(v.assign(vin)) assign_add = v.assign_add(vin * typedScale) group_assign_add.append(assign_add) # Add quantize assign_add + variable export if v.dtype.base_dtype != tf.float32: group_assign_add_quantized.append(assign_add) continue # Quantized output weights flat_name = v.name.replace(':', '/') name = "pok/quant/out/" + flat_name minv = tf.reduce_min(v, name=name + '/min') maxv = tf.reduce_max(v, name=name + '/max') quantized_dtype = tf.quint8 quantized = tf.quantize_v2(v, minv, maxv, quantized_dtype, name=name) # Quantized input weights name = "pok/quant/in/" + flat_name inp = tf.placeholder(quantized_dtype, v.shape, name=name) minp = tf.placeholder(tf.float32, name=name + '/min') maxp = tf.placeholder(tf.float32, name=name + '/max') dequantized = tf.dequantize(inp, minp, maxp) assign_add = v.assign_add(dequantized * typedScale) group_assign_add_quantized.append(assign_add) tf.group(*group_assign, name="pok/update/assign") tf.group(*group_assign_add, name="pok/update/assign_add") tf.group(*group_assign_add_quantized, name="pok/update/assign_add_quant")
def model_tf(x): # return x return tf.quantize_v2(x, 0.0, 75.4, tf.quint8, name='ys')
def cvt_x(x): return tf.quantize_v2(x, -1.0, 3.0, tf.quint8)
saver = tf.train.import_meta_graph('./LenetParam.meta') saver.restore(sess, './LenetParam') suffix = ["_w:0", "_b:0"] paramDict = {} for pr in suffix: lay_name = [ v.name for v in tf.trainable_variables() if v.name.endswith(pr) ] for v in lay_name: print(v) curLay = [a for a in tf.trainable_variables() if (a.name == v)] curWt = curLay[0].eval() print(curWt.dtype) quantWt = tf.quantize_v2(curWt, tf.reduce_min(curWt), tf.reduce_max(curWt), tf.qint16, mode="MIN_FIRST", name="quant32to16") chk = sess.run(quantWt) paramDict.update({v: chk}) print(list(paramDict.keys())) #chkVal = chk[0].astype('int16') #chkRange = [chk[1],chk[2]] #fName = "./quant16/"+v+"32to16.npy" #print(fName) #with open(fName,'wb') as f: # np.save(f,chkVal) #fName = "./quant16/"+v+"32to16MinMax.npy" #print(fName) #with open(fName,'wb') as f: # np.save(f,chkRange)
def model_tf(x): return tf.quantize_v2(x, -1.0, 3.0, tf.quint8, name='ys')
def model_tf(x): return tf.quantize_v2(x, 0.0, 108.4, tf.quint8, name='ys')
def model(x): variables = {} y = tf.quantize_v2(x, -2.0, 2.0, tf.quint8, name='ys') return y, variables
def model_tf(x): # return x return tf.quantize_v2(x, -3.0, 9.0, tf.quint8, name='ys')
def cvt_x(x): return tf.quantize_v2(x, -1, 3, tf.quint8)