[英]Testing accuracy is 0% while training accuracy is 99% (Neural network / Keras)
我在训练卷积神经网络时遇到问题。 我目前正在使用tensorflow库。 看来,当我进行训练时,通过逐个检查其预测来测试它的准确性似乎是99.92%,而我得到的准确度是0%。 我一直想弄清楚为什么会这样。
在这里,我在此处的链接中提供了测试和训练数据集,以及火车之后的.h5文件: https ://drive.google.com/drive/folders/1H77JZIK91PohC2q1u1wp90_fVWbvEiSL?usp=sharing
这是训练代码
import tensorflow as tf
from keras.preprocessing.image import ImageDataGenerator
#To prevent overfitting -> training on the same images
#DATA PREPROCESSING
#TRAIN
train_datagen = ImageDataGenerator(
rescale=1./255,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True )
training_set = train_datagen.flow_from_directory(
'dataset_with_features/train',
target_size=(64,64),
batch_size=32,
class_mode='categorical' )
#TEST test_datagen = ImageDataGenerator(rescale=1./255)
test_set = test_datagen.flow_from_directory(
'dataset_with_features/test',
target_size=(64,64),
batch_size=32,
class_mode='categorical' )
#BUILDING THE CONVOLUTIONAL NEURAL NETWORK
cnn = tf.keras.models.Sequential()
#Sequence of layers
#CONVOLUTION 1
cnn.add(tf.keras.layers.Conv2D(filters=128,
kernel_size=3,
activation='relu',
input_shape=[64,64,3]))
#POOLING 1
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2))
#CONVOLUTION 2
cnn.add(tf.keras.layers.Conv2D(filters=64,kernel_size=3,activation='relu'))
#POOLING 2
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2))
#CONVOLUTION 3
cnn.add(tf.keras.layers.Conv2D(filters=32,kernel_size=3,activation='relu'))
#POOLING 3
cnn.add(tf.keras.layers.MaxPool2D(pool_size=2,strides=2))
#FLATTENING
cnn.add(tf.keras.layers.Flatten())
#FULL CONNECTION
cnn.add(tf.keras.layers.Dense(units=256,activation='relu'))
cnn.add(tf.keras.layers.Dense(units=128,activation='relu'))
cnn.add(tf.keras.layers.Dense(8,activation='softmax'))
#TRAINING THE CONVOLUTIONAL NEURAL NETWORK
#Compiling the CNN
cnn.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics['accuracy'])
#Training the CNN on the Training set and evaluating it on the Test set
cnn.fit(x=training_set,validation_data=test_set,epochs=15)
#SAVING THE MODEL
cnn.save('C:\PythonPrograms\Deep Learning Models\preprocessed_features_model.h5')
这是测试代码
#Load model
from keras.models import load_model
model = load_model('C:/PythonPrograms/Deep Learning Models/preprocessed_features_model.h5')
#Predict function
import os
import cv2
import numpy as np
import matplotlib.pyplot as plt
from keras.preprocessing import image
def predict_class(class_no):
directory = 'dataset_with_features/test/'
class_no = str(class_no)+'/'
path = os.path.join(directory,class_no)
predict_results = []
print("Class Number: {}".format(class_no[:len(class_no)-1]))
for filename in os.listdir(path):
test_image = image.load_img(
os.path.join(path,filename),
target_size=(64,64)
)
test_image = image.img_to_array(test_image)
test_image = np.expand_dims(test_image,axis=0)
result = model.predict(test_image)
result = result.reshape(8)
predict_results.append(result)
print(result)
return predict_results
def get_accuracy(predict_results,class_no):
right = 0
wrong = 0
for result in predict_results:
if result[class_no] == 1:
right+=1
else:
wrong+=1
accuracy = right/(right+wrong)
return accuracy
results = []
accuracy_list = []
for i in range(8):
result = predict_class(i)
results.append(result)
accuracy = get_accuracy(results[i],i)
accuracy_list.append(accuracy)
print("The accuracy for class {} is: ".format(i),accuracy)
ave_accuracy = sum(accuracy_list)/len(accuracy_list)
print("Total accuracy: ",ave_accuracy)
据我了解,这可能是过拟合的原因。 但是没有意义的是,精度差异如何那么遥远? 从99.9%变为实际一致的0%。 就像在测试模型时完全避免正确的预测一样。 任何帮助,将不胜感激!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.