如何提高keras模型的准确性并防止过度拟合

时间:2018-07-16 06:11:34

标签: python-3.x keras deep-learning classification

我正在尝试训练

model.add(Conv2D(32, (3, 3), kernel_initializer='random_uniform', activation='relu', input_shape=(x1, x2, depth)))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.5))

model.add(BatchNormalization())
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPool2D(pool_size=(2, 2)))
model.add(Dropout(0.4))

model.add(Conv2D(64, 3, 3))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(BatchNormalization())
model.add(Dropout(0.2))

model.add(Flatten())

model.add(Dense(128, activation='relu'))
model.add(Dropout(0.3))

model.add(Dense(3, activation='softmax'))

这是我的编译方式:

sgd = optimizers.SGD(lr=0.1, decay=0.0, momentum=0.05, nesterov=True)
model.compile(loss='categorical_crossentropy',
          optimizer=sgd,
          metrics=['accuracy'])

我尝试了各种学习率和不同的优化器。但准确度似乎不会超过50%,如下所示: enter image description here

我的图像已正确归一化为0,STD为1。

我缺少什么吗?如何提高模型的准确性?

编辑:

嘿,当我使用以下数据生成器时:

train_datagen = ImageDataGenerator(
    featurewise_center=True,
    featurewise_std_normalization=True,
    rotation_range=20,
    width_shift_range=0.2,
    height_shift_range=0.2,
    horizontal_flip=True)
test_datagen = ImageDataGenerator(featurewise_center=True,
    featurewise_std_normalization=True)



train_generator = train_datagen.flow(np.array(X_train), batch_size=batchsize)
valid_generator = test_datagen.flow(np.array(X_test), batch_size = batchsize)

history = model.fit_generator(train_datagen.flow(np.array(X_train), y_train_cat, batch_size=batchsize),
                    steps_per_epoch=len(X_train) // batchsize, epochs=epochs, 
                    validation_data= valid_generator, 
                    validation_steps=len(X_test) // batchsize)

我收到以下错误:

  

TypeError:“>”和“ str”的实例之间不支持“>”

我曾经通过更新numpy或卸载并重新安装来解决此问题,但这一次,它都不起作用。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

您已经捕获了调整学习率,辍学,批处理规范化等内容,这是进行调整的良好起点。

您是否尝试过正则化?

退房 https://cambridgespark.com/content/tutorials/neural-networks-tuning-techniques/index.html

如果没有帮助,则可能需要查看输入的结构,并查看是否还有其他方法对网络融合更有帮助。这包括确保训练和验证在数据等方面具有相同水平的差异。但是,这更多地取决于您要解决的问题。