Python 3.x 如何提高keras模型的精度并防止过度拟合

Python 3.x 如何提高keras模型的精度并防止过度拟合,python-3.x,keras,deep-learning,classification,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), ac

我正在努力训练

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%,如下所示:

我的图像在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:“int”和“str”实例之间不支持“>”


我曾经通过更新
numpy
或者卸载它并再次安装来解决这个问题,但这次,它对这两种方法都不起作用。你能帮我吗?

你已经抓到了一些东西,比如调整学习率、辍学率、批量标准化等,这是一个很好的调整起点

你试过正规化吗

退房


如果没有帮助,您可能需要查看输入是如何构造的,并查看是否有其他更有助于网络融合的方式。这包括确保训练和验证在数据等方面具有相同的差异水平。然而,这更具体于您试图解决的问题。

机器学习,特别是超参数优化,是一个极其复杂的主题。为了让我们(社区)为您提供有用的提示,我们需要更多关于您尝试执行的任务的信息;您当前使用的培训/测试数据;您尝试过哪些特定的优化器和学习率(或其他参数)。你提供的信息越具体,得到有用回复的机会就越高!我建议你1。使用
he_normal
(或
he_uniform
代替
random_uniform
)2。在训练集上获得接近100%的准确度,然后逐步添加辍学、正则化。我认为你的辍学率太高了,尤其是在第一阶段之后。请记住,当您执行
最大池
退出
正则化
等操作时,会在网络中引入某种噪声,这确实有助于避免过度拟合。然而,太多的噪音会妨碍你学习,尤其是在小数据的情况下。@Denninger,我编辑了我的问题来澄清一些事情。我尝试了
SGD
adagrad
adam
优化器,但没有一个优化器提供任何令人满意的输出。我试过LR作为
0.1,0.5,0.05,0.01
,但没有改变。@ParagS.Chandakkar,谢谢。我试图删除
退出
层,甚至将LR降低到
0.01
0.05
。准确度似乎提高到了60%,但现在已经过度拟合了。你在增加测试数据,你不应该这样做。这是一个很大的不。我认为添加
dropout
层是
正则化的一种形式。所以我做到了。我还做了一些数据生成,以防数据大小出现问题。你有什么建议?