Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
MercuialC opened this issue Oct 13, 2020 · 8 comments
Open

Comments

@MercuialC
Copy link

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

@chencodeX
Copy link
Owner

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

@MercuialC
Copy link
Author

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

@chencodeX
Copy link
Owner

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

@chencodeX
Copy link
Owner

后来怎么样了

@MercuialC
Copy link
Author

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

@CyberAI-zzz
Copy link

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

@chencodeX
Copy link
Owner

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

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

@chencodeX
Copy link
Owner

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants