【问题标题】:Error when using tfd.TransformedDistribution in TF 2.1.0, TFP 0.9.0: "AttributeError: Tensor.name is meaningless when eager execution is enabled."在 TF 2.1.0、TFP 0.9.0 中使用 tfd.TransformedDistribution 时出错:“AttributeError: Tensor.name 在启用 Eager Execution 时毫无意义。”
【发布时间】: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


【解决方案1】:

没关系。我发现了问题:在上面列出的函数调用中(“x_dist = tfd.TransformedDistribution(z,chain_of_bijectors)”),z 是来自底层分布的样本,而不是分布本身,导致错误。一旦我将 z 作为实际分布对象而不是作为此类对象的样本传递,错误就消失了。

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 2020-02-16
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 2020-11-04
    • 2020-09-20
    • 2023-03-13
    • 2011-09-02
    相关资源
    最近更新 更多