Python 我如何故意在Keras中过度拟合卷积神经网络,以确保模型正常工作?

Python 我如何故意在Keras中过度拟合卷积神经网络,以确保模型正常工作?,python,tensorflow,neural-network,keras,Python,Tensorflow,Neural Network,Keras,在训练我的模型时,我试图诊断是什么导致精度低。在这一点上,我只希望能够达到较高的训练精度(稍后我会担心测试精度/过度拟合问题)。如何调整模型以提高训练精度?我想这样做是为了确保在预处理步骤(洗牌、分割、规范化等)中没有犯任何错误 您需要删除掉图层。以下是一个关于故意过度装配的小检查表: 删除任何正则化(辍学、L1和L2正则化) 确保设置较慢的学习速度(Adam是自适应的,因此在您的情况下,这是可以的) 您可能不希望洗牌训练样本(例如,所有前100个样本为A类,下100个样本为B类,最后100个

在训练我的模型时,我试图诊断是什么导致精度低。在这一点上,我只希望能够达到较高的训练精度(稍后我会担心测试精度/过度拟合问题)。如何调整模型以提高训练精度?我想这样做是为了确保在预处理步骤(洗牌、分割、规范化等)中没有犯任何错误


您需要删除掉图层。以下是一个关于故意过度装配的小检查表:

  • 删除任何正则化(辍学、L1和L2正则化)
  • 确保设置较慢的学习速度(Adam是自适应的,因此在您的情况下,这是可以的)
  • 您可能不希望洗牌训练样本(例如,所有前100个样本为A类,下100个样本为B类,最后100个样本为C类)更新:正如彼得苏黎世在下面的回答中指出的那样,应谨慎考虑这一点,因为它可能根本不会导致任何培训效果

现在,如果您很容易建立过拟合模型,那么这是一个强大模型的良好迹象,能够表示数据。否则,你可能会考虑一个更深层/更广泛的模型,或者你应该好好看看数据并问一个问题:“真的有PTENRS吗?这是可训练的吗?”

< P>除了其他有效的答案之外,一个非常简单的方法就是只使用一小部分的数据。例如,仅1或2个样品


另请参阅这篇非常有用的帖子,内容涉及您可以检查以确保模型正常工作的所有内容:

我认为在这种情况下不建议对数据进行无序处理,因为它不一定会导致过度拟合,但在最坏的情况下,根本不会产生任何训练效果。
#PARAMS
dropout_prob = 0.2
activation_function = 'relu'
loss_function = 'categorical_crossentropy'
verbose_level = 1
convolutional_batches = 32
convolutional_epochs = 5
inp_shape = X_train.shape[1:]
num_classes = 3


def train_convolutional_neural():
    y_train_cat = np_utils.to_categorical(y_train, 3) 
    y_test_cat = np_utils.to_categorical(y_test, 3)

    model = Sequential()
    model.add(Conv2D(filters=16, kernel_size=(3, 3), input_shape=inp_shape))
    model.add(Conv2D(filters=32, kernel_size=(3, 3)))
    model.add(MaxPooling2D(pool_size = (2,2)))
    model.add(Dropout(rate=dropout_prob))
    model.add(Flatten())
    model.add(Dense(64,activation=activation_function))
    model.add(Dense(num_classes,activation='softmax'))
    model.summary()
    model.compile(loss=loss_function, optimizer="adam", metrics=['accuracy'])
    history = model.fit(X_train, y_train_cat, batch_size=convolutional_batches, epochs = convolutional_epochs, verbose = verbose_level, validation_data=(X_test, y_test_cat))
    model.save('./models/convolutional_model.h5')