TypeError: listdir: 路径应为字符串、字节、os.PathLike 或 None,而非 DirectoryIterator

我是一个机器学习的初学者,目前正在尝试将 VGG 网络应用于我的神经网络

我遇到了如下错误:

listdir: 路径应为字符串、字节、os.PathLike 或 None,而非 ImageDataGenerator

我目前使用 Jupyter 笔记本作为编辑器,以下是我遇到错误的代码:

from tensorflow.keras.preprocessing.image import ImageDataGenerator#训练集train_set = train_datagen.flow_from_directory('train')#验证集valid_set = train_datagen.flow_from_directory('test')train_size, validation_size, test_size = 200, 100, 100img_width, img_height = 224, 224  # VGG16的默认输入大小# 提取特征import os, shutildatagen = ImageDataGenerator(rescale=1./255)batch_size = 32def extract_features(directory, sample_count):    features = np.zeros(shape=(sample_count, 7, 7, 512))  # 必须等于卷积基础的输出    labels = np.zeros(shape=(sample_count))    # 预处理数据    generator = datagen.flow_from_directory(directory,                                            target_size=(img_width,img_height),                                            batch_size = batch_size,                                            class_mode='categorical')    # 通过卷积基础传递数据    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:            break    return features, labelstrain_features, train_labels = extract_features(train_set, train_size)  # 符合我们的小数据集大小validation_features, validation_labels = extract_features(validation_dir, validation_size)test_features, test_labels = extract_features(test_dir, test_size)

这是发生的错误:

发现 714 张属于 10 个类别的图像。发现 100 张属于 10 个类别的图像。 ————————————————————————— TypeError Traceback (most recent call last) in 36 return features, labels 37 —> 38 train_features, train_labels = extract_features(train_set, train_size) # 符合我们的小数据集大小 39 validation_features, validation_labels = extract_features(validation_dir, validation_size) 40 test_features, test_labels = extract_features(test_dir, test_size)

in extract_features(directory, sample_count) 24 target_size=(img_width,img_height), 25 batch_size = batch_size, —> 26 class_mode=’categorical’) 27 # 通过卷积基础传递数据 28 i = 0

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\keras_preprocessing\image\image_data_generator.py in flow_from_directory(self, directory, target_size, color_mode, classes, class_mode, batch_size, shuffle, seed, save_to_dir, save_prefix, save_format, follow_links, subset, interpolation) 538 follow_links=follow_links, 539 subset=subset, –> 540 interpolation=interpolation 541 ) 542

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\keras_preprocessing\image\directory_iterator.py in init(self, directory, image_data_generator, target_size, color_mode, classes, class_mode, batch_size, shuffle, seed, data_format, save_to_dir, save_prefix, save_format, follow_links, subset, interpolation, dtype) 104 if not classes: 105 classes = [] –> 106 for subdir in sorted(os.listdir(directory)): 107 if os.path.isdir(os.path.join(directory, subdir)): 108 classes.append(subdir)

TypeError: listdir: 路径应为字符串、字节、os.PathLike 或 None,而非 DirectoryIterator


回答:

您正在将一个数据生成器传递给另一个数据生成器,在这一行:

generator = datagen.flow_from_directory(directory,                                        target_size=(img_width,img_height),                                        batch_size = batch_size,                                        class_mode='categorical')

第一个参数,directory,应该是一个目录,而不是一个数据生成器,它应该是类似于这样的:’path/to/my/train_set/’。在您的案例中,我想应该是 ‘train’,因为您的目录和笔记本在同一个文件夹中。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注