Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python CNN如何优化超参数以防止过度拟合_Python_Tensorflow_Keras_Deep Learning - Fatal编程技术网

Python CNN如何优化超参数以防止过度拟合

Python CNN如何优化超参数以防止过度拟合,python,tensorflow,keras,deep-learning,Python,Tensorflow,Keras,Deep Learning,我目前正在使用Tensorflow Keras开发一个用于多分类(3类)的CNN。我使用sklearn将我的数据分成9:1的训练/验证(1899个训练数据,212个验证数据) 我的CNN模式在17个时代后开始缓慢增长。这是否意味着CNN模型开始过度拟合?任何减少验证损失的建议,因为我在CNN模型中使用了退出和批量标准化。我也曾使用EarlyStopping调查我的CNN模型,但经过一些调整后,我的CNN模型仍然面临这个问题 X_train, X_test, y_train, y_test =

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

我的CNN模式在17个时代后开始缓慢增长。这是否意味着CNN模型开始过度拟合?任何减少验证损失的建议,因为我在CNN模型中使用了退出和批量标准化。我也曾使用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)

如有任何意见/建议,将不胜感激。谢谢。

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

对于模型,您可以尝试增加层数,增加单元数,增加退出值,使用不同激活,添加未使用的新层,以及其他一些内置和定制的正则化方法

您可以始终围绕这些参数和层进行操作,以获得更精确的模型有时稍差的模型。其思想是调整超参数是混合和匹配


您还可以在本文中阅读名为Tensor Flow Model Optimization Toolkit的Tensor Flow库扩展

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

对于模型,您可以尝试增加层数,增加单元数,增加退出值,使用不同激活,添加未使用的新层,以及其他一些内置和定制的正则化方法

您可以始终围绕这些参数和层进行操作,以获得更精确的模型有时稍差的模型。其思想是调整超参数是混合和匹配

您还可以在本文中阅读名为Tensor Flow Model Optimization Toolkit的Tensor Flow库扩展