, 우리는 항상 from edward.models import Normal
를 사용하지만, 내가 그것을edward의 소스 코드에서 Normal 클래스의 위치는 어디입니까? 에드워드을 사용하는 경우
1
A
답변
2
그들은 edward/models/random_variables.py
에 정의되어 어디 말해 줄 수 github
사람의 Normal
의 선언을 찾지 못했습니다.
Normal
클래스를 가져옵니다
from edward.models import Normal
이이 줄이있는, edward/models/__init__.py
에보고 제안 :
from edward.models.random_variables import *
이 edward/models/random_variables.py
에서 보면 우리가 this code을 찾을 :
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
을