当前使用默认设置-float32在tensorflow模型上训练keras。
训练后的网络被量化:将权重投放到float16。这样可以将性能提高〜x3,同时保持相同的精度。
我试图从一开始就使用float16进行训练,但失败了。我找不到任何链接来说明这是否可能,如果不能,为什么?
答案 0 :(得分:2)
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。
收集了一些其他资源,这些资源也可能有用(尽管似乎并不表示您需要做更多的事情)here,here或here。
我建议您不要进行人工投射,因为除非您知道特定图层的前后,否则您可能很容易失去精度(例如,在推理期间使用的environment variable
统计信息中)。
此外,您还可以从Google检查os.environ[‘TF_ENABLE_AUTO_MIXED_PRECISION’] = ‘1’
(浮点数)类型,该类型具有float32
(BatchNorm
位)的bfloat16
部分和较小的分数。与exponent
相比,这可以使其保留更大的值范围(例如,在计算梯度时),从而避免使用float32
。
以上(8
)应该主要在TPU中有用,AFAIK NVidia GPU对它的支持不太好(如果我错了,请纠正我)。一些信息here。