PaddleClas icon indicating copy to clipboard operation
PaddleClas copied to clipboard

使用PaddleClas中的TripletLossV2报错

Open lezhu1234 opened this issue 3 years ago • 3 comments

1.PaddleClas版本: PaddleClas v2.3.1 2.涉及的其他产品使用的版本号:无 3.训练环境信息: BML Codelab a: 具体操作系统 Linux version 4.15.0-140-generic (buildd@lgw01-amd64-054) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) b. Python版本号: Python 3.7.4 c. CUDA/cuDNN版本,Cuda compilation tools, release 10.1, V10.1.243 4.完整的代码(相比于repo中代码,有改动的地方)、详细的错误信息及相关log 使用TripletLossV2报错,报错信息如下: image TripletLossV2相关代码: https://github.com/PaddlePaddle/PaddleClas/blob/f677f61ea3b34281968d1059f4f8f13c1d787e67/ppcls/loss/triplet.py#L59-L68 yaml配置文件中Loss相关配置如下: image 将代码中用paddle.masked_select函数的处理方式改成使用paddle.where处理之后报错消失,运行良好。 请问这样改可以吗?是否是我对TripletLossV2的使用方式不对?

lezhu1234 avatar Jun 28 '22 02:06 lezhu1234

tripletloss需要搭配对应的sampler使用,可以试试pk_sampler

weisy11 avatar Jun 29 '22 02:06 weisy11

感谢您的解答,将sampler改成pk_sampler之后,训练确实可以正常运行了。 看了一下代码,根据我的理解,pk_sampler将同一个batch中的样本等分成不同的组,组内的样本label相同,因此保证了is_pos和is_neg矩阵中正负样本的数量均为batch size的整数倍,是这样吗?

lezhu1234 avatar Jun 29 '22 05:06 lezhu1234

感谢您的解答,将sampler改成pk_sampler之后,训练确实可以正常运行了。 看了一下代码,根据我的理解,pk_sampler将同一个batch中的样本等分成不同的组,组内的样本label相同,因此保证了is_pos和is_neg矩阵中正负样本的数量均为batch size的整数倍,是这样吗?

为什么我选pk_sampler,显示未定义

alexHxun avatar Aug 11 '22 05:08 alexHxun