首页 > 解决方案 > 它在 Keras 中显示错误,Classifier.Fit_Generator

问题描述

# 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" 行中出现错误。这类似于“整数除法或零模”

它只在第一个时代给出错误

找到属于 0 个类别的 0 个图像。纪元 1/5

即使在为图像提供了正确的路径之后

标签: pythontensorflowmachine-learningkerasdeep-learning

解决方案


为了使用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可以这样做。

您可以将 flow_from_directory 中的 batch_size 的值从默认值(即 batch_size=32)更改为 batch_size=1。然后将 predict_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)

推荐阅读