Keras 为什么我的风格转换模型在3700/20000批次后突然停止学习?

Keras 为什么我的风格转换模型在3700/20000批次后突然停止学习?,keras,deep-learning,google-colaboratory,tensorflow2.0,autoencoder,Keras,Deep Learning,Google Colaboratory,Tensorflow2.0,Autoencoder,从以前继续: 我正在复制感知风格转换模型,如下图所示: 我终于在COCO2014数据集中的1000张图像上进行了预期的模型学习。但后来我尝试运行整个数据集的两个历元,每个历元有20695个批次(根据研究论文)。它开始学习的速度非常快,但在大约3700个步骤之后,它就神秘地失败了。(每100批保存一张生成的图像,最新的在左侧) 我对保存的检查点所做的预测显示了类似的结果: 当损失接近失败点时,我看到: # output_1 is content_loss # output_2-6 are g

从以前继续:

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

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

我对保存的检查点所做的预测显示了类似的结果:

当损失接近失败点时,我看到:

# 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笔记本/repo可在此处找到:

您可以在此处尝试两种经典方法:

  • 学习率下降。大约每100批而不是每一个历元发生一次衰变

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


  • 我发现一个饱和的白色图像,RGB=255,这导致模型变得不稳定。出现在批次=3696中,批次大小=4。当我跳过那一批时,一切都很顺利

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


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