Closed fseasy closed 6 years ago
如何在训练中test
请参考文档示例: https://github.com/PaddlePaddle/models/blob/develop/ltr/train.py#L94
trainer.test接口文档
请参考http://www.paddlepaddle.org/docs/develop/documentation/zh/api/v2/run_logic.html#trainer 中 的test()接口
NDCG计算
我看LambdaCost里计算的就是NDCG,并且作为了输出,是否可以直接使用这个?至于如何使用,请参考1中给出的示例。 https://github.com/PaddlePaddle/Paddle/blob/develop/paddle/gserver/layers/CostLayer.cpp#L384
如何自定义评价方法
请参考示例文档将需要的层输出,在Python里定义评价函数,调用、计算、输出即可。
哇,我试了“如何自定义评价方法”,还是不行啊... 我要获取的layer是这样的:
def _create_all_sent_doc_cos_sim(self, sentence_repr_list, doc_repr):
"""
calc every sentence to doc cos-similarity
"""
def _calc_sent_doc_cos_sim(sent_repr, doc_repr):
cos_sim = paddle.layer.cos_sim(
name="single_sent_doc_cos_sim",
a=sent_repr,
b=doc_repr
)
return cos_sim
sim_value_vec = paddle.layer.recurrent_group(
name="calc_sent_doc_sim",
input=[sentence_repr_list, paddle.layer.StaticInput(doc_repr)],
step=_calc_sent_doc_cos_sim
)
我用文档里的方式
print event.gm.getLayerOutputs("calc_sent_doc_sim")
得到的是这样的内容
{'calc_sent_doc_sim': {'id': None, 'value': None, 'prob': None}}
并没有值啊... @qingqing01 救命...
calc_sent_doc_sim
是paddle.layer.recurrent_group
层,不支持获取该层里面的内容,只能获取recurrent_group
他的输出和之外的内容。
这里的recurrent_group
的输出single_sent_doc_cos_sim
。
哇, 我找到方法啦
哈哈,非常感谢,暂时来看还可以用...
利用 event.gm.getLayerOutputs 得到跑完前向后的infer layer
在你上面列子中infer layer
是哪个呢?
哦,是额外的一个layer哈,就是在得到sim_value_vec 之后,做了一下kmax
kmax_indices = paddle.layer.kmax_seq_score(
input=sim_value_vec,
beam_size=top_k,
name="kmax_score_indices"
)
之前想的是直接把全部的sim_value_vec拿到,这样方便自己算NDCG,不过这么拿其实也没有任何的区别
问题已解决,关闭次Issue.
背景
目前在做句子打分(排序)模型,希望在开发集上算一个NDCG分数。
当前paddle在训练过程中做评价的方法
我查看了一些示例代码,感觉基本是这么做的:
其中 extra_layers 定义里是paddle.v2.evaluators 预先定义的值
问题
NDCG的评价不在evaluators中,也就是需要做自定义的评价,该如何做呢? 此外,trainner.test 是否能够给出更加详细的API解释呢