图像着色 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
我用这个参数训练它:
- 数据集大小:150 000
- 优化器:亚当
- 批量大小:128
- 损失函数:MSE
我有这些图表:
我们可以看到,准确性和损失一直在提高。但问题在于输出。当我用我的测试数据集评估每个 epoch 模型时,最佳 epoch 是 15.
在这里我们可以看到第 15 和第 60 个时期的对比。
这是过拟合吗?如何防止?
正确 - 这是一个过度拟合的例子。您可以看到这种情况开始发生在第 10 轮左右,此时训练集的准确率开始上升到高于验证集的准确率。
这是由于模型开始过多地记住训练集模式,因此无法很好地泛化未见过的数据(您的验证集)。
您的模型中似乎没有任何正则化层,因此我绝对建议添加一些丢弃层。 Dropout 由 'turning-off' 个节点随机工作,因此模型被迫通过网络学习其他路线,从而有助于防止过度拟合。这个blog很好的解释了。
从 0.1 的 dropout 开始,看看训练精度和验证精度开始不同的点是否开始于比第 10 个时期更晚的时期。因此,如果例如训练 acc > 验证 acc 现在从第 20 个时期开始,那么您就知道 dropout 正在产生积极影响,您可以从那里决定要做什么。
一如既往,一步一步地进行更改,这样您就可以看到发生了什么。
我关注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
我用这个参数训练它:
- 数据集大小:150 000
- 优化器:亚当
- 批量大小:128
- 损失函数:MSE
我有这些图表:
我们可以看到,准确性和损失一直在提高。但问题在于输出。当我用我的测试数据集评估每个 epoch 模型时,最佳 epoch 是 15.
在这里我们可以看到第 15 和第 60 个时期的对比。
这是过拟合吗?如何防止?
正确 - 这是一个过度拟合的例子。您可以看到这种情况开始发生在第 10 轮左右,此时训练集的准确率开始上升到高于验证集的准确率。
这是由于模型开始过多地记住训练集模式,因此无法很好地泛化未见过的数据(您的验证集)。
您的模型中似乎没有任何正则化层,因此我绝对建议添加一些丢弃层。 Dropout 由 'turning-off' 个节点随机工作,因此模型被迫通过网络学习其他路线,从而有助于防止过度拟合。这个blog很好的解释了。
从 0.1 的 dropout 开始,看看训练精度和验证精度开始不同的点是否开始于比第 10 个时期更晚的时期。因此,如果例如训练 acc > 验证 acc 现在从第 20 个时期开始,那么您就知道 dropout 正在产生积极影响,您可以从那里决定要做什么。
一如既往,一步一步地进行更改,这样您就可以看到发生了什么。