Tensorflow培训/验证损失nan问题

我已经阅读了一些其他文章,了解如何在培训/验证损失方面取得成功时做什么。 我假设我的问题在我的学习率方面还没有足够的衰减,尽管我想知道是否有人可以只看一眼并同意/不同意。

我在这里关注这个真棒博客帖子,但是在tensorflow中实现。 转换模型相当容易,但动力和学习速度有点棘手,我认为这是问题所在。 我遇到了一些问题,我只能在损失上升到南方之前走上这么多的时代。 我使用的模型应该等同于博客教程中的net4 / 5。

... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[ 900]0:14:11 0.000116 0.001566 0.027701
Epoch[ 910]0:14:20 0.000107 0.001565 0.026593
Epoch[ 920]0:14:29 0.000098 0.001564 0.026593
Epoch[ 930]0:14:39 0.000088 0.001567 0.026593
Epoch[ 940]0:14:48 0.000080 0.001567 0.026593
Epoch[ 950]0:14:58 0.000069 0.001578 0.026593
Epoch[ 960]0:15: 7 0.000072 0.001600 0.026593
Epoch[ 970]0:15:17 0.000105 0.001664 0.026593
Epoch[ 980]0:15:26 0.000221 0.001799 0.026593
Epoch[ 990]0:15:35 0.000456 0.002045 0.026593
Epoch[1000]0:15:45 0.000955 0.002473 0.025530
Epoch[1010]0:15:54 0.002148 0.003415 0.025530
Epoch[1020]0:16: 4 0.008455 0.009337 0.025530
Epoch[1030]0:16:13 0.009042 0.010412 0.025530
Epoch[1040]0:16:22 nan nan 0.025530

所以我已经看到了这一点,它似乎只是在这一点上需要降低学习率的情况。 它与教程编号不匹配,但令人担忧。

博客文章的下一步是添加丢失。 我已经在模型中实现了它,我只是通过一个张量布尔来告诉它是否训练。 所以在退出时我可以在150个以下的时间内找到nans,我不确定问题出在哪里。 既然它应该是正规化系统,我并不期待这种情况发生。

... Epoch /Time/Train Loss/Valid Loss/Learn Rate
Epoch[   0]0: 0: 1 0.025211 0.025614 0.045000
Epoch[  10]0: 0:11 0.003496 0.004075 0.045000
Epoch[  20]0: 0:22 0.003202 0.003742 0.045000
Epoch[  30]0: 0:32 0.003169 0.003712 0.045000
Epoch[  40]0: 0:42 0.003084 0.003605 0.045000
Epoch[  50]0: 0:53 0.002976 0.003507 0.045000
Epoch[  60]0: 1: 3 0.002891 0.003437 0.045000
Epoch[  70]0: 1:14 0.002795 0.003381 0.045000
Epoch[  80]0: 1:24 0.002648 0.003317 0.045000
Epoch[  90]0: 1:34 0.002408 0.003181 0.011250
Epoch[ 100]0: 1:45 0.002267 0.003107 0.011250
Epoch[ 110]0: 1:55 0.001947 0.003003 0.011250
Epoch[ 120]0: 2: 6 0.004507 0.005768 0.011250
Epoch[ 130]0: 2:16 nan nan 0.011250

任何关于退出功能可能出现问题的想法? 我已经建立了完全相同的模型afaik,即使没有nan问题,我的损失也不是很好。

我的代码:https://github.com/sdeck51/CNNTutorials/blob/master/7.%20FacialFeatureDetection_Tutorial/FaceDetector.ipynb

编辑:

所以我的卷积层设置不正确。 我已经阅读了这个教程。

InputLayer            (None, 1, 96, 96)       produces    9216 outputs
Conv2DCCLayer         (None, 32, 94, 94)      produces  282752 outputs
MaxPool2DCCLayer      (None, 32, 47, 47)      produces   70688 outputs
Conv2DCCLayer         (None, 64, 46, 46)      produces  135424 outputs
MaxPool2DCCLayer      (None, 64, 23, 23)      produces   33856 outputs
Conv2DCCLayer         (None, 128, 22, 22)     produces   61952 outputs
MaxPool2DCCLayer      (None, 128, 11, 11)     produces   15488 outputs
DenseLayer            (None, 500)             produces     500 outputs
DenseLayer            (None, 500)             produces     500 outputs
DenseLayer            (None, 30)              produces      30 outputs

我刚刚更新了我的内容,所以我认为它现在是一样的。

conv: input size: (?, 96, 96, 1)
pool: input size: (?, 94, 94, 32)
conv: input size: (?, 47, 47, 32)
pool: input size: (?, 46, 46, 64)
conv: input size: (?, 23, 23, 64)
pool: input size: (?, 22, 22, 128)
fc: input size before flattening: (?, 11, 11, 128)
fc: input size: (?, 15488)
fc: input size: (?, 500)
fc: input size: (?, 500)
out: (?, 30)

但仍然没有工作。 在卷积层和第一个完全连接的层上启用了压差后,该模型持续时间低于50个时期,然后错误通过屋顶。 即使学习率很低,问题仍然存在。

Epoch[   0]0: 0: 1 0.029732 0.030537 0.030000
Epoch[  10]0: 0:11 0.004211 0.004986 0.030000
Epoch[  20]0: 0:20 0.003013 0.003530 0.004500
Epoch[  30]0: 0:30 5.250690 5.426279 0.004500
Epoch[  40]0: 0:40 nan nan 0.000675

它看起来像非丢弃方法被打破,做同样的事情> _> ...

编辑:我想我已经找出了这个问题。 我正在使用动量优化算法,随着时间推移增加动量。 我认为从这个小幅增长导致它超调。 目前运行没有辍学,但我获得了更好的结果比以前有一个稳定的势头。 在我运行1000个时代后,我会检查它是否退出

现在退出运行,并没有爆炸,所以我认为我已经解决了这个问题。


问题确实是优化器。 我使用的是Momentum优化器,我将它初始设置为.9,在它的时代周期结束时它应该变为.999。 由于某种原因,这种额外的势头正在造成天空火箭的损失。 留下它为.9解决了这个问题。

链接地址: http://www.djcxy.com/p/32047.html

上一篇: Tensorflow training/validation loss nan questions

下一篇: loss starts high and does not decrease