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

时间:2018-02-24 10:44:14

标签: python tensorflow pymc

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

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

为什么需要这样做?为什么不能简化为

之类的东西
alpha = pymc.Normal(mu=0, tau=.01)

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

这看起来似乎是一个奇怪的界面决定。这是一个惯例问题,还是一个技术问题?

1 个答案:

答案 0 :(得分:1)

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.

PS:示例是仅供参考的简化版