【问题标题】:Why did my style-transfer model suddenly stop learning after 3700/20000 batches?为什么我的风格迁移模型在 3700/20000 批后突然停止学习?
【发布时间】:2020-06-23 03:09:49
【问题描述】:

上接前文:Why does my model work with `tf.GradientTape()` but fail when using `keras.models.Model.fit()`

我正在复制感知风格转移模型,如下图所示:

我终于在 COCO2014 数据集中的 1000 张图像上按预期学习了我的模型。但后来我尝试运行整个数据集的 2 个 epoch,每个 epoch 有 20695 个批次(根据研究论文)。它开始学习非常快,但是在大约 3700 步之后它就神秘地失败了。 (每 100 个批次保存 1 个生成的图像,最近的在左侧)

我使用保存的检查点做出的预测显示了类似的结果:

从故障点附近的损失来看,我看到了:

# output_1 is content_loss
# output_2-6 are gram matrix style_loss values
 [batch:3400/20695] - loss: 953168.7218 - output_1_loss: 123929.1953 - output_2_loss: 55090.2109 - output_3_loss: 168500.2344 - output_4_loss: 139039.1250 - output_5_loss: 355890.0312 - output_6_loss: 110718.5781

 [batch:3500/20695] - loss: 935344.0219 - output_1_loss: 124042.5938 - output_2_loss: 53807.3516 - output_3_loss: 164373.4844 - output_4_loss: 135753.5938 - output_5_loss: 348085.6250 - output_6_loss: 109280.0469

 [batch:3600/20695] - loss: 918017.2146 - output_1_loss: 124055.9922 - output_2_loss: 52535.9062 - output_3_loss: 160401.0469 - output_4_loss: 132601.0156 - output_5_loss: 340561.5938 - output_6_loss: 107860.3047

 [batch:3700/20695] - loss: 901454.0553 - output_1_loss: 124096.1328 - output_2_loss: 51326.8672 - output_3_loss: 156607.0312 - output_4_loss: 129584.2578 - output_5_loss: 333345.5312 - output_6_loss: 106493.0781

 [batch:3750/20695] - loss: 893397.4667 - output_1_loss: 124108.4531 - output_2_loss: 50735.1992 - output_3_loss: 154768.8281 - output_4_loss: 128128.1953 - output_5_loss: 329850.2188 - output_6_loss: 105805.6250

# total loss increases after batch=3750. WHY???

 [batch:3800/20695] - loss: 1044768.7239 - output_1_loss: 123897.2188 - output_2_loss: 101063.2812 - output_3_loss: 200778.2812 - output_4_loss: 141584.6875 - output_5_loss: 370377.5000 - output_6_loss: 107066.7812

 [batch:3900/20695] - loss: 1479362.4735 - output_1_loss: 123050.9766 - output_2_loss: 200276.5156 - output_3_loss: 356414.2188 - output_4_loss: 185420.0781 - output_5_loss: 502506.7500 - output_6_loss: 111692.8750 

我想不出如何调试这个问题。一旦它“工作”,模型是否应该继续工作?这似乎是某种缓冲区溢出,但我不知道如何找到它。有什么想法吗?

完整的 colab notebook/repo 可以在这里找到:https://colab.research.google.com/github/mixuala/fast_neural_style_pytorch/blob/master/notebook/%5BSO%5D_Coco14_FastStyleTransfer.ipynb

【问题讨论】:

    标签: keras deep-learning google-colaboratory tensorflow2.0 autoencoder


    【解决方案1】:

    您可以在这里尝试两种经典方法:

    1. 学习率衰减。每 100 个批次左右衰减,而不是每个 epoch。

    2. 渐变剪裁。剪辑指定值之间的渐变。对于我之前使用的生成网络,-5 到 5 之间的梯度表现良好。如果您认为网络学习速度很慢,您可以增加范围。

    【讨论】:

    • 它实际上学习了,然后它突然失败了。也许这是梯度爆炸的迹象——我仍在努力学习直觉。但现在,我排除了前 4K 批次,它似乎继续学习就好了。也许这是域超出范围的输入张量或 alpha 通道的问题?我在预处理代码中使用tf.image.decode_jpeg()
    • [已解决]:这是一个全黑输入图像,导致域缩放代码中除以零错误。
    【解决方案2】:

    我发现一个饱和的白色图像,RGB=255,导致模型变得不稳定。出现在batch=3696,batch_size=4。当我跳过那批时,一切正常。

    我知道有一些监控代码在尝试规范化图像域时出现除以零错误。但我不确定该错误是否与模型不稳定有关。模型生成的图像全黑

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-21
      • 2022-11-10
      • 1970-01-01
      • 2022-12-03
      • 1970-01-01
      • 2021-01-17
      相关资源
      最近更新 更多