我的CNN图像识别模型会产生波动的验证损失

2024-05-07 04:56:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型在验证损失中经历了巨大的波动,无法收敛。在

我正在用我的三只狗做一个图像识别项目,即对图像中的狗进行分类。两只狗非常相似,第三只非常不同。我分别给每只狗拍了10分钟的视频。每秒钟提取帧作为图像。我的数据集包括1800张照片,每只狗有600张。在

这段代码负责扩充和创建数据以供给模型。在

randomize = np.arange(len(imArr)) # imArr is the numpy array of all the images
np.random.shuffle(randomize) # Shuffle the images and labels
imArr = imArr[randomize]
imLab= imLab[randomize] # imLab is the array of labels of the images
lab = to_categorical(imLab, 3)

gen = ImageDataGenerator(zoom_range = 0.2,horizontal_flip = True , vertical_flip = True,validation_split = 0.25)
train_gen = gen.flow(imArr,lab,batch_size = 64, subset = 'training')
test_gen = gen.flow(imArr,lab,batch_size =64,subset = 'validation')

这张图片是下面模型的结果。enter image description here

^{pr2}$

我试过的东西。在

  • 高/低学习率(0.01->0.0001)
  • 将两个致密层中的压降增加到0.5
  • 增加/减小两个致密层的大小(最小128–最大4048)
  • CNN层数增加
  • 引入动量
  • 增加/减少批量

我没试过的事

  • 我没有使用任何其他损失或度量
  • 我没有使用任何其他的乐观主义者。在
  • 没有调整CNN层的任何参数

在我的模型中,似乎存在某种形式的随机性或参数过多。我知道它目前是过度拟合,但这不应该是波动的原因(?)。 我不太担心模型的性能。我想达到70%的准确率。我现在要做的就是稳定验证的准确性和收敛性。在

注:

  • 在某些时期,培训损失非常低(0.1),但是有效性 损失很高(>;3)。在
  • 视频是在不同的背景下拍摄的,但是+-每只狗在每个背景上的数量是一样的。在
  • 有些图像有点模糊。在

Tags: ofthe数据模型图像视频isnp
2条回答

我知道你试过很多不同的方法。几点建议:

  1. 我看到你在你的Conv2D例如11x11和{}中使用了大过滤器。如果你的图像尺寸不是很大,你一定要选择较低的过滤尺寸,比如3x3。在
  2. 尝试不同的优化器,如果没有,请尝试使用变化的Adam

否则,我看不出什么问题。也许你需要更多的数据让网络更好的学习。在

将优化器改为Adam,绝对更好。在您的代码中,您正在使用它,但是使用了默认参数,您正在创建一个SGD优化器,但是在编译行中,您引入了一个没有参数的Adam。使用优化器的实际参数。在

我鼓励你先把辍学的学生排除在外,看看发生了什么,如果你过度适应,就从低辍学开始,然后上升。在

也可能是因为你的一些测试样本很难检测到,从而增加了损失,也许在验证集中去掉洗牌,观察任何潜伏期,试图找出是否有验证样本难以检测。在

希望有帮助!在

相关问题 更多 >