Python 如何将perreplica转换为张量?
在tensorflow2.0中使用多gpu进行培训时,perreplica将减少以下代码:Python 如何将perreplica转换为张量?,python,tensorflow,tensorflow2.0,Python,Tensorflow,Tensorflow2.0,在tensorflow2.0中使用多gpu进行培训时,perreplica将减少以下代码: strategy.reduce(tf.distribute.ReduceOp.SUM,每个副本的损失,axis=None) 但是,如果我只想收集(没有“总和减少”或“平均减少”)所有gpu的预测到张量中: per_replica_loss,per_replica_predicitions=strategy.experimental_run_v2(训练步骤,args=(数据集输入,) #如何把每一个复型的
strategy.reduce(tf.distribute.ReduceOp.SUM,每个副本的损失,axis=None)
但是,如果我只想收集(没有“总和减少”或“平均减少”)所有gpu的预测到张量中:
per_replica_loss,per_replica_predicitions=strategy.experimental_run_v2(训练步骤,args=(数据集输入,)
#如何把每一个复型的预测转换成张量?
简而言之,您可以将PerReplica
结果转换为一组张量,如下所示:
tensors_tuple = per_replica_predicitions.values
per_replica_losses, per_replica_predicitions = strategy.experimental_run_v2(train_step, args=(dataset_inputs,))
if strategy.num_replicas_in_sync > 1:
predicition_tensors = per_replica_predicitions.values
else:
predicition_tensors = per_replica_predicitions
返回的tensors\u元组
将是来自每个副本/设备的预测
的元组:
(predicton_tensor_from_dev0, prediction_tensor_from_dev1,...)
此元组中的元素数由分布式策略可用的设备决定。特别是,如果策略在单个副本/设备上运行,则strategy.experimental_run_v2的返回值将与直接调用train_step函数相同(张量或张量列表由您的train_step
决定)。因此,您可能希望这样编写代码:
tensors_tuple = per_replica_predicitions.values
per_replica_losses, per_replica_predicitions = strategy.experimental_run_v2(train_step, args=(dataset_inputs,))
if strategy.num_replicas_in_sync > 1:
predicition_tensors = per_replica_predicitions.values
else:
predicition_tensors = per_replica_predicitions
PerReplica
是包装分布式运行结果的类对象。您可以找到它的定义,有更多的属性/方法供我们操作PerReplica
对象