【发布时间】:2021-10-04 01:30:50
【问题描述】:
我正在尝试使用 tfd.TransformedDistribution 来应用双射器链来修改二元高斯分布,并且我收到了上面提到的错误(“AttributeError: Tensor.name is meaningless when eager execution is enabled.” )。我在 Chrome 浏览器版本 94.0.4606.61 中托管的 Jupyter Notebook 中使用 TensorFlow 2.0 (Python) 和 TensorFlow Probability 0.9.0。似乎引发错误的调用是这样的:
x_dist = tfd.TransformedDistribution(z, chain_of_bijectors)
一些链式双射器已使用类似于下图所示的命名约定进行子类化,但即使我使用单个双射器(即,即使是直接从 TensorFlow 的双射器库派生的)也会发生错误。当以类似于链条的仔细检查顺序使用时,双射器似乎工作正常(没有错误)。
典型子类双射器的示例代码 sn-p:
class MyBijector(tfb.Bijector):
def __init__(self, validate_args=False, name='my_bijector'):
super(MyBijector, self).__init__(
validate_args=validate_args,
forward_min_event_ndims=0,
name=name
)
为了解决该错误,我尝试了子类名称的不同变体(对于两个 init's ),并完全删除了这些名称。 (即使在函数调用中使用单个非子类双射器也会发生相同的错误,这一事实似乎表明问题并不在于双射器的名称)。我还尝试禁用急切执行(这似乎没有必要)。当急切执行被禁用时,代码正常运行,直到相同的调用,然后它产生了与双射器链相关的不同错误:“ValueError:'chain_of_[...这里省略了大部分双射器名称的字符串...]/ forward/add:0' 不是有效的范围名称”。
谁能解释 AttributeError 的原因以及如何解决它?如果必须禁用急切执行才能运行此代码,我该如何修复 ValueError?谢谢!
【问题讨论】:
-
请提供minimal reproducible example,以便我们帮助回答您的问题。一个问得好的问题更有可能得到解决您问题的答案。谢谢。
标签: python tensorflow2.0