Validation 验证,尝试了不同的方法,但没有取得好的结果

Validation 验证,尝试了不同的方法,但没有取得好的结果,validation,keras,deep-learning,neural-network,cnn,Validation,Keras,Deep Learning,Neural Network,Cnn,我正试图训练一个CNN,使其进行大量的超参数调整,并设法在我的离散大小数据集上获得80%的准确率。然而,我开始过度装修,我完全没有得到比这更好的。这是我的网络: depth=5 启动过滤器=32 model=keras.models.Sequential() 对于范围内的i(深度): 如果i==0: 输入形状=(img\u h,img\u w,3) 其他: 输入_形状=(无,无) model.add(tf.keras.layers.Conv2D)(过滤器=start\u f/2, 内核大小=(3

我正试图训练一个CNN,使其进行大量的超参数调整,并设法在我的离散大小数据集上获得80%的准确率。然而,我开始过度装修,我完全没有得到比这更好的。这是我的网络:

depth=5
启动过滤器=32
model=keras.models.Sequential()
对于范围内的i(深度):
如果i==0:
输入形状=(img\u h,img\u w,3)
其他:
输入_形状=(无,无)
model.add(tf.keras.layers.Conv2D)(过滤器=start\u f/2,
内核大小=(3,3),
步幅=(1,1),
“相同”,
输入形状=输入形状)
model.add(tf.keras.layers.ReLU())
model.add(tf.keras.layers.Conv2D)(过滤器=start\u f/2,
内核大小=(3,3),
步幅=(1,1),
“相同”,
输入形状=输入形状)
添加(tf.keras.layers.BatchNormalization())
model.add(tf.keras.layers.ReLU())
add(tf.keras.layers.MaxPool2D(池大小=(2,2)))
起始值f*=2
model.add(layers.flatte())
add(tf.keras.layers.Dense(1024,activation='relu',kernel_regulazer=tf.keras.regulazers.l1(0.001)))
模型添加(tf.keras.layers.Dropout(0.5))
添加(tf.keras.layers.Dense(num_类,activation='softmax'))
model.summary()

到目前为止,我尝试了以下方法:

  • 他开始面临震荡
  • 致密层上的LR1
  • 将批处理大小增加到32
  • Augumentation-包含,因为它可能会更改标签
  • 学习率调整
  • 我已经调整了深度和过滤器的数量,以获得这个结果。有什么建议吗


    附言:在应用所描述的动作之前,我在同一型号上的前一次试穿中获得了80%——除了奥古斯丁之外,你可以尝试一些东西

  • 检查是否尚未对验证数据应用预处理步骤

  • 您的问题可能更复杂,因此需要更多的层/单元

  • 设置较小的学习速率

  • 您是否在预处理步骤中缩放/规范化了数据

  • 使用更大的数据集

  • 尝试辍学(正规化)

  • 检查是否有不平衡的数据集

  • 验证数据的大小可能很小


  • 首先,谢谢大家。我已经添加了关于深度和过滤器的信息,我忘记了。除了调整验证集大小之外,我已经完成了所有建议的步骤。实际上,我的数据集由5.7K个图像组成,其中20%用于验证。我无法增加数据集。我没有对验证应用任何预处理,我在训练集上做过。我将尝试在fit上设置class_权重参数。您应该在train和val集合中应用相同的预处理。augumentation不是只在training集合上完成吗?我一直在使用的预处理只是用于训练和验证的重缩放(重缩放=1./255),我添加了旋转、翻转和缩放,但没有成功,只是在训练中。是的,只是在训练中。因此,您确实对val集应用了相同的预处理(重新缩放)。因为你说,
    我没有对验证应用任何预处理
    。我以为你指的是通过
    ImageDataGenerator
    中的
    preprocess\u函数
    参数进行的非标准预处理。我应用于培训和验证的唯一标准是
    rescale=1./255