首页 > 解决方案 > 在我的 Keras 卷积网络模型中找不到非常低准确率的原因

问题描述

我已经构建并训练了我的卷积神经网络模型,并使用Handwritten_Dataset对其进行了训练,并使用了 epochs=2 并以 128 个批次发送了训练数据,但找不到其准确性非常低的原因。

代码是:

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import keras

from sklearn.model_selection import train_test_split

import warnings
warnings.filterwarnings('ignore')

import tables

from keras.models import Sequential
from keras.utils import np_utils 

from keras.layers import Conv2D, MaxPooling2D

from keras.layers import Activation, Flatten, Dropout, Dense


from keras.utils import to_categorical

#hd=pd.read_hdf('data.h5')
hd=pd.read_csv('../input/handwritten_data_785.csv')
hd.head()

Y=hd.iloc[:,0]
X=hd.iloc[:,1:]

Y=to_categorical(Y)

X_train,X_test,Y_train,Y_test=train_test_split(X,Y,stratify=Y,random_state=34,test_size=0.25)
X_train=X_train.values.reshape(X_train.shape[0],28,28,1)
X_test=X_test.values.reshape(X_test.shape[0],28,28,1)


X_train = X_train.astype('float32')
X_test = X_test.astype('float32')

print("X.shape ",X.shape)
print("Y.shape ",Y.shape)
type(Y)

input_shape=(28,28,1)
n_classes=Y_train.shape[1]
batch_size=128
epochs=2
model=Sequential()
model.add(Conv2D(filters=32,kernel_size=(4,4),strides=(1,1),padding='same',activation='relu',input_shape=input_shape))

model.add(MaxPooling2D(pool_size=(2,2)))#,strides=(1,1)))

model.add(Conv2D(filters=64,kernel_size=(4,4),strides=(1,1),padding='same',activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2),strides=(1,1)))

model.add(Flatten())

model.add(Dense(1000,activation='relu'))
model.add(Dense(n_classes,activation='softmax'))

model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.SGD(lr=0.05),metrics=["accuracy"])
model.fit(X_train,Y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(X_test,Y_test))

model.evaluate(X_test,Y_test,verbose=0)

谁能指出如此低准确率背后的原因?我是否正确划分了数据集?

输出精度为:

Train on 279027 samples, validate on 93010 samples
Epoch 1/2
279027/279027 [==============================] - 63s 225us/step - loss: 15.6456 - acc: 0.0293 - val_loss: 15.6455 - val_acc: 0.0293
Epoch 2/2
279027/279027 [==============================] - 58s 208us/step - loss: 15.6455 - acc: 0.0293 - val_loss: 15.6455 - val_acc: 0.0293

[15.64552185918654, 0.02931942801857274]

标签: pythonkerasconv-neural-network

解决方案


以下帮助我获得良好的准确性:

1)归一化数据会大规模影响卷积神经网络。

规范化数据:X /=255

在不改变时代的情况下,准确率似乎高达 90%。

2)增加epochs也会提高模型的准确性。


推荐阅读