首页 文章

从保存的检查点恢复训练模型时,Tensorflow批量丢失峰值?

提问于
浏览
4

我遇到了一个我一直试图调试的奇怪问题,没有太多运气 . 我的模型开始正常训练,批量损失持续下降(从最初的约6000起到20个时期之后的约120) . 然而,当我暂停训练并稍后通过从检查点恢复模型来恢复训练时,批次丢失似乎意外地从之前的批次丢失(暂停之前)中突然出现,并且从该较高的损失点恢复减少 . 我担心的是,当我恢复模型进行评估时,我可能没有使用我认为的训练模型 .

与Tensorflow教程相比,我已经多次梳理了我的代码 . 我尝试使用教程建议的方法确保我正在保存和恢复 . 以下是代码快照:https://github.com/KaranKash/DigitSpeak/tree/b7dad3128c88061ee374ae127579ec25cc7f5286 - train.py文件包含保存和恢复步骤,图形设置和培训过程;而model.py创建网络层并计算损失 .

以下是我的打印报表中的一个示例 - 从第7纪元检查点恢复培训时,通知批量损失急剧上升:

Epoch 6. Batch 31/38. Loss 171.28
Epoch 6. Batch 32/38. Loss 167.02
Epoch 6. Batch 33/38. Loss 173.29
Epoch 6. Batch 34/38. Loss 159.76
Epoch 6. Batch 35/38. Loss 164.17
Epoch 6. Batch 36/38. Loss 161.57
Epoch 6. Batch 37/38. Loss 165.40
Saving to /Users/user/DigitSpeak/cnn/model/model.ckpt
Epoch 7. Batch 0/38. Loss 169.99
Epoch 7. Batch 1/38. Loss 178.42
KeyboardInterrupt
dhcp-18-189-118-233:cnn user$ python train.py
Starting loss calculation...
Found in-progress model. Will resume from there.
Epoch 7. Batch 0/38. Loss 325.97
Epoch 7. Batch 1/38. Loss 312.10
Epoch 7. Batch 2/38. Loss 295.61
Epoch 7. Batch 3/38. Loss 306.96
Epoch 7. Batch 4/38. Loss 290.58
Epoch 7. Batch 5/38. Loss 275.72
Epoch 7. Batch 6/38. Loss 251.12

我打印了inspect_checkpoint.py脚本的结果 . 我还尝试了其他损失函数(Adam和GradientDescentOptimizer),并注意到恢复训练后加标损失的相同行为 .

dhcp-18-189-118-233:cnn user$ python inspect_checkpoint.py
Optimizer/Variable (DT_INT32) []
conv1-layer/bias (DT_FLOAT) [64]
conv1-layer/bias/Momentum (DT_FLOAT) [64]
conv1-layer/weights (DT_FLOAT) [5,23,1,64]
conv1-layer/weights/Momentum (DT_FLOAT) [5,23,1,64]
conv2-layer/bias (DT_FLOAT) [512]
conv2-layer/bias/Momentum (DT_FLOAT) [512]
conv2-layer/weights (DT_FLOAT) [5,1,64,512]
conv2-layer/weights/Momentum (DT_FLOAT) [5,1,64,512]

1 回答

  • 1

    我遇到了这个问题,发现事实是我在恢复图形时初始化图形变量 - 抛弃所有学习的参数,用最初为原始图形定义中的每个相应张量指定的初始值替换 .

    例如,如果您使用 tf.global_variable_initializer() 初始化变量作为模型程序的一部分,无论您的控制逻辑指示是否将恢复已保存的图形,请确保图形恢复流程省略: sess.run(tf.global_variable_initializer())

    这对我来说是一个简单而又代价高昂的错误,所以我希望别人能够保存一些白发(或一般的头发) .

相关问题