首页 文章

Dask DataFrame - Keras模型的预测

提问于
浏览
3

我第一次使用dask并尝试从训练有素的keras模型运行predict() .

如果我不使用dask,该函数可以正常工作(即pd.DataFrame()与dd.DataFrame()) . 使用Dask时,错误如下 . 这不是一个常见的用例(除了可能得分)

def calc_HR_ind_dsk(grp):
    model=keras.models.load_model('/home/embedding_model.h5')
    topk=10

    x=[grp['user'].values,grp['item'].values]
    pred_act=list(zip(model.predict(x)[:,0],grp['respond'].values))
    top=sorted(pred_act, key=lambda x: -x[0])[0:topk]
    hit=sum([x[1] for x in top])
    return(hit)



import dask.dataframe as dd

#step 1 - read in data as a dask df. We could reference more than 1 files using '*' wildcard
df = dd.read_csv('/home/test_coded_final.csv',dtype='int64')
results=df.groupby('user').apply(calc_HR_ind_dsk).compute()

TypeError:无法将feed_dict键解释为Tensor:Tensor Tensor(“Placeholder_30:0”,shape =(55188,32),dtype = float32)不是此图的元素 .

2 回答

  • 3

    我找到了答案 . keras或tensorflow是一个问题:https://github.com/keras-team/keras/issues/2397

    下面的代码工作和使用dask削减了50%的时间与标准pandas groupby .

    #dask
    model=keras.models.load_model('/home/embedding_model.h5')
    
    #this part
    import tensorflow as tf
    global graph
    graph = tf.get_default_graph()
    
    
    def calc_HR_ind_dsk(grp):
        topk=10
        x=[grp['user'].values,grp['item'].values]
    
        with graph.as_default(): #and this part from https://github.com/keras-team/keras/issues/2397
            pred_act=list(zip(model.predict(x)[:,0],grp['respond'].values))
        top=sorted(pred_act, key=lambda x: -x[0])[0:topk]
        hit=sum([x[1] for x in top])
    
        return(hit)
    
    
    
    import dask.dataframe as dd
    
    
    df = dd.read_csv('/home/test_coded_final.csv',dtype='int64')
    results=df.groupby('user').apply(calc_HR_ind_dsk).compute()
    
  • 1

    看看:http://dask.pydata.org/en/latest/dataframe-api.html#dask.dataframe.groupby.DataFrameGroupBy.apply与pandas不同,在dask中有很多函数可以让你定义自己的自定义op,需要meta参数 . 如果没有这个dask,我们将测试你的自定义函数并将奇怪的东西传递给keras,这在调用compute时可能不会发生 .

相关问题