我的模型在验证损失中经历了巨大的波动,无法收敛。在
我正在用我的三只狗做一个图像识别项目,即对图像中的狗进行分类。两只狗非常相似,第三只非常不同。我分别给每只狗拍了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')
^{pr2}$
我试过的东西。在
我没试过的事
在我的模型中,似乎存在某种形式的随机性或参数过多。我知道它目前是过度拟合,但这不应该是波动的原因(?)。 我不太担心模型的性能。我想达到70%的准确率。我现在要做的就是稳定验证的准确性和收敛性。在
注:
我知道你试过很多不同的方法。几点建议:
Conv2D
例如11x11
和{3x3
。在Adam
否则,我看不出什么问题。也许你需要更多的数据让网络更好的学习。在
将优化器改为Adam,绝对更好。在您的代码中,您正在使用它,但是使用了默认参数,您正在创建一个SGD优化器,但是在编译行中,您引入了一个没有参数的Adam。使用优化器的实际参数。在
我鼓励你先把辍学的学生排除在外,看看发生了什么,如果你过度适应,就从低辍学开始,然后上升。在
也可能是因为你的一些测试样本很难检测到,从而增加了损失,也许在验证集中去掉洗牌,观察任何潜伏期,试图找出是否有验证样本难以检测。在
希望有帮助!在
相关问题 更多 >
编程相关推荐