使用ImageDataGenerator与flow_from_directory时出现ZeroDivisionError报错求助
求助:VGG16特征提取时出现ZeroDivisionError问题
我最近在跑一个基于VGG16的猫狗分类代码,目标是完成Kaggle猫狗大战的分类任务,结果遇到了一个ZeroDivisionError: integer division or modulo by zero的错误,试了几个相关解决方案都没搞定,来请教大家!
背景说明
- 代码参考的是预训练VGG16的示例实现
- 数据集来自Kaggle猫狗大战项目,我的数据目录结构为:
sample文件夹下包含test、train、validation三个子文件夹,其中validation文件夹存放的是从train集中拆分出来的图片
错误详情
错误发生在代码行features[i * batch_size : (i + 1) * batch_size] = features_batch处,具体报错为ZeroDivisionError: integer division or modulo by zero。我已经尝试过三个分别来自技术问答社区和框架仓库的解决方案,但问题依然存在。
相关代码
import keras keras.__version__ from keras.applications import VGG16 conv_base = VGG16(weights='imagenet', include_top=False, input_shape=(150, 150, 3)) conv_base.summary() import os import numpy as np from keras.preprocessing.image import ImageDataGenerator base_dir = 'C:\\Users\\K\\Documents\\Code\\sample' test_dir = os.path.join(base_dir, 'test') train_dir = os.path.join(base_dir, 'train') validation_dir = os.path.join(base_dir, 'validation') datagen = ImageDataGenerator(rescale=1./255) batch_size = 20 def extract_features(directory, sample_count): features = np.zeros(shape=(sample_count, 4, 4, 512)) labels = np.zeros(shape=(sample_count)) generator = datagen.flow_from_directory( directory, target_size=(150, 150), batch_size=batch_size, class_mode='binary' ) i = 0 for inputs_batch, labels_batch in generator: features_batch = conv_base.predict(inputs_batch) features[i * batch_size : (i + 1) * batch_size] = features_batch labels[i * batch_size : (i + 1) * batch_size] = labels_batch i += 1 if i * batch_size >= sample_count: # Note that since generators yield data indefinitely in a loop, # we must `break` after every image has been seen once. break return features, labels train_features, train_labels = extract_features(train_dir, 2000) validation_features, validation_labels = extract_features(validation_dir, 1000) test_features, test_labels = extract_features(test_dir, 1000)
内容的提问来源于stack exchange,提问作者Sade
相关产品推荐
相关产品推荐

