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?
2条答案
按热度按时间puruo6ea1#
可以参考下:https://github.com/PaddlePaddle/models/blob/develop/PaddleRec/ctr/network_conf.py
里面用了sparse操作。
dnph8jn42#
谢谢,已经参考了里面的实现,但是在 paddle 里没有发现有类似 tf 的 embedding_lookup_sparse 的接口(https://www.tensorflow.org/api_docs/python/tf/nn/embedding_lookup_sparse),对于变长 feature 如何实现 embedding 稀疏查询呢?