python - 它在 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
即使在为图像提供了正确的路径之后
解决方案
为了使用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)
推荐阅读
- go - go.mod 中的模块名称别名
- python - 在 Jupyter 的 Markdown 中加载纯文本内联
- dictionary - 如何在prefix_之后添加任何符号?
- google-cloud-firestore - Firestore 规则:在已定义规则的空集合上获得权限被拒绝
- css - SVG 中的阴影不是多重的,并且在不同的背景上颜色不同
- flutter - 如何获取 DocumentSnapshot 以按文档 ID 查询
- python - 从 find_all_palindromes 函数创建一个longest_palindrome 函数
- c++ - OpenCV:使用 PGM 文件。为什么我生成的 PGM 文件有 3 个通道 (RGB)?
- or-tools - Google ORTools - 不能共享相同路由的节点
- python - 如果我只传递一个参数,为什么会得到 TypeError?