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) )
有人知道这个问题的解决方案吗?
推荐答案
PerReplica
Object通常是通过运行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';>;的对象转换为张量
基础教程推荐
- 如何在Python中绘制多元函数? 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 症状类型错误:无法确定关系的真值 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01