繁体   English   中英

爱德华的源代码中Normal类的位置在哪里?

[英]where is the location of class Normal in edward's source code?

当使用爱德华时,我们总是使用from edward.models import Normal ,但是我在github中找不到Normal的声明。

谁能告诉我它在哪里

它们在edward/models/random_variables.py中定义。

您可以这样导入Normal类:

from edward.models import Normal

这建议您查看edward/models/__init__.py ,其中包含以下行:

from edward.models.random_variables import *

edward/models/random_variables.py查找以下代码

from edward.models.random_variable import RandomVariable as _RandomVariable
from tensorflow.contrib import distributions as _distributions

# Automatically generate random variable classes from classes in
# tf.contrib.distributions.
_globals = globals()
for _name in sorted(dir(_distributions)):
  _candidate = getattr(_distributions, _name)
  if (_inspect.isclass(_candidate) and
          _candidate != _distributions.Distribution and
          issubclass(_candidate, _distributions.Distribution)):

    # to use _candidate's docstring, must write a new __init__ method
    def __init__(self, *args, **kwargs):
      _RandomVariable.__init__(self, *args, **kwargs)
    __init__.__doc__ = _candidate.__init__.__doc__
    _params = {'__doc__': _candidate.__doc__,
               '__init__': __init__}
    _globals[_name] = type(_name, (_RandomVariable, _candidate), _params)

del _candidate

这将通过tensorflow.contrib.distributions模块查找从tensorflow.contrib.distributions.Distribution派生的类(忽略其他属性,例如模块的__file__成员或基本Distribution类本身)。 对于每一个,它都会进行一些黑客操作(这只会影响生成的文档),然后执行以下关键行:

_globals[_name] = type(_name, (_RandomVariable, _candidate), _params)

type()内置函数创建一个新类型,即声明一个新类。 第二个参数是基类列表,这里是爱德华的RandomVariable类和TensorFlow随机变量类。 之前它将_globals定义为globals() ,这是一个内置函数,返回模块变量的字典。 因此,在您感兴趣的情况下,上面的行等效于以下内容:

from edward.models.random_variable import RandomVariable as EdRandVar
from tensorflow.contrib.distributions import Normal as TfNormal
Normal = type("Normal", (EdRandVar, TfNormal), {...})

这又等效于此(如果您忽略文档字符串的内容):

from edward.models.random_variable import RandomVariable as EdRandVar
from tensorflow.contrib.distributions import Normal as TfNormal
class Normal(EdRandVar, TfNormal):
    pass

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM