CNN не работает хорошо на случайном изображении, несмотря на очень хорошую точность в обучении и тестировании - PullRequest
1 голос
/ 10 февраля 2020
enter code here
from tensorflow import keras


classifier = keras.Sequential()

classifier.add(keras.layers.Convolution2D(16,kernel_size=(3,3),input_shape = (64,64,3),activation = 
'relu'))

classifier.add(keras.layers.MaxPooling2D(pool_size = (2, 2)))

classifier.add(keras.layers.Convolution2D(32,kernel_size=(3, 3),activation = 'relu'))
classifier.add(keras.layers.MaxPooling2D(pool_size = (2, 2)))
#classifier.add(keras.layers.BatchNormalization())
classifier.add(keras.layers.Convolution2D(64,kernel_size=(3, 3),activation = 'relu'))
classifier.add(keras.layers.MaxPooling2D(pool_size = (2, 2)))
classifier.add(keras.layers.Dropout(0.2))
classifier.add(keras.layers.Flatten())
classifier.add(keras.layers.Dense(128, activation = 'relu'))
classifier.add(keras.layers.Dense( 1, activation = 'sigmoid'))

# Compiling the CNN
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])

# Part 2 - Fitting the CNN to the images
from keras_preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip = True)

test_datagen = ImageDataGenerator(rescale = 1./255)

training_set = train_datagen.flow_from_directory(r'C:\Users\KIIT\Desktop\Deep Learning\dataset2\Training_set',
                                                 target_size = (64, 64),
                                                 batch_size = 8,
                                                 class_mode = 'binary')

test_set = test_datagen.flow_from_directory(r'C:\Users\KIIT\Desktop\Deep Learning\dataset2\Test_set',
                                            target_size = (64, 64),
                                            batch_size = 8,
                                            class_mode = 'binary')

classifier.fit_generator(training_set,
                         steps_per_epoch =2140,
                         epochs = 30,
                         validation_data = test_set,
                         validation_steps = 90)

import numpy as np
from keras_preprocessing import image
test_image=image.load_img(r'D:\IDM DOWNLOADS\Data Set A-Z DL\Convolutional_Neural_Networks\dataset\single_prediction\shifaface6.jpg',target_size=(64,64))
test_image=image.array_to_img(test_image)
test_image=np.expand_dims(test_image,axis=0)
result=classifier.predict(test_image)
training_set.class_indices
if result[0][0]==1:
    prediction='Shifa'
else:
    prediction='Rishav'

После обучения и тестирования я получаю точность, близкую к 100% как в тесте, так и в наборе поездов, но когда я даю изображение Шифа, оно все равно классифицирует его как Rishav, а изображение Rishav классифицируется как Rishav. Мой набор данных содержит 1070 изображения для каждого класса для обучения и 45 изображений для тестирования в каждом классе.

1 Ответ

0 голосов
/ 10 февраля 2020

Не забудьте изменить масштаб пиксельного диапазона вашего нового изображения, разделив его на 255

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...