[英]where is the location of class Normal in edward's source code?
它們在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.