精华内容
下载资源
问答
  • 2021-08-07 18:31:00

    更多相关内容
  • tensorflow训练过程中loss越来越大

    千次阅读 2020-08-13 15:58:09
    在学习Tensorflow的时候,发现训练时loss竟然越来越大,多次检查之后发现代码并无问题。最终发现原因是学习率太大,调小之后loss减小,特此记录。

    在学习Tensorflow的时候,发现训练时loss竟然越来越大,多次检查之后发现代码并无问题。最终发现原因是学习率太大,调小之后loss减小,特此记录。

    展开全文
  • ![图片说明](https://img-ask.csdn.net/upload/201809/30/1538270368_592051.jpg)
  • 简单记录刚刚在使用 librec 时发现的一个小点,发现越训练,loss值越??? 训练的数据集是 filmtrust ,训练的效果如下图所示,loss值一直在上升,肯定是有问题的! 说明: 上图的 loss 是每一次迭代的 loss ...

    简单记录下困扰了我半个多月的问题:在跑 Librec 的 SBPR 算法代码的时候,发现 Loss 一直随着迭代次数在逐渐增加,这不是不正常吗???

    一、我的疑问

    最早的时候,只是拿 Librec 去跑一个数据集的实验结果,但是一不下心瞄了一眼输出的迭代结果,竟然发现 loss 一直在逐渐增大,跑了其他几个方法,都没有发现这样的情况,按理来说,越训练 loss 应该越小才对,所以到底哪里有问题???
    在这里插入图片描述
    说明

    • 上图的 loss 是每一次迭代的 loss 总值
    • delta_loss 是上一次迭代的 loss 值 - 本次迭代 loss 值

    二、我的尝试解决办法

    然后我开始尝试不断的解决问题,劝说自己:

    • 首先排查是不是不小心把对方的代码改了,这里没有。
    • 然后想想是不是迭代次数不够,慢慢的后面会逐渐收敛,所以把迭代次数设置的超级大,但 loss 还是一直在持续上升,并且不是上升一点点的那种。
    • 查询很多资料后,发现 loss 上升绝对是不正常的,所以我开始看原论文,发现原论文是用梯度上升求最大值,看了眼公式,既然是求最大值,那 loss 上升应该是对的,我这样想。

    我以为这是我的最终答案,遂不管它。但是过了几天想想还是不对劲,loss 代表的是误差,误差一直在增大,怎么样都说不过去啊,只有 loss 缓慢更新才代表收敛啊,这样才叫训练好了啊,然后我就开始查梯度上升的资料,发现这方面的资料很少。咨询同门师弟也说,loss 一直上升是不正常的!!!

    • 后来查到如果 loss 上升的话,可以调整下学习率,每次迭代的时候都相应的更新学习率,loss 就会收敛。而在 librec 中确实有一个 bolddriver 的设置问题,设置为 true 的话,可以控制每次迭代的时候相应的更新学习率的大小,比如 loss 在增加,学习率在下一轮变小,loss 在减小,学习率在下一轮变大。这样设置后, 虽然前面的迭代次数 loss 都在上升,但是后面逐渐收敛。

    我以为上面就是我的最终答案,只要改一个默认的参数设置 bolddriver就可以解决 。遂又开始不管它。(但SBPR的梯度上升的疑问一直留在我的心中,这是个啥?)

    三、插句题外话,BPR公式错了?

    后面因为种种原因,我重新看了遍 BPR 的公式以及重新推导了一遍 BPR 的公式,发现 BPR 也是要查找最大值,但是为啥最后用的是梯度下降,梯度下降不是用来找最小值的吗???为啥 SBPR 用的是梯度上升???然后我去翻了很多 BPR 的其他变体,大家普遍用的是梯度下降。

    我开始纳闷了。真的纳闷了!!!看来我真的没有看懂过 BPR 这个算法,枉我之前还更新过【论文阅读+实现】BPR: Bayesian Personalized Ranking from Implicit Feedback,简直打脸,我连它为啥用梯度下降找最大值都不知道。

    找了很多资料,开始手把手的重新推导公式,下面是 BPR 论文中的优化公式(目标函数),说是要最大化这个公式,这个公式到这里的推导都是正确的。
    在这里插入图片描述
    但后面就开始说用梯度下降求解了,这?????(这里开始不断的怀疑自己几百次)
    在这里插入图片描述
    我这里就不卖关子了,直接说出我最后的结论,结论就是要找最大值没有错,整个公式加个负号不就是找最小值了吗!!!不就可以使用梯度下降了吗!!!(这里原论文感觉也没有说明白,然后就直接推导公式了,其实这个推导是有错误的)
    在这里插入图片描述
    证据就是这一步这样推下来是没有那个负号的!(我推了很多次,不要怀疑…不过,也可以怀疑…)
    所以这个目标公式其实应该改成下面这样,再来进行梯度下降求最小值(整体取负,想想ln函数在(0,1)区间得到的值都是负数就明白了)。
    在这里插入图片描述
    我其实一开始不太肯定自己的这种猜想,但是为了劝服自己,我又去看了其他论文,比如下面这篇发表在CIKM2018上的MBPR上的目标函数。我才敢觉得我这样的猜想有些正确…
    在这里插入图片描述
    那么自然而然这个公式最后求导的结果为
    在这里插入图片描述
    参数更新公式为
    在这里插入图片描述
    其实到这里我还是不太敢详细论文中公式推错了,而且很多人都推错了…(或许是我错了…)但是我仔仔细细的研究了下 librec 中的 BPR代码,发现我这样的公式和那里的实现是吻合的。

    四、言归正传,SBPR 用梯度上升有问题吗?

    为啥中间插个 BPR 呢?其实是因为在不断的解决问题中,一直不断的产生新的疑问,新的自我怀疑,上面这个怀疑公式推导错误我也是想了很久,验证了很久。(验证方法无非是看其他引文的公式推导,发现我没有错),看其他开源代码的实现方法(有的和我一致,有的不一致…)

    但上面就是我现阶段对于 BPR 的结论了,可能过个几个月,我又会觉得我自己错了。学术交流嘛,反正我就是想把这个思考的过程记录在这里。

    言归正传,上面讲到 BPR 的目标函数已经变为了这个,所以用梯度下降求最小值,没有任何问题。在这里插入图片描述
    而SBPR的目标函数如下,这个公式没有问题,求最大值没有问题,用梯度上升求最大值更没有问题了。至此不纠结为啥SBPR用梯度上升,而其他方法都用梯度下降了,确实这样说一点问题都没有!在这里插入图片描述

    五、我又开始尝试解决这个问题了

    既然如此,因为使用梯度上升,所以 loss 一直上升,而且最后 loss 会收敛好像确实没有毛病(我也不知道是不是这样)。我又以为这是我最终的答案

    但出人意料的点来了。在 Librec 中是使用梯度下降的方法来优化 SBPR 算法的。所以 loss 会一直上升是真的有问题!!!

    再来回顾下,SBPR的 loss 公式:
    在这里插入图片描述
    下面是计算 loss 的代码,没有错误。
    在这里插入图片描述
    在这里插入图片描述
    我们知道,对于一个用户来说,如果没有 social item 的话,那该用户的参数更新就会降为BPR算法了在这里插入图片描述
    由此,此时的 loss 公式为
    在这里插入图片描述
    下面是 librec 这部分的代码
    在这里插入图片描述
    终于找到错误了!!!就是上面画×的地方,这里的代码应该是

    double posNegDiffValue = posPredictRating - negPredictRating;
    double lossValue = - Math.log(Maths.logistic(posNegDiffValue));
    loss += lossValue;
    

    要哭了…原来是 librec 库里的代码写错了,完全可能是复现作者的笔误,直接将posNegDiffValue 作为 loss 相加…下面的结果是修改完这段代码之后的运行结果,loss 在逐渐降低并且收敛。(没有设置 bolddriver)
    在这里插入图片描述
    至此,我的问题终于解决了。值得一提的是,因为代码部分这里的 loss 写错了,参数更新以及其他的地方都没有写错,所以在同样的迭代次数下,实验结果是一样的。所以除了没有显示出正确的 loss 值外,其他都对!

    六、小结

    看完上面我的种种陷入自我怀疑又不断求证的"精分现场"是不是脑子里会有点???
    在这里插入图片描述
    我也觉得很无语,小小的问题被我解决来解决去,竟然发现了自己的这么多漏洞,自己有这么多理解错的地方,比如 梯度上升求最小值???loss 不收敛结果正确吗???BPR的公式推错了???梯度下降求最大值???简直是越求证,越无知!!!不过还好没有放弃妥协…

    以上是我的"精分现场",如有同样疑问,欢迎评论交流。如有错误,欢迎指正。

    展开全文
  • <p style="text-align:center"><img alt="" height="720" src="https://img-ask.csdnimg.cn/upload/1617879332236.png" width="836" /></p>  </p>
  • self.loss2 = tf.losses.mean_squared_error(reward,pred) self.lr2 = tf.train.exponential_decay(self.lr2_start, self.global_step2, self.lr2_decay_step,self.lr2_decay_rate, staircase=False, name=...
  • loss = loss_fn(X, U, p, q) optim.zero_grad() loss.backward() optim.step() print('*'*10) print('epoch {}'.format(epoch+1)) #误差 print('loss is {:.4f}'.format(loss)) ``` ``` X和U为...
  • loss和accuracy之间并不是一定反相关 有时候我们会在plot的图上发现损失增大了,但精度却也在提升,这是为什么呢? 我们经常计算的损失其实是逐点(pointwise)损失值的平均值,但影响精度的是损失值的分布,而不是...

    loss和accuracy之间并不是一定反相关
    有时候我们会在plot的图上发现损失增大了,但精度却也在提升,这是为什么呢?
    我们经常计算的损失其实是逐点(pointwise)损失值的平均值,但影响精度的是损失值的分布,而不是平均值,因为精度是模型预测的类别概率的二进制阈值。
    即使从平均损失中无法看出,但模型也仍然可能在改进。

    Ref

    损失和精度的联系(损失增大为什么精度也提升?)

    展开全文
  • 在从训练资料中得到Loss后,操作路径如下 Loss is Large 原因 (1)model bias 可能是model太简单/弹性不足,使得Loss没有足够小 解决办法: (1)增加features(增加训练资料范围) (2)Deep Learning(增加层数...
  • train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; train loss 趋于不变,test loss不断下降,说明数据集100%有问题; train loss 趋于不变,...
  • 在服务器上训练用keras写的Lenet5的cnn分类模型过程中,发现训练一开始训练的loss值、测试的loss值都在不断增大。如下图:(值到吐血) 于是乎,开始心酸找错历程(暴哭) 解决过程 1.通常先查看数据集。...
  • pytorch训练过程中loss出现很的值

    万次阅读 2019-04-08 18:44:17
    在训练过程中,loss的值非常,可能是: (1)没有除以归一化的因子(GAN中需要除以256*256*3),或者没有取平均值 (2)learning rate太,导致更新之后的权值参数特别,从而下一次计算prediction的时候数值...
  • 这个情况在实际项目中其实挺常见的,说白了loss也好, accuracy也好,都是很片面且脆弱的评估指标。与模型结构与数据分布都有很关系。 具体如何选择模型应该与应用场景强相关。考虑下面这个例子:对于一个有4条数据...
  • 主要介绍了记录模型训练时loss值的变化情况,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • train loss和test loss的变化趋势分析

    千次阅读 2019-04-29 12:05:41
    1.train loss 不断下降,test loss不断下降,说明网络仍在学习;(最好的) 2.train loss 不断下降,test loss趋于不变,说明网络过拟合;(max pool或者正则化) 3.train loss 趋于不变,test loss不断下降,说明...
  • (重点是-In的函数曲线图,概率越loss越小,反之概率越小,loss) 6、CTC Loss函数计算 暴力计算存在的问题:由于直接暴力计算 (│)(即所有正确路径)的复杂度非常高,作者借鉴HMM的Forward-Backward算法思路,...
  • Keras val_loss 不减反增

    2021-03-24 13:52:06
    换个优化器、调整学习率
  • 训练损失不下降,拟合能力不足,欠拟合 ...原因:不合理的权重初始化会导致收敛极慢,合理的权重初始化能改有极改善 解决:选择适合自己模型的权重初始化,建议无脑xaiver normal 正则化: 原因:L1、L2、Dro...
  • 这是因为判别器太强了,无法给G有效的指导,所以需要适当降低D的网络能力: 1 减小D的层数,但是减的太过了也会出现最后无法指导G的情况 2 减小D的学习率 ...
  • WGAN-GP Gradient Penalty Loss爆炸

    千次阅读 2020-08-30 10:19:07
    但当使用多块GPU时,D Loss会爆炸!爆炸原因是其中的Gradient Penalty分量爆炸! 问题原因: 参考这篇震惊的文章:震惊!!!PyTorch实现的WGAN-GP竟会爆炸 发现是pytorch版本的问题。 解决方案: 把...
  • 之前在wikitext-103上预训练Bert-base的时候,发现loss曲线会平一段然后再下降,大概是像下图这样:横轴是step,纵轴是loss 当时的warm up是前16K step。一直以为第二次下降是因为warm up结束后,learning rate降...
  • validate loss从第二个epoch开始特别 Epoch: [1 | 90] LR: 0.100000 Processing |################################| (3/3) Data: 0.294s | Batch: 1.952s | Total: 0:00:05 | ETA: 0:00:03 | Loss: 0.5681 | ...
  • 每次迭代,loss的波动很,有如下几方面: (1)学习率选取较; (2)在loss不再下降的时候降低学习率; (3)每个epoch训练之前,对数据进行重新打乱,如果你的 batch 的内容和顺序都是固定的,可能造成模型 ...
  • YOLO训练自己的数据集的一些心得

    千次阅读 2020-12-31 09:10:46
    (1)对于训练发散,其实很容易发现的,就是在训练的时候观察迭代次数后边的两个loss值,如果这两个值不断变到几百就说明训练发散啦。可以通过降低learning rate 和 提高batch数量解决这个问题;(2)对于训练不...
  • train loss 不断下降,test loss不断下降,说明网络仍在学习; train loss 不断下降,test loss趋于不变,说明网络过拟合; train loss 趋于不变,test loss不断下降,说明数据集100%有问题; train loss 趋于不变,...
  • 通过深度学习lstm 对多个学习集样本训练时,总是最后一个样本的loss 样本是9个时,如图1所示,第9个的loss从开始就比别的样本loss大,但是样本的数据流特征差不多。据 把学习集样本减少掉最后一个,结果第8...
  • 使用fcn做图像分割,train_loss不断下降,但是test_loss不断上升,准确率和iou开始20几轮后,发生震荡,然后趋于稳定。 请问,这是出现过拟合现象了吗?能够从哪些方面入手进行调整呢
  • LSTM训练时出现梯度爆炸 训练过程中出现loss突然变几十倍的情况,再慢慢减小,再突然变。即梯度爆炸。 更改 activation=‘sigmoid’ 激活函数 RNN梯度消失梯度爆炸 ...
  • GIOU loss

    千次阅读 2022-02-23 00:02:31
    IOU loss = 1 - IOU,loss 越小,效果越好,这是 IOU loss 和 IOU 的区别 GIoU 目标检测中的IOU&升级版GIOU - 知乎 IoU的局限性 预测框和真实框之间没有重合时,IoU 值为 0, 导致优化损失函数时梯度也为...
  • 损失函数loss大总结

    万次阅读 多人点赞 2018-06-23 23:29:44
    分类任务loss: 二分类交叉熵损失sigmoid_cross_entropy: TensorFlow 接口: tf.losses.sigmoid_cross_entropy( multi_class_labels, logits, weights=1.0, label_smoothing=0, scope=None, loss_c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 19,685
精华内容 7,874
关键字:

loss越来越大