Это показывает ошибку в Keras, Classifier.Fit_Generator - PullRequest
0 голосов
/ 12 марта 2019
# Convolutional Neural Network
# Installing Theano
# pip install --upgrade --no-deps git+git://github.com/Theano/Theano.git
# Installing Tensorflow
# pip install tensorflow
# Installing Keras
# pip install --upgrade keras
# Part 1 - Building the CNN
# Importing the Keras libraries and packages

    from keras.models import Sequential
    from keras.layers import Conv2D
    from keras.layers import MaxPooling2D
    from keras.layers import Flatten
    from keras.layers import Dense

# Initialising the CNN

    classifier = Sequential()

# Step 1 - Convolution

    classifier.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))

# Step 2 - Pooling

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

# Adding a second convolutional layer

    classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
    classifier.add(MaxPooling2D(pool_size = (2, 2)))

# Step 3 - Flattening

    classifier.add(Flatten())

# Step 4 - Full connection

    classifier.add(Dense(units = 128, activation = 'relu'))
    classifier.add(Dense(units = 3, activation = 'softmax'))

# 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('E:\Major Project\Data\Wheat',target_size = (64, 64),batch_size = 32,class_mode = 'categorical')
    test_set = test_datagen.flow_from_directory('E:\Major Project\Data\Wheat1',target_size = (64, 64),batch_size = 32,class_mode = 'categorical')
    classifier.fit_generator(training_set,steps_per_epoch = 100,epochs = 5,validation_data = test_set,validation_steps = 200)

, когда я пытаюсь запустить этот код, появляется сообщение об ошибке в строке classifier.fit_generator "ZeroDivisionError".что-то вроде "Integer Division или Modulo by Zero"

Выдает ошибку только в первую эпоху

Найдено 0 изображений, принадлежащих 0 классам.Эпоха 1/5

Даже после указания правильного пути для изображения

1 Ответ

0 голосов
/ 12 марта 2019

Для использования flow_from_directory. У вас должна быть следующая структура папок.

./Dataset/
    ./Train/
        ../Folder_1/
            ../img_1.jpg
            ../img_2.jpg
            ............
        ../Folder_2/
            ../img_1.jpg
            ../img_2.jpg

Где Folder_i содержит изображения класса I.

На вашем пути E:\Major Project\Data у вас должно быть n папок, каждая из которых соответствует каждому классу.

Тогда вы можете позвонить flow_from_directory как

train_datagen.flow_from_directory('E:\Major Project\Data\',target_size = (64, 64),batch_size = 32,class_mode = 'categorical')

Вы получите такой вывод

Found xxxx images belonging to yyyy classes

и, если все остальное правильно, модель начнет тренироваться

После обучения, если вы хотите использовать flow_from_directory для прогнозирования с помощью predict_generator, вы можете сделать это следующим образом.

Вы можете изменить значение batch_size в flow_from_directory со значения по умолчанию (которое batch_size = 32) на batch_size = 1. Затем задайте шаги дляgnast_generator для общего количества ваших тестовых изображений.

test_datagen = ImageDataGenerator(rescale=1./255)

test_generator = test_datagen.flow_from_directory(
        test_dir,
        target_size=(200, 200),
        color_mode="rgb",
        shuffle = False,
        class_mode='categorical',
        batch_size=1)

filenames = test_generator.filenames
nb_samples = len(filenames)

predict = model.predict_generator(test_generator,steps = nb_samples)

Если вы хотите сделать прогноз на одном изображении.

import cv2
import numpy as np

img = cv2.imread('path_to_file')
img = cv2.resize(img, (64, 64))

img = img.reshape(1, 64, 64, 3)

model.predict(img)
...