提交 b3d98cd8 authored 作者: ChienliMa's avatar ChienliMa

Fix a bug: While initializing a clone graph it should not be cloned again,…

Fix a bug: While initializing a clone graph it should not be cloned again, otherwise the equiv doesn't work.
上级 d3c57238
...@@ -595,7 +595,6 @@ class Function(object): ...@@ -595,7 +595,6 @@ class Function(object):
# But to be safe for now as it isn't documented and we aren't sure # But to be safe for now as it isn't documented and we aren't sure
# it is well tested, we don't share the part of the storage_map. # it is well tested, we don't share the part of the storage_map.
for key in storage_map.keys(): for key in storage_map.keys():
<<<<<<< HEAD
if key not in self.maker.fgraph.outputs and if key not in self.maker.fgraph.outputs and
not isinstance(key, theano.tensor.Constant): not isinstance(key, theano.tensor.Constant):
new_storage_map[memo[key]] = storage_map[key] new_storage_map[memo[key]] = storage_map[key]
...@@ -611,33 +610,6 @@ class Function(object): ...@@ -611,33 +610,6 @@ class Function(object):
input_storage.append( copy.deepcopy[storage]) input_storage.append( copy.deepcopy[storage])
new_func = new_maker.create(input_storage, storage_map=new_storage_map) new_func = new_maker.create(input_storage, storage_map=new_storage_map)
=======
# output_storages should not be shared
# if key not in self.maker.fgraph.outputs and \
# memo.has_key(key):
new_storage_map[memo[key]] = storage_map[key]
# copy input storages if it's mutable
input_storage = []
for i in self.maker.inputs:
storage = getattr(i, 'value', None)
if isinstance(i.variable, theano.tensor.Constant) or\
not i.mutable:
input_storage.append(storage )
else:
input_storage.append( copy.deepcopy[storage])
new_func = new_maker.create(input_storage, \
storage_map=new_storage_map)
# share immutable SharedVariable's storage
# for (input, _1, _2), here, there in zip(self.indices,
# self.input_storage,
# new_func.input_storage):
# if isinstance(i.variable, theano.tensor.Constant) or \
# not input.mutable:
# there.data = here.data
>>>>>>> 4acf04b... Add some docs to FunctionGraph and minor changes of function_module.copy()
return new_func return new_func
......
...@@ -842,7 +842,11 @@ class FunctionGraph(utils.object2): ...@@ -842,7 +842,11 @@ class FunctionGraph(utils.object2):
self.check_integrity() self.check_integrity()
e = FunctionGraph([equiv[i] for i in self.inputs], e = FunctionGraph([equiv[i] for i in self.inputs],
[equiv[o] for o in self.outputs], [equiv[o] for o in self.outputs],
<<<<<<< HEAD
clone=False) clone=False)
=======
clone=Flase)
>>>>>>> b2901d0... Fix a bug: While initializing a clone graph it should not be cloned again, otherwise the equiv doesn't work.
if check_integrity: if check_integrity:
e.check_integrity() e.check_integrity()
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论