Tensorflow SegNet:为什么训练精度高,但验证精度低?

Tensorflow SegNet:为什么训练精度高,但验证精度低?,tensorflow,machine-learning,keras,neural-network,deep-learning,Tensorflow,Machine Learning,Keras,Neural Network,Deep Learning,我尝试在数据集上训练在Keras中实现的SegNet Basic。但经过训练后,验证准确率稳定在50-60%左右,而训练准确率上升到90%以上 我尝试使用不同的优化器和图片大小。数据集的遮罩以灰度图像的形式出现,我根据图像的大小将它们分割成一个numpy数组,每个图片有[img_高度、img_宽度、num_类] 我的SegNet_基本实现如下所示:_encode和_decode函数是Unpool的实现,其索引表示状态 def SegNet_Basic(n_标签,输入_形状=(480352,3))

我尝试在数据集上训练在Keras中实现的SegNet Basic。但经过训练后,验证准确率稳定在50-60%左右,而训练准确率上升到90%以上

我尝试使用不同的优化器和图片大小。数据集的遮罩以灰度图像的形式出现,我根据图像的大小将它们分割成一个numpy数组,每个图片有[img_高度、img_宽度、num_类]

我的SegNet_基本实现如下所示:_encode和_decode函数是Unpool的实现,其索引表示状态

def SegNet_Basic(n_标签,输入_形状=(480352,3)):
内核=3
过滤器大小=64
输入=输入(形状=输入\形状)
c1=Conv2D(过滤器大小,(3,3),激活='relu',填充='same')(输入)
c1=BatchNormalization()(c1)
池_1,掩码_1=_编码(c1)
c2=辍学(0.2)(第1组)
c2=Conv2D(128,(3,3),activation='relu',padding='same')(c2)
c2=批处理规范化()(c2)
池2,掩码2=_编码(c2)
c3=Conv2D(256,(3,3),activation='relu',padding='same')(pool_2)
c3=BatchNormalization()(c3)
池_3,掩码_3=_编码(c3)
c4=辍学(0.2)(第三组)
c4=Conv2D(512,(3,3),activation='relu',padding='same')(c4)
c4=批处理规范化()(c4)
c5=Conv2D(512,(3,3),激活='relu',填充='same')(c4)
c5=批处理规范化()(c5)
c6=Conv2D(256,(3,3),激活='relu',填充='same')(c5)
unpool_1=_解码(c6,掩码_3)
c6=辍学率(0.2)(unpool_1)
c6=Conv2D(256,(3,3),activation='relu',padding='same')(c6)
c6=BatchNormalization()(c6)
c7=Conv2D(128,(3,3),activation='relu',padding='same')(c6)
unpool_2=_解码(c7,掩码_2)
c7=辍学(0.2)(unpool_2)
c7=Conv2D(128,(3,3),activation='relu',padding='same')(c7)
c7=BatchNormalization()(c7)
c8=Conv2D(64,(3,3),activation='relu',padding='same')(c7)
unpool_3=_解码(c8,掩码_1)
c8=Conv2D(过滤器大小,(3,3),激活='relu',填充='same')(unpol_3)
c8=BatchNormalization()(c8)
输出=Conv2D(n_标签,(1,1),激活='softmax')(c8)
模型=模型(输入=[inputs],输出=[output],名称=[SegNet_Basic')
回归模型
我使用的图片大小是(480352),因为我不能使用更大的尺寸,因为我的笔记本电脑无法在gpu上处理它们。我还看到,像天空和树木这样的类得到了很好的识别,正如我添加的第一张图片所示,但是其他类的准确性非常糟糕

如果需要,我还可以提供代码的其他部分

感谢您提前提供的任何帮助


这是一个过度装配的典型例子:-)您的小批量产品有多大?您确定它过度装配了吗?因为如果我用一张训练集的图片做预测,我也会得到一个非常糟糕的结果——见附件中的最后一张图片。我的批量大小是1,因为如果我增加它,我的笔记本电脑的内存(8GB)…这是一个单一的例子,请参阅训练/测试损失/准确性趋势。测试很快就停止了,而火车一直在无限期地改进。然而,当批量大小为1时,BatchNorm将。。。身份是最好的选择。摆脱它,加强辍学率。。我从来没想过这会是个问题。。。我会让它在没有巴赫标准和更多辍学者的情况下运行!让我们看看!谢谢你提醒我!我在找这样的东西!我一定会试试的!!我听说你现在甚至可以用TPU代替GPU!多好的一个过度装配的典型例子:-)你们的小批量有多大?你们确定它过度装配了吗?因为如果我用一张训练集的图片做预测,我也会得到一个非常糟糕的结果——见附件中的最后一张图片。我的批量大小是1,因为如果我增加它,我的笔记本电脑的内存(8GB)…这是一个单一的例子,请参阅训练/测试损失/准确性趋势。测试很快就停止了,而火车一直在无限期地改进。然而,当批量大小为1时,BatchNorm将。。。身份是最好的选择。摆脱它,加强辍学率。。我从来没想过这会是个问题。。。我会让它在没有巴赫标准和更多辍学者的情况下运行!让我们看看!谢谢你提醒我!我在找这样的东西!我一定会试试的!!我听说你现在甚至可以用TPU代替GPU!