我想用fp16推断一个fp32模型,以验证半精度结果。加载检查点后,可以将这些参数转换为float16,然后如何在会话中使用这些fp16参数?
reader = tf.train.NewCheckpointReader(model_file)
var_to_map = reader.get_variable_to_dtype_map()
for key, val in var_to_map.items():
tsr = reader.get_tensor(key)
val_f16 = tf.cast(tsr, tf.float16)
# sess.restore() ???
答案 0 :(得分:0)
我找到了实现它的方法。
weight_name = scope_name + '/' + get_layer_str() + '/' + 'weight'
initw = inits[weight_name]
weight = tf.get_variable('weight', dtype=initw.dtype, initializer=initw)
out = tf.nn.conv2d(self.get_output(), weight, strides=[1, stride, stride, 1], padding='SAME')
我的GPU是没有张量核心的GTX1080,但是使用fp16的推理要比使用fp32的推理快20%-30%,我不明白原因,并且使用了哪个“硬件单元”计算fp16,fp32的传统单位是吗?