在PyMC3,Tensorflow和其他一些软件包中声明对象时,我们需要重复该对象的名称,例如
alpha = pymc.Normal('alpha', mu=0, tau=.01)
为什么需要这样做?为什么不能简化为
之类的东西alpha = pymc.Normal(mu=0, tau=.01)
或
pymc.Normal('alpha', mu=0, tau=.01)
这看起来似乎是一个奇怪的界面决定。这是一个惯例问题,还是一个技术问题?
答案 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:示例是仅供参考的简化版