为什么PyMC3和Tensorflow需要对象的双重命名?

2024-06-16 11:13:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在PyMC3、Tensorflow和其他一些包中声明对象时,我们需要重复对象的名称,例如

alpha = pymc.Normal('alpha', mu=0, tau=.01)

为什么需要这个?为什么不能简化为

alpha = pymc.Normal(mu=0, tau=.01)

或者

pymc.Normal('alpha', mu=0, tau=.01)

乍一看,这似乎是一个奇怪的接口决定。这是惯例问题,还是技术问题?你知道吗


Tags: 对象alpha名称声明tensorflow技术pymcnormal
1条回答
网友
1楼 · 发布于 2024-06-16 11:13:57

tensorflow/pymc中的名称与变量标识符不同。你知道吗

示例:

beta = pymc.Normal('alpha', mu=0, tau=.01)完全有效(尽管令人困惑)

这里的名字beta是供人参考的,我们也可以叫它a, b, c。名称“alpha”用作内部名称,用于日志记录和调试。你知道吗

你建议alpha = pymc.Normal(mu=0, tau=.01)使用名称alpha并将其作为默认的内部名称,这是可能的,但有一些问题。你知道吗

在不同的名称空间中,变量名alpha可能会被重用:

例如:

values = []
For i in range(10):
    alpha = pymc.Normal(mu=0, tau=.01)
    values.append(alpha)
    # in this case all values will be logged as alpha which will be confusing to debug.

更简单的解决方案:

values = []
For i in range(10):
    alpha = pymc.Normal('alpha{}'.format(i), mu=0, tau=.01)
    values.append(alpha)
    # in this case values will be logged as alpha_<i> which will not be so confusing to debug.

附言:这是一个简化的例子,仅供参考

相关问题 更多 >