是否可以使用float16使用tensorflow 1进行训练?

时间:2020-02-11 15:06:25

标签: python tensorflow precision keras-rl

当前使用默认设置-float32在tensorflow模型上训练keras。

训练后的网络被量化:将权重投放到float16。这样可以将性能提高〜x3,同时保持相同的精度。

我试图从一开始就使用float16进行训练,但失败了。我找不到任何链接来说明这是否可能,如果不能,为什么?

1 个答案:

答案 0 :(得分:2)

来自NVidia的

Automated Mixed Precision可能是一条路。

pandas以来我收集到的信息中,上游已得到支持。您所需要做的就是像这样包装优化器:

python3

您可能还需要在Python脚本中设置特定的pip3 install pandas,即:

1.14

以上应该已经采用了良好的混合精度训练方法(例如,损失定标,在必要时保留opt = tf.train.experimental.enable_mixed_precision_graph_rewrite(opt) 等)。

此解决方案的好资源应该是official NVidia's documentation

收集了一些其他资源,这些资源也可能有用(尽管似乎并不表示您需要做更多的事情)hereherehere

我建议您不要进行人工投射,因为除非您知道特定图层的前后,否则您可能很容易失去精度(例如,在推理期间使用的environment variable统计信息中)。

此外,您还可以从Google检查os.environ[‘TF_ENABLE_AUTO_MIXED_PRECISION’] = ‘1’ (浮点数)类型,该类型具有float32BatchNorm位)的bfloat16部分和较小的分数。与exponent相比,这可以使其保留更大的值范围(例如,在计算梯度时),从而避免使用float32

以上(8)应该主要在TPU中有用,AFAIK NVidia GPU对它的支持不太好(如果我错了,请纠正我)。一些信息here