lawlite19 / Blog-Back-Up

博客相关文件存储
http://lawlite.me/
133 stars 201 forks source link

triplet_loss问题,求教,急 #6

Open xiaomingdaren123 opened 5 years ago

xiaomingdaren123 commented 5 years ago

首先非常感谢您提供的代码,有两个问题希望您能提供帮助 1、在我用batch_hard_triplet_loss方法训练手写数字网络时,我发现如果我的网络不加BN层,训练一会之后loss就会固定在margin的大小不在下降,并且acc(acc使用KNN求得)变成了0,我查看了一下_pairwise_distances,发现距离矩阵也差不多都变成了?这是什么原因造成的呢,必须要加bn层吗? 2、我将batch_hard_triplet_loss用在其他分类任务当中,网络采用VGG网络以及自己设计的简单网络,我发现就算我加了BN层,两个网络也会出现上述情况,我只用了三元组损失并没有使用其他损失,不知道这是什么原因?跟网络的大小或者分类任务的难易有关吗? 谢谢,希望您能回答。

lawlite19 commented 5 years ago
  1. loss固定在margin大小说明embeddings聚在了一点,没有区分开,尝试降低learning rate 试试;
  2. 另外如果类别很多(这里手写数字之后10个类别应该无碍),输入数据需要进行采样,查看这里
xiaomingdaren123 commented 5 years ago

default default dinstance 首先,感谢您的回答 第一张图是我的网络结构,网络结构并不复杂,是一个7分类的问题,学习率已经设置为0.0001,采用Adam优化,但是还是会出现图二的训练情况,我将网络的最后一层求出的distance距离输出看了一下,发现acc等于0的时候我的dis矩阵所有元素基本都开始接近于0了,不知道是什么原因造成的?

sugar2019 commented 4 years ago

@xiaomingdaren123 请问您的问题解决了吗?我的batch_hard也遇到了相同的问题,修改网络权重初始值和调节学习率都没有效果。结果自己重新训练的时候就出现了只有第一个step的loss有值,后面就全部都是inf了。