示例#1
0
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")
示例#2
0
def model_tf(x):
  # return x
  return tf.quantize_v2(x, 0.0, 75.4, tf.quint8, name='ys')
示例#3
0
def cvt_x(x):
    return tf.quantize_v2(x, -1.0, 3.0, tf.quint8)
示例#4
0
    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)
示例#5
0
def model_tf(x):
    return tf.quantize_v2(x, -1.0, 3.0, tf.quint8, name='ys')
示例#6
0
def model_tf(x):
    return tf.quantize_v2(x, 0.0, 108.4, tf.quint8, name='ys')
示例#7
0
def model(x):
    variables = {}
    y = tf.quantize_v2(x, -2.0, 2.0, tf.quint8, name='ys')
    return y, variables
示例#8
0
def model_tf(x):
  # return x
  return tf.quantize_v2(x, -3.0, 9.0, tf.quint8, name='ys')
示例#9
0
def cvt_x(x):
    return tf.quantize_v2(x, -1, 3, tf.quint8)