提交 a163846d authored 作者: James Bergstra's avatar James Bergstra

pfunc - fix to helper that guessed at which node is responsible for a wrong dtype in an update

上级 e6d987fd
...@@ -192,19 +192,21 @@ def pfunc(params, outputs=None, mode=None, updates=[], givens=[], ...@@ -192,19 +192,21 @@ def pfunc(params, outputs=None, mode=None, updates=[], givens=[],
if update_val.type != store_into.type: if update_val.type != store_into.type:
#the number of clients don't seam to be defined #the number of clients don't seam to be defined
def get_first_node(node, dtype): def get_first_node(node, dtype):
if node is None: return None if node is None:
if any([o.dtype!=dtype for o in node.outputs]): return None
if any([getattr(o.type, 'dtype', 'nodtype') != dtype for o in node.outputs]):
for i in node.inputs: for i in node.inputs:
n = get_first_node(i.owner, dtype) n = get_first_node(i.owner, dtype)
if n is not None: if n is not None:
return n return n
return node#no parent generated a different type return node#no parent generated a different type
else: return None else:
return None
raise TypeError('an update must have the same type as the original shared variable(dest, dest.type, update_val, update_val.type)', raise TypeError('an update must have the same type as the original shared variable(dest, dest.type, update_val, update_val.type)',
(store_into, store_into.type, (store_into, store_into.type,
update_val, update_val.type), update_val, update_val.type),
'Here is the first node we found that generated a type that is not the same as the output wanted.', 'Hint: FWIW, this is the closest node that generated an incompatible dtype:',
get_first_node(update_val.owner, store_into.dtype)) get_first_node(update_val.owner, store_into.dtype))
update_d[store_into] = update_val update_d[store_into] = update_val
update_expr.append((store_into, update_val)) update_expr.append((store_into, update_val))
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论