tf.distribute.Strategy: TypeError: Failed to convert object of type lt;class #39;tensorflow.python.distribute.values.PerReplica#39;gt; to Tensor(Tf.Distribute.Strategy:类型错误:无法将lt;类#39;tensorflow.python.distribute.values.PerReplica#39;gt;的对象转换为张量) - IT屋-程序
问题描述
根据TensorFlow网站https://github.com/tensorflow/docs/blob/r1.15/site/en/guide/distribute_strategy.ipynb上的示例判断,似乎没有关于如何使您的代码适应使用分发策略的资源。我的原始代码包括操作张量,例如tf.expand_dims(x, axis=1)。然而,当使用分发策略时,我得到了上述错误,因为expand_dims()不能在PerReplica对象上工作。有关错误的更多详细信息如下:
内容:PerReplica:{ 0/Replica:0/TASK:0/Device:GPU:0:tensor("IteratorGetNext:0",Shape=(?,2,3),dtype=flat32,Device=/Replica:0/TASK:0/Device:GPU:0), 1/Replica:0/TASK:0/Device:GPU:1:tensor("IteratorGetNext_1:0",Shape=(?,2,3),dtype=Float32,Device=/Replica:0/TASK:0/Device:GPU:1) )
有人知道这个问题的解决方案吗?
推荐答案
PerReplicaObject通常是通过运行strategy.experimental_run_v2/run(...)返回的,您可以将其视为将这些消息对包装在一起的特殊字典:
{第i个GPU名称:由第i个GPU返回的张量},在您的所有可用设备中。它看起来像一个字典,但不是真正的字典,类PerReplica为许多用例定义了额外的方法/属性here,例如,在分布式上下文下跨设备减少张量。对于您的案例:
 x = strategy.experimental_run_v2(...)
 if strategy.num_replicas_in_sync > 1:  # x is PerReplica object for multi-devices
    tensors_list = x.values             # a list [x_from_dev_a, x_from_dev_b, ...]
    y = tf.concat(tensors_list, axis=0) # axis=0 at batch dim
 else:
    y = x      # x is a tensor as it is for single device
 tf.expand_dims(y, axis=1)
                        这篇关于Tf.Distribute.Strategy:类型错误:无法将<;类';tensorflow.python.distribute.values.PerReplica';>;的对象转换为张量的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Tf.Distribute.Strategy:类型错误:无法将<;类';tensorflow.python.distribute.values.PerReplica';>;的对象转换为张量
				
        
 
            
        基础教程推荐
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
 - 求两个直方图的卷积 2022-01-01
 - PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
 - 在Python中从Azure BLOB存储中读取文件 2022-01-01
 - 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
 - Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
 - 包装空间模型 2022-01-01
 - 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
 - PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
 - 修改列表中的数据帧不起作用 2022-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				