我的模型的精度没有提高,模型对火车数据的拟合过高

时间:2018-08-20 01:15:58

标签: python keras conv-neural-network

我的模型的准确性没有提高,不是基于验证数据集,也不是针对测试数据集。在此之前,我曾尝试过密集的层与辍学,但我有同样的问题。您能建议我任何解决方案吗?如何提高我的准确性?我应该更改模型参数,如果需要,我需要更改哪些参数?

model = Sequential()
model.add(Convolution2D(125, kernel_size=(5, 5), strides=(1, 1),padding="same", data_format="channels_last",input_shape= (100,8,1)))
#model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='same'))
model.add(Convolution2D(64, (5, 5),padding="same", activation='relu'))
model.add(Convolution2D(64, (5, 5),padding="same", activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2),padding='same'))
model.add(Flatten())
#model.add(Dense(32, activation='relu'))
model.add(Dense(5, activation='softmax'))

sgd = SGD(lr=0.0001, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='mse',
              optimizer=sgd,
              metrics=['accuracy'])
print(model.summary())

输出

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_16 (Conv2D)           (None, 100, 8, 125)       3250      
_________________________________________________________________
conv2d_17 (Conv2D)           (None, 100, 8, 64)        200064    
_________________________________________________________________
conv2d_18 (Conv2D)           (None, 100, 8, 64)        102464    
_________________________________________________________________
max_pooling2d_7 (MaxPooling2 (None, 50, 4, 64)         0         
_________________________________________________________________
flatten_6 (Flatten)          (None, 12800)             0         
_________________________________________________________________
dense_6 (Dense)              (None, 5)                 64005     
=================================================================
Total params: 369,783
Trainable params: 369,783
Non-trainable params: 0
_________________________________________________________________
None

Model.fit

x_train = x_train.reshape(100,100,8,1)
x_test =x_test.reshape(100,100,8,1)



model.fit(x_train, y_train,validation_split=0.20,shuffle = True,
          epochs=150,
          batch_size= 25)
score = model.evaluate(x_test, y_test, batch_size=25, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])
print("\n%s: %.2f%%" % (model.metrics_names[1], score[1]*100))

输出

Epoch 130/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0101 - acc: 0.9750 - val_loss: 0.2128 - val_acc: 0.1500
Epoch 131/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0100 - acc: 0.9750 - val_loss: 0.2123 - val_acc: 0.1500
Epoch 132/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0100 - acc: 0.9750 - val_loss: 0.2123 - val_acc: 0.1500
Epoch 133/150
80/80 [==============================] - 3s 36ms/step - loss: 0.0099 - acc: 0.9750 - val_loss: 0.2124 - val_acc: 0.1500
Epoch 134/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0098 - acc: 0.9750 - val_loss: 0.2127 - val_acc: 0.1500
Epoch 135/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0097 - acc: 0.9750 - val_loss: 0.2131 - val_acc: 0.1500
Epoch 136/150
80/80 [==============================] - 3s 38ms/step - loss: 0.0097 - acc: 0.9750 - val_loss: 0.2134 - val_acc: 0.1500
Epoch 137/150
80/80 [==============================] - 3s 39ms/step - loss: 0.0096 - acc: 0.9750 - val_loss: 0.2137 - val_acc: 0.1500
Epoch 138/150
80/80 [==============================] - 3s 39ms/step - loss: 0.0096 - acc: 0.9750 - val_loss: 0.2139 - val_acc: 0.1500
Epoch 139/150
80/80 [==============================] - 3s 38ms/step - loss: 0.0095 - acc: 0.9750 - val_loss: 0.2140 - val_acc: 0.1500
Epoch 140/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0095 - acc: 0.9750 - val_loss: 0.2140 - val_acc: 0.1500
Epoch 141/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0094 - acc: 0.9750 - val_loss: 0.2140 - val_acc: 0.1500
Epoch 142/150
80/80 [==============================] - 3s 40ms/step - loss: 0.0094 - acc: 0.9750 - val_loss: 0.2140 - val_acc: 0.1500
Epoch 143/150
80/80 [==============================] - 3s 38ms/step - loss: 0.0093 - acc: 0.9750 - val_loss: 0.2139 - val_acc: 0.1500
Epoch 144/150
80/80 [==============================] - 3s 37ms/step - loss: 0.0093 - acc: 0.9750 - val_loss: 0.2138 - val_acc: 0.1500
Epoch 145/150
80/80 [==============================] - 3s 41ms/step - loss: 0.0092 - acc: 0.9750 - val_loss: 0.2137 - val_acc: 0.1500
Epoch 146/150
80/80 [==============================] - 3s 42ms/step - loss: 0.0092 - acc: 0.9750 - val_loss: 0.2135 - val_acc: 0.1500
Epoch 147/150
80/80 [==============================] - 3s 40ms/step - loss: 0.0092 - acc: 0.9750 - val_loss: 0.2134 - val_acc: 0.1500
Epoch 148/150
80/80 [==============================] - 3s 43ms/step - loss: 0.0091 - acc: 0.9750 - val_loss: 0.2135 - val_acc: 0.1500
Epoch 149/150
80/80 [==============================] - 3s 38ms/step - loss: 0.0091 - acc: 0.9750 - val_loss: 0.2136 - val_acc: 0.1500
Epoch 150/150
80/80 [==============================] - 3s 38ms/step - loss: 0.0091 - acc: 0.9750 - val_loss: 0.2137 - val_acc: 0.1500
Test loss: 0.19732705876231194
Test accuracy: 0.23000000230967999

acc: 23.00%

1 个答案:

答案 0 :(得分:0)

以下是您要更改的一些超参数:-

  • 损失-尝试将用于计算mse损耗的方法更改为交叉熵的变化
  • 优化器-SGD是Keras提供的基本优化器之一,您可以尝试其他优化器,例如Adam,RMSprop等。
  • 学习率-权重的更新率

您还可以尝试在卷积层中更改窗口大小,也可以在Maxpooling和Conv2D层中尝试不同的填充方案