在我当前的项目中,我只有 647rows个(500 个用于训练,147 个用于测试),并且我使用以下代码应用了Keras Sequential 模型:
from keras import models
from keras import layers
from keras import regularizers
model = models.Sequential()
model.add(layers.Dense(5,activation="relu",input_shape=(train_x.shape[1],)))
model.add(layers.Dense(1,activation="sigmoid"))
from keras import optimizers
#network = model.compile(optimizer=optimizers.RMSprop(lr=0.001),loss="binary_crossentropy",metrics=["accuracy"])
network = model.compile(optimizer=optimizers.Adam(lr=0.05, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False),loss="binary_crossentropy",metrics=["accuracy"])
result = model.fit(train_x,train_y,epochs=60, batch_size=32)
以下是几个 Epoch 的结果:
Epoch 1/60
500/500 [==============================] - 1s 3ms/step - loss: 0.7253 - acc: 0.5520
Epoch 2/60
500/500 [==============================] - 0s 137us/step - loss: 0.6379 - acc: 0.6640
Epoch 3/60
500/500 [==============================] - 0s 134us/step - loss: 0.6035 - acc: 0.6880
Epoch 4/60
500/500 [==============================] - 0s 158us/step - loss: 0.5852 - acc: 0.6980
Epoch 5/60
500/500 [==============================] - 0s 136us/step - loss: 0.5864 - acc: 0.7140
Epoch 6/60
500/500 [==============================] - 0s 134us/step - loss: 0.5552 - acc: 0.7240
Epoch 7/60
500/500 [==============================] - 0s 141us/step - loss: 0.5475 - acc: 0.7280
Epoch 8/60
500/500 [==============================] - 0s 164us/step - loss: 0.5340 - acc: 0.7460
Epoch 9/60
500/500 [==============================] - 0s 138us/step - loss: 0.5389 - acc: 0.7280
Epoch 10/60
500/500 [==============================] - 0s 139us/step - loss: 0.5374 - acc: 0.7540
===================For the simplicity I am sharing first and last few epochs result=
Epoch 55/60
500/500 [==============================] - 0s 161us/step - loss: 0.4947 - acc: 0.7800
Epoch 56/60
500/500 [==============================] - 0s 168us/step - loss: 0.5058 - acc: 0.7660
Epoch 57/60
500/500 [==============================] - 0s 158us/step - loss: 0.5011 - acc: 0.7700
Epoch 58/60
500/500 [==============================] - 0s 154us/step - loss: 0.5062 - acc: 0.7660
Epoch 59/60
500/500 [==============================] - 0s 156us/step - loss: 0.5040 - acc: 0.7600
Epoch 60/60
500/500 [==============================] - 0s 147us/step - loss: 0.4994 - acc: 0.7800
使用上述配置(我也尝试了不同的神经网络架构,上面的看起来不错),我能够达到迄今为止最好的准确率,即训练准确率 ~ 78 % 和测试准确率 ~ 72 %。我也尝试了逻辑回归,但在这种情况下训练准确度约为 65%。
这里看起来好像发生了过度拟合,所以我尝试了L2 正则化和Dropout,但它们都不能帮助实现更好的准确性。不幸的是,我无法生成更多数据。
我应该怎么做才能获得更好的模型精度(给定有限的数据量)?如何提高训练和测试数据的效率?