簡體   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