2016-11-29 73 views
0

我已经成功地显现了几天dask对象了,但我只是重新启动我的笔记本Jupyter内核和正在运行到一个KeyError,我似乎无法调试。DASK形象化()KeyError异常

之前我重新启动的内核,下面的代码工作正常:

def sigmoid(x): 
    '''Sigmoid function of x.''' 
    return 1/(1+da.exp(-x)) 

X = da.from_array(np.random.random((4,2)), chunks=2) 
beta = np.ones((2,1)) 

## 
p = (X.dot(beta)).map_blocks(sigmoid) 
W = da.diag((p*(1-p))[:,0]) 
hessian = da.dot(X.T.dot(W),X) 
hessian.visualize() 

但现在当我跑,我得到以下回溯:

KeyError         Traceback (most recent call last) 
<ipython-input-62-660a47cb4654> in <module>() 
     7 W = da.diag((p*(1-p))[:,0]) 
     8 hessian = dot(X.T.dot(W),X) 
----> 9 hessian.visualize() 

.../anaconda3/anaconda/lib/python3.5/site-packages/dask/base.py in visualize(self, filename, format, optimize_graph, **kwargs) 
    59   """ 
    60   return visualize(self, filename=filename, format=format, 
---> 61       optimize_graph=optimize_graph, **kwargs) 
    62 
    63  def compute(self, **kwargs): 

.../anaconda3/anaconda/lib/python3.5/site-packages/dask/base.py in visualize(*args, **kwargs) 
    234  dsk = merge(dsks) 
    235 
--> 236  return dot_graph(dsk, filename=filename, **kwargs) 
    237 
    238 

.../anaconda3/anaconda/lib/python3.5/site-packages/dask/dot.py in dot_graph(dsk, filename, format, **kwargs) 
    217  dask.dot.to_graphviz 
    218  """ 
--> 219  g = to_graphviz(dsk, **kwargs) 
    220 
    221  fmts = ['.png', '.pdf', '.dot', '.svg', '.jpeg', '.jpg'] 

.../anaconda3/anaconda/lib/python3.5/site-packages/dask/dot.py in to_graphviz(dsk, data_attributes, function_attributes, rankdir, graph_attr, node_attr, edge_attr, **kwargs) 
    130    if func_name not in seen: 
    131     seen.add(func_name) 
--> 132     g.node(func_name, label=task_label(v), shape='circle', 
    133      **function_attributes.get(k, {})) 
    134    g.edge(func_name, k_name) 

.../anaconda3/anaconda/lib/python3.5/site-packages/dask/dot.py in task_label(task) 
    29  if hasattr(func, 'funcs'): 
    30   if len(func.funcs) > 1: 
---> 31    return '{0}(...)'.format(funcname(func.funcs[0])) 
    32   else: 
    33    head = funcname(func.funcs[0]) 

KeyError: 0 

这似乎有一些标签失踪其中一个任务或类似的东西?

编辑:其实,重现错误,你需要进行如下修改双曲线函数:

from multipledispatch import dispatch 

@dispatch(da.Array) 
def sigmoid(x): 
    '''Sigmoid function of x.''' 
    return 1/(1+da.exp(-x)) 

@dispatch(np.ndarray) 
def sigmoid(x): 
    '''Sigmoid function of x.''' 
    return 1/(1+np.exp(-x)) 

回答

0

感谢您的可重复的例子。

不幸的是,这个运行对我罚款:

In [1]: import numpy as np 

In [2]: import dask.array as da 

In [3]: from multipledispatch import dispatch 
    ...: 
    ...: @dispatch(da.Array) 
    ...: def sigmoid(x): 
    ...:  '''Sigmoid function of x.''' 
    ...:  return 1/(1+da.exp(-x)) 
    ...: 
    ...: @dispatch(np.ndarray) 
    ...: def sigmoid(x): 
    ...:  '''Sigmoid function of x.''' 
    ...:  return 1/(1+np.exp(-x)) 
    ...: 

In [4]: pdb 
Automatic pdb calling has been turned ON 

In [5]: def sigmoid(x): 
    ...:  '''Sigmoid function of x.''' 
    ...:  return 1/(1+da.exp(-x)) 
    ...: 
    ...: X = da.from_array(np.random.random((4,2)), chunks=2) 
    ...: beta = np.ones((2,1)) 
    ...: 
    ...: ## 
    ...: p = (X.dot(beta)).map_blocks(sigmoid) 
    ...: W = da.diag((p*(1-p))[:,0]) 
    ...: hessian = da.dot(X.T.dot(W),X) 
    ...: hessian.visualize() 
    ...: 
Out[5]: <IPython.core.display.Image object> 

它的工作,直到你重新启动的东西是一个有点奇怪的事实。你的环境可能有些问题?

+0

嗯,你对重复性的评论让我思考 - 我粘贴的代码实际上*不会*为我运行!我编辑了这篇文章,完全重现了我正在使用的代码,现在我怀疑你会有'KeyError'。 – chriswhite

+0

仍然似乎为我工作 – MRocklin

+0

看起来像你在单元块[5]中用一个新的dask-only sigmoid函数覆盖dispatch sigmoid。 – chriswhite