【发布时间】:2018-12-23 15:08:53
【问题描述】:
我正在努力训练
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% 的准确率,然后逐步添加 dropout、正则化步。我认为您添加了太多的 dropout,尤其是在第一阶段之后。请记住,当您执行max-pool、dropout、regularization等时,您正在向网络中引入某种噪声,这确实有助于避免过度拟合。但是,过多的噪音会妨碍您学习,尤其是对于小数据。 -
@dennlinger,我编辑了我的问题以澄清一些事情。我已经尝试过
SGD、adagrad、adam优化器,但没有一个提供任何体面的输出。我试过 LR 为0.1, 0.5, 0.05, 0.01,但没有变化。 -
@ParagS.Chandakkar,谢谢。我试图删除
dropout层,甚至将LR 减少到0.01和0.05。准确率似乎提高到了 60%,但现在已经过拟合了。 -
您正在扩充测试数据,您不应该这样做。这是一个很大的禁忌。
标签: python-3.x keras deep-learning classification