Error when using tfd.TransformedDistribution in TF 2.1.0, TFP 0.9.0: "AttributeError: Tensor.name is meaningless when eager execution is enabled."
Error when using tfd.TransformedDistribution in TF 2.1.0, TFP 0.9.0: "AttributeError: Tensor.name is meaningless when eager execution is enabled."
我正在尝试使用 tfd.TransformedDistribution 应用双射子链来修改双变量高斯分布,但出现上述错误(“AttributeError: Tensor.name is meaningless when启用急切执行。”)。我在 Chrome 浏览器中托管的 Jupyter Notebook 中使用 TensorFlow 2.0 (Python) 和 TensorFlow Probability 0.9.0,版本 94.0.4606.61。似乎引发错误的调用是这样的:
x_dist = tfd.TransformedDistribution(z, chain_of_bijectors)
一些链接的双射器已使用类似于下面所示的命名约定进行子类化,但即使我使用单个双射器(即,即使是直接从 TensorFlow 的双射器库派生的双射器)也会发生错误。双射器在类似于链条的仔细检查序列中使用时似乎正常工作(没有错误)。
典型子类双射器的示例代码片段:
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 的),并完全删除了这些名称。 (事实上 ,即使在函数调用中使用单个非子类双射器时也会发生相同的错误,这似乎表明问题实际上并不在于双射器的名称)。我还尝试禁用急切执行(这似乎没有必要)。当 eager execution 被禁用时,代码 运行 通常直到同一个调用,然后它产生了一个与双射链相关的不同错误:“ValueError:'chain_of_[...string of mostly bijector names omitted here...]/forward/add:0' 不是有效的范围名称”。
任何人都可以解释 AttributeError 的原因以及如何解决它吗?如果必须禁用 运行 这段代码的急切执行,我该如何修复 ValueError?谢谢!
没关系。我发现了问题:在上面列出的函数调用中(“x_dist = tfd.TransformedDistribution(z, chain_of_bijectors)”),z 是来自底层分布的样本,而不是分布本身,导致错误。一旦我将 z 作为实际分布对象传递,而不是作为来自此类对象的样本,错误就消失了。
我正在尝试使用 tfd.TransformedDistribution 应用双射子链来修改双变量高斯分布,但出现上述错误(“AttributeError: Tensor.name is meaningless when启用急切执行。”)。我在 Chrome 浏览器中托管的 Jupyter Notebook 中使用 TensorFlow 2.0 (Python) 和 TensorFlow Probability 0.9.0,版本 94.0.4606.61。似乎引发错误的调用是这样的:
x_dist = tfd.TransformedDistribution(z, chain_of_bijectors)
一些链接的双射器已使用类似于下面所示的命名约定进行子类化,但即使我使用单个双射器(即,即使是直接从 TensorFlow 的双射器库派生的双射器)也会发生错误。双射器在类似于链条的仔细检查序列中使用时似乎正常工作(没有错误)。
典型子类双射器的示例代码片段:
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 的),并完全删除了这些名称。 (事实上 ,即使在函数调用中使用单个非子类双射器时也会发生相同的错误,这似乎表明问题实际上并不在于双射器的名称)。我还尝试禁用急切执行(这似乎没有必要)。当 eager execution 被禁用时,代码 运行 通常直到同一个调用,然后它产生了一个与双射链相关的不同错误:“ValueError:'chain_of_[...string of mostly bijector names omitted here...]/forward/add:0' 不是有效的范围名称”。
任何人都可以解释 AttributeError 的原因以及如何解决它吗?如果必须禁用 运行 这段代码的急切执行,我该如何修复 ValueError?谢谢!
没关系。我发现了问题:在上面列出的函数调用中(“x_dist = tfd.TransformedDistribution(z, chain_of_bijectors)”),z 是来自底层分布的样本,而不是分布本身,导致错误。一旦我将 z 作为实际分布对象传递,而不是作为来自此类对象的样本,错误就消失了。