图像着色 ConvNet 的准确性和损失仍在改善,但输出有更多伪像

Image colorization ConvNet accurancy and loss still improving, but output having more artefacts

我关注CNN:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 256, 256, 32)      320       
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 128, 128, 32)      9248      
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 128, 128, 64)      18496     
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 64, 64, 64)        36928     
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 64, 64, 128)       73856     
_________________________________________________________________
conv2d_5 (Conv2D)            (None, 32, 32, 128)       147584    
_________________________________________________________________
conv2d_6 (Conv2D)            (None, 32, 32, 256)       295168    
_________________________________________________________________
conv2d_7 (Conv2D)            (None, 16, 16, 256)       590080    
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 16, 16, 512)       1180160   
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 16, 16, 256)       1179904   
_________________________________________________________________
conv2d_transpose (Conv2DTran (None, 32, 32, 256)       590080    
_________________________________________________________________
conv2d_10 (Conv2D)           (None, 32, 32, 128)       295040    
_________________________________________________________________
conv2d_transpose_1 (Conv2DTr (None, 64, 64, 128)       147584    
_________________________________________________________________
conv2d_11 (Conv2D)           (None, 64, 64, 64)        73792     
_________________________________________________________________
conv2d_transpose_2 (Conv2DTr (None, 128, 128, 64)      36928     
_________________________________________________________________
conv2d_12 (Conv2D)           (None, 128, 128, 32)      18464     
_________________________________________________________________
conv2d_transpose_3 (Conv2DTr (None, 256, 256, 32)      9248      
_________________________________________________________________
conv2d_13 (Conv2D)           (None, 256, 256, 16)      4624      
_________________________________________________________________
conv2d_14 (Conv2D)           (None, 256, 256, 2)       290       
=================================================================
Total params: 4,707,794
Trainable params: 4,707,794
Non-trainable params: 0

我用这个参数训练它:

我有这些图表:

我们可以看到,准确性和损失一直在提高。但问题在于输出。当我用我的测试数据集评估每个 epoch 模型时,最佳 epoch 是 15.

在这里我们可以看到第 15 和第 60 个时期的对比。

这是过拟合吗?如何防止?

正确 - 这是一个过度拟合的例子。您可以看到这种情况开始发生在第 10 轮左右,此时训练集的准确率开始上升到高于验证集的准确率。

这是由于模型开始过多地记住训练集模式,因此无法很好地泛化未见过的数据(您的验证集)。

您的模型中似乎没有任何正则化层,因此我绝对建议添加一些丢弃层。 Dropout 由 'turning-off' 个节点随机工作,因此模型被迫通过网络学习其他路线,从而有助于防止过度拟合。这个blog很好的解释了。

从 0.1 的 dropout 开始,看看训练精度和验证精度开始不同的点是否开始于比第 10 个时期更晚的时期。因此,如果例如训练 acc > 验证 acc 现在从第 20 个时期开始,那么您就知道 dropout 正在产生积极影响,您可以从那里决定要做什么。

一如既往,一步一步地进行更改,这样您就可以看到发生了什么。