0

从之前继续:为什么我的模型可以使用 `tf.GradientTape()` 但在使用 `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

4

2 回答 2

0

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

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

在此处输入图像描述

于 2020-03-13T01:44:25.840 回答
0

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

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

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

于 2020-03-11T08:30:44.460 回答