我为一个图像分类问题做了这个模型。我遇到的问题是验证精度总是比训练精度低5-8%,验证损失远高于训练损失。下面是我的一个时代的例子:损失: 0.2232 - acc: 0.9245 - val_loss: 0.4131 - val_acc: 0.8700
model = Sequential()
model.add(Conv2D(32, 3, 3, border_mode='same', input_shape=(150,
150, 3), activation='relu'))
model.add(Conv2D(32, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(Conv2D(64, 3, 3, border_mode='same', activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(128, 3, 3, border_mode='same',
activation='relu'))
model.add(Conv2D(128, 3, 3, border_mode='same',
activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(256, 3, 3, border_mode='same',
activation='relu'))
model.add(Conv2D(256, 3, 3, border_mode='same',
activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(256, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=RMSprop(lr=0.0001),
metrics=['accuracy'])
# this is the augmentation configuration we will use for training
train_datagen = ImageDataGenerator(
rescale=1. / 255,
shear_range=0.1,
zoom_range=0.1,
horizontal_flip=True)
# this is the augmentation configuration we will use for testing:
# only rescaling
test_datagen = ImageDataGenerator(rescale=1. / 255)我尝试过使用Hyperas进行贝叶斯超参数优化,但是它推荐的模型超参数并不适用于我。我应该改变我的模型,以防止它过度适应?我没有使用太多的数据来训练和验证模型,因为我不会有太多的数据来描述模型在现实生活中的应用。如有任何建议,将不胜感激。
发布于 2019-07-17 13:36:31
过度拟合是一回事,训练和验证错误是另一回事。
事实上,你的训练成绩比你的验证要好,但这并不意味着你已经适应过度了。当你的验证分数达到他们的最佳水平,然后随着训练而变得更糟时,你就变得过分适应了。
如果您正在寻找的是更好的验证分数--更好的模型泛化,那么您可以做的是:
发布于 2019-11-06 16:03:03
您是否在测试阶段关闭了DropOut层?
由于DropOut层只在训练阶段使用以防止过度拟合,所以它们不用于测试阶段。这就是为什么Tf.Estimator现在很有名的原因,因为您可以更容易地使用is_training=True/False关闭DropOut
您可以使用tf.keras.backend.set_learning_phase(0)关闭。请确保您正在使用的tensorflow.keras从tensorflow.keras.layers导入Conv2D,MaxPooling2D,稠密,Dropout,输入,扁平,有区别的tf.keras和keras,tf.keras更好。
如果你已经关闭,下面是我的技巧,以防止过度安装:
希望这能有所帮助!编码愉快!
https://stackoverflow.com/questions/57076930
复制相似问题