【问题标题】:CNN how to optimize hyperparameters to prevent overfittingCNN如何优化超参数以防止过拟合
【发布时间】:2020-03-18 18:11:34
【问题描述】:

我目前正在使用 Tensorflow Keras 开发用于多分类(3 类)的 CNN。我曾使用 sklearn 将我的数据拆分为 9:1 训练/验证(1899 个训练数据,212 个验证数据)。

我的 CNN 模型在 17 个 epoch 后开始缓慢增长。这是否意味着 CNN 模型开始过拟合?任何减少验证损失的建议,因为我在 CNN 模型中使用了 dropout 和批量归一化。我也使用 EarlyStopping 来研究我的 CNN 模型,但经过一些调整,我的 CNN 模型仍然面临这个问题。

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)

model = Sequential()

# filters, kernel size, input size
model.add(Conv2D(256, (3, 3), input_shape=X.shape[1:], padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))
model.add(Dropout(0.2))

model.add(Conv2D(256, (3, 3), padding='same'))
model.add(Dropout(0.2))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))

model.add(Conv2D(256, (3, 3), padding='same'))
model.add(Dropout(0.25))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))

model.add(Conv2D(256, (3, 3), padding='same'))
model.add(Dropout(0.25))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), strides=2))

model.add(Flatten())
model.add(Dense(256))
model.add(BatchNormalization())
model.add(Activation('relu'))

model.add(Dropout(0.8))
model.add(Dense(3))
model.add(Activation('softmax'))

tensorboard = TensorBoard(log_dir="CNN_Model_Rebuilt/logs/{}".format(NAME))

augmented_checkpoint = ModelCheckpoint(
                'CNN_Model_Rebuilt/best model/normalization-best.h5',
                monitor='val_loss', verbose=0,
                save_best_only=True, mode='auto')

es = EarlyStopping(monitor='val_loss',
                   min_delta=0,
                   patience=20,
                   verbose=0, mode='auto')

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_train, to_categorical(y_train), batch_size=32, epochs=100,
                      validation_data=(X_test, to_categorical(y_test)), 
                      callbacks=[augmented_checkpoint, tensorboard, es], verbose=2)

任何建议/建议将不胜感激。谢谢。

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    为了减少过度拟合,您可以尝试增加输入数据的数量,然后增加(翻转、旋转、缩放等),这样可以提高泛化能力。

    对于模型,你可以尝试的一些想法是增加层数,增加单元数,增加drop-out值,使用不同的激活,添加一个未使用的新层,以及其他一些内置和自定义的正则化方法。

    您可以随时调整这些参数和层以实现更准确的模型有时稍差。这个想法是调整超参数是混合和匹配。

    您还可以在link 中了解名为 Tensor Flow Model Optimization Toolkit 的 TensorFlow 库扩展。

    【讨论】:

      猜你喜欢
      • 2020-07-31
      • 2016-07-08
      • 2019-09-29
      • 2021-04-30
      • 2021-10-17
      • 2018-09-28
      • 2019-01-22
      • 1970-01-01
      • 2019-03-16
      相关资源
      最近更新 更多