Paddle fluid 接口如何高效实现 wide & deep 中的 wide model

gwbalxhn  于 2021-11-30  发布在  Java
关注(0)|答案(2)|浏览(375)

fluid 接口如何高效实现 wide & deep 中的 wide model?

根据现有的 fluid 接口实现如下的 wide model:

def wide_layer(input):
    return fluid.layers.fc(input=input, size=1, act="relu")

def one_hot_layer(input):
    return fluid.layers.one_hot(input=input, depth=sparse_feature_dim)

context_feature = [fluid.layers.data(name="context" + str(i), shape=[1], lod_level=1, dtype="int64")  for i in range(0,  NUM_CONTEXT_FEATURE)]

sparse_one_hot = list(map(one_hot_layer, context_feature))
wide_merged_features = fluid.layers.concat(sparse_one_hot, axis=1)
wide = wide_layer(wide_merged_features)

但是训练效率很低, onehot 后的特征维度很大,concat 操作需要花费 0.3 s 的时间

op_name:[24][one_hot], op_mean_time:[0.007394s]   
op_name:[25][one_hot], op_mean_time:[0.007340s]      
op_name:[26][concat], op_mean_time:[0.300164s]        
op_name:[27][mul], op_mean_time:[0.127946s]

因为 context feature onehot 之后是维度很大的 sparse vector, 请问 fluid API 是否支持 Sparse Vector concat 操作及 fc 的输入?或者如何基于 fluid 接口实现 wide model?

dnph8jn4

dnph8jn42#

谢谢,已经参考了里面的实现,但是在 paddle 里没有发现有类似 tf 的 embedding_lookup_sparse 的接口(https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup_sparse),对于变长 feature 如何实现 embedding 稀疏查询呢?

相关问题