【发布时间】: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