chencodeX / triplet-loss-pytorch

A generic triplet data loader for image classification problems,and a triplet loss net demo.
124 stars 27 forks source link

关于只是用三元组而不加权交叉熵损失进行训练 #3

Open MercuialC opened 3 years ago

MercuialC commented 3 years ago

您好,我运行了您的代码 但是我只使用三元组损失进行训练,损失一直是在一个很小的值,请问您也是这样吗

chencodeX commented 3 years ago

这种情况可能是您的数据集表现非常好(小概率),也可能是构造的三元组有问题,检查您的数据标签和内容。确保一一对应并分布合理。另外,损失是否会下降?还是只在小范围内做抖动?为了排除loss的问题,您可以尝试替换成交叉熵损失,使用同样的超参数进行训练,看是否会出现同样的情况。

MercuialC commented 3 years ago

感谢您的回复,我将您的工作用于细粒度CUB-200-2011数据集上,仅使用三元组损失。一开始损失就非常低,后续在小范围抖动,准确率无法提升。若仅使用交叉熵则能正常训练并且获得还不错的准确率。我检查了三元组的构造似乎没什么问题。
model.fc = nn.Linear(2048, 256) model.classifier = nn.Linear(256, num_classes) 想请教您关于使用resnet50时fc层输出256的embedding用于三元组损失,这个对于不同数据集需要修改吗,或者说若修改应如何修改。

chencodeX commented 3 years ago

我尝试过256 和1024 ,没有明显影响

chencodeX commented 3 years ago

后来怎么样了

MercuialC commented 3 years ago

输出embedding大小影响不明显。但是在CUB数据集上三元组损失似乎没有提升,相同参数下仅使用交叉熵损失达到了86以上的准确率,仅使用三元组损失训练不起来损失一直比较低。不知道您有没有遇到过这种情况

CyberAI-XDU commented 1 year ago

您好,为什么我在用三元组损失训练的时候,损失值在两个epoch之后就变为0了呢?

chencodeX commented 1 year ago

输出embedding大小影响不明显。但是在CUB数据集上三元组损失似乎没有提升,相同参数下仅使用交叉熵损失达到了86以上的准确率,仅使用三元组损失训练不起来损失一直比较低。不知道您有没有遇到过这种情况

似乎是在别的数据集上遇到过类似问题。

chencodeX commented 1 year ago

您好,为什么我在用三元组损失训练的时候,损失值在两个epoch之后就变为0了呢?

这个需要检查一下代码或者数据文件,是否存在损坏。