首页 > 解决方案 > 从头开始学习过程以获得最佳效果?

问题描述

我对深度学习相当陌生,刚刚开始修补一些简单的小模型,在这种情况下是一个小的 unet,基本上是从:https://github.com/zhixuhao/unet/blob/master/trainUnet 复制粘贴的。 ipynb

我发现在我的大部分运行中,我都会达到一定的损失水平,从那时起它不想进一步收敛。然而,每隔一段时间我从头开始重新开始学习过程,它突然收敛到比上面提到的高原低 1000 倍左右的损失......最终的模型相当出色 - 没有抱怨,但每个人都必须重新开始学了那么多遍?

我知道这可能是由于偶然分配了模型的初始权重。我提高了学习率并减小了批量大小以尝试逃避局部最小值,但这似乎没有多大帮助。

一遍又一遍地重新启动模型是常见的做法吗?

标签: tensorflowkerasdeep-learningimage-segmentationunity3d-unet

解决方案


无论模型训练多长时间,在不同的运行中看到少量差异是很正常的,尽管不是你看到的幅度。

损失的减少是否真的反映在测试集的准确率上?损失可能是一个有用的衡量标准,但至少根据我的经验,损失和准确性(或您感兴趣的任何指标)通常只是松散相关。我观察到异常高的训练准确率/低训练损失通常会导致模型泛化能力差。

损失景观并不总是朝着全球最小值平滑,你的可能有两个不同的山谷。H Li 等人的这篇论文是一篇非常有趣的文章: Visualizing the Loss Landscape of Neural Nets

损失景观

总而言之,特征重用和正则化可以极大地帮助创建朝向最小值的平滑梯度。

您可能还想研究学习率策略,以尝试让您的模型进入损失情况更平滑的区域。我会推荐 Leslie Smith 的 One-Cycle Policy。总体思路是提高学习率并降低动量以使您的模型进入全局最小值区域(并沿途跳过局部最小值),然后降低学习率以使模型落入最低限度。


推荐阅读