|
|
@ -67,6 +67,7 @@ __all__ = [
|
|
|
|
'cuda_places',
|
|
|
|
'cuda_places',
|
|
|
|
'cpu_places',
|
|
|
|
'cpu_places',
|
|
|
|
'cuda_pinned_places',
|
|
|
|
'cuda_pinned_places',
|
|
|
|
|
|
|
|
'in_dygraph_mode',
|
|
|
|
]
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
EMPTY_VAR_NAME = core.kEmptyVarName()
|
|
|
|
EMPTY_VAR_NAME = core.kEmptyVarName()
|
|
|
@ -79,7 +80,10 @@ _dygraph_tracer_ = None
|
|
|
|
_dygraph_current_expected_place_ = None
|
|
|
|
_dygraph_current_expected_place_ = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def _in_dygraph_mode():
|
|
|
|
def in_dygraph_mode():
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
Returns(bool): True if the program is running in dynamic graph mode
|
|
|
|
|
|
|
|
'''
|
|
|
|
return _dygraph_tracer_ is not None
|
|
|
|
return _dygraph_tracer_ is not None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -396,7 +400,7 @@ class Variable(object):
|
|
|
|
if not isinstance(dtype, core.VarDesc.VarType):
|
|
|
|
if not isinstance(dtype, core.VarDesc.VarType):
|
|
|
|
dtype = convert_np_dtype_to_dtype_(dtype)
|
|
|
|
dtype = convert_np_dtype_to_dtype_(dtype)
|
|
|
|
|
|
|
|
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
# record vars in tracer rather than blocks
|
|
|
|
# record vars in tracer rather than blocks
|
|
|
|
self._ivar = kwargs.get("ivar", None)
|
|
|
|
self._ivar = kwargs.get("ivar", None)
|
|
|
|
if not self._ivar:
|
|
|
|
if not self._ivar:
|
|
|
@ -516,7 +520,7 @@ class Variable(object):
|
|
|
|
Returns:
|
|
|
|
Returns:
|
|
|
|
str: The debug string.
|
|
|
|
str: The debug string.
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
# TODO(panyx0718): add more dygraph debug info.
|
|
|
|
# TODO(panyx0718): add more dygraph debug info.
|
|
|
|
return 'name %s, dtype: %s shape: %s' % (self.name, self.dtype,
|
|
|
|
return 'name %s, dtype: %s shape: %s' % (self.name, self.dtype,
|
|
|
|
self.shape)
|
|
|
|
self.shape)
|
|
|
@ -549,42 +553,42 @@ class Variable(object):
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def stop_gradient(self):
|
|
|
|
def stop_gradient(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.stop_gradient
|
|
|
|
return self._ivar.stop_gradient
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return self._stop_gradient
|
|
|
|
return self._stop_gradient
|
|
|
|
|
|
|
|
|
|
|
|
@stop_gradient.setter
|
|
|
|
@stop_gradient.setter
|
|
|
|
def stop_gradient(self, s):
|
|
|
|
def stop_gradient(self, s):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
self._ivar.stop_gradient = s
|
|
|
|
self._ivar.stop_gradient = s
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self._stop_gradient = s
|
|
|
|
self._stop_gradient = s
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def persistable(self):
|
|
|
|
def persistable(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.persistable
|
|
|
|
return self._ivar.persistable
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return self.desc.persistable()
|
|
|
|
return self.desc.persistable()
|
|
|
|
|
|
|
|
|
|
|
|
@persistable.setter
|
|
|
|
@persistable.setter
|
|
|
|
def persistable(self, p):
|
|
|
|
def persistable(self, p):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.persistable
|
|
|
|
return self._ivar.persistable
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.desc.set_persistable(p)
|
|
|
|
self.desc.set_persistable(p)
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def name(self):
|
|
|
|
def name(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.name
|
|
|
|
return self._ivar.name
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return cpt.to_text(self.desc.name())
|
|
|
|
return cpt.to_text(self.desc.name())
|
|
|
|
|
|
|
|
|
|
|
|
@name.setter
|
|
|
|
@name.setter
|
|
|
|
def name(self, new_name):
|
|
|
|
def name(self, new_name):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
self._ivar.name = new_name
|
|
|
|
self._ivar.name = new_name
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
self.desc.set_name(new_name)
|
|
|
|
self.desc.set_name(new_name)
|
|
|
@ -592,14 +596,14 @@ class Variable(object):
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def shape(self):
|
|
|
|
def shape(self):
|
|
|
|
# convert to tuple, make it as same as numpy API.
|
|
|
|
# convert to tuple, make it as same as numpy API.
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.shape
|
|
|
|
return self._ivar.shape
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return tuple(self.desc.shape())
|
|
|
|
return tuple(self.desc.shape())
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def dtype(self):
|
|
|
|
def dtype(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.dtype
|
|
|
|
return self._ivar.dtype
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return self.desc.dtype()
|
|
|
|
return self.desc.dtype()
|
|
|
@ -611,7 +615,7 @@ class Variable(object):
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def type(self):
|
|
|
|
def type(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self._ivar.dtype
|
|
|
|
return self._ivar.dtype
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return self.desc.type()
|
|
|
|
return self.desc.type()
|
|
|
@ -930,7 +934,7 @@ class Operator(object):
|
|
|
|
inputs=None,
|
|
|
|
inputs=None,
|
|
|
|
outputs=None,
|
|
|
|
outputs=None,
|
|
|
|
attrs=None):
|
|
|
|
attrs=None):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
if type is None:
|
|
|
|
if type is None:
|
|
|
|
raise ValueError(
|
|
|
|
raise ValueError(
|
|
|
|
"`type` to initialized an Operator can not be None.")
|
|
|
|
"`type` to initialized an Operator can not be None.")
|
|
|
@ -1049,7 +1053,7 @@ class Operator(object):
|
|
|
|
for arg in out_args:
|
|
|
|
for arg in out_args:
|
|
|
|
out_arg_names.append(cpt.to_text(arg.name))
|
|
|
|
out_arg_names.append(cpt.to_text(arg.name))
|
|
|
|
# TODO(minqiyang): could we remove variable's op in static mode?
|
|
|
|
# TODO(minqiyang): could we remove variable's op in static mode?
|
|
|
|
if not _in_dygraph_mode():
|
|
|
|
if not in_dygraph_mode():
|
|
|
|
arg.op = self
|
|
|
|
arg.op = self
|
|
|
|
self.desc.set_output(out_proto.name, out_arg_names)
|
|
|
|
self.desc.set_output(out_proto.name, out_arg_names)
|
|
|
|
|
|
|
|
|
|
|
@ -1095,7 +1099,7 @@ class Operator(object):
|
|
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
@property
|
|
|
|
def type(self):
|
|
|
|
def type(self):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
return self.iop.type
|
|
|
|
return self.iop.type
|
|
|
|
else:
|
|
|
|
else:
|
|
|
|
return self.desc.type()
|
|
|
|
return self.desc.type()
|
|
|
@ -1638,7 +1642,7 @@ class Block(object):
|
|
|
|
Returns:
|
|
|
|
Returns:
|
|
|
|
Operator: the append Operator.
|
|
|
|
Operator: the append Operator.
|
|
|
|
"""
|
|
|
|
"""
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
op = Operator(
|
|
|
|
op = Operator(
|
|
|
|
block=self,
|
|
|
|
block=self,
|
|
|
|
desc=None,
|
|
|
|
desc=None,
|
|
|
@ -1710,7 +1714,7 @@ class Block(object):
|
|
|
|
return self.ops[start:end]
|
|
|
|
return self.ops[start:end]
|
|
|
|
|
|
|
|
|
|
|
|
def _prepend_op(self, *args, **kwargs):
|
|
|
|
def _prepend_op(self, *args, **kwargs):
|
|
|
|
if _in_dygraph_mode():
|
|
|
|
if in_dygraph_mode():
|
|
|
|
op = Operator(
|
|
|
|
op = Operator(
|
|
|
|
self,
|
|
|
|
self,
|
|
|
|
None,
|
|
|
|
None,
|
|
|
|