B_M*_*ner 6 keras dask tensorflow
我第一次使用 dask 并尝试从训练有素的 keras 模型运行 predict()。
如果我不使用 dask,该函数可以正常工作(即 pd.DataFrame() 与 dd.DataFrame () )。使用 Dask,错误如下。这不是一个常见的用例吗(除了给 groupby 打分)
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()
Run Code Online (Sandbox Code Playgroud)
类型错误:无法将 feed_dict 键解释为张量:Tensor Tensor("Placeholder_30:0", shape=(55188, 32), dtype=float32) 不是此图的元素。
我找到了答案。这是 keras 或 tensorflow 的问题:https : //github.com/keras-team/keras/issues/2397
下面的代码可以工作,并且使用 dask 比标准的 Pandas groupby 减少了 50% 的时间。
#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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2503 次 |
| 最近记录: |