【问题标题】:TypeError: listdir: path should be string, bytes, os.PathLike or None, not DirectoryIteratorTypeError:listdir:路径应该是字符串、字节、os.PathLike 或 None,而不是 DirectoryIterator
【发布时间】:2020-08-05 17:09:08
【问题描述】:

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

我遇到了这种错误

listdir:路径应该是字符串、字节、os.PathLike 或 None,而不是 ImageDataGenerator

我目前使用 Jupyter notebook 作为编辑器,这是我遇到错误的代码

from tensorflow.keras.preprocessing.image import ImageDataGenerator
#Training Set
train_set = train_datagen.flow_from_directory('train')

#Training Set
valid_set = train_datagen.flow_from_directory('test')


train_size, validation_size, test_size = 200, 100, 100
img_width, img_height = 224, 224  # Default input size for VGG16

# Extract features
import os, shutil


datagen = ImageDataGenerator(rescale=1./255)
batch_size = 32

def extract_features(directory, sample_count):
    features = np.zeros(shape=(sample_count, 7, 7, 512))  # Must be equal to the output of the convolutional base
    labels = np.zeros(shape=(sample_count))
    # Preprocess data
    generator = datagen.flow_from_directory(directory,
                                            target_size=(img_width,img_height),
                                            batch_size = batch_size,
                                            class_mode='categorical')
    # Pass data through convolutional base
    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, labels

train_features, train_labels = extract_features(train_set, train_size)  # Agree with our small dataset size
validation_features, validation_labels = extract_features(validation_dir, validation_size)
test_features, test_labels = extract_features(test_dir, test_size)

这是发生的错误

找到属于 10 个类别的 714 张图片。找到 100 张属于的图片

到 10 个班级。 -------------------------------------------------- ------------------------- TypeError Traceback(最近一次调用 最后)在 36 个返回特征、标签 37 ---> 38 train_features, train_labels = extract_features(train_set, train_size) # 同意我们的小数据集大小 39 验证特征,验证标签 = 提取特征(验证目录,验证大小) 40 test_features, test_labels = extract_features(test_dir, test_size)

在 extract_features(目录, 样本计数) 24 目标尺寸=(img_width,img_height), 25 批次大小 = 批次大小, ---> 26 类模式='分类') 27 # 通过卷积基传递数据 28 i = 0

~\Anaconda3\envs\tensorflow_cpu\lib\site-packages\keras_preprocessing\image\image_data_generator.py 在 flow_from_directory(self, directory, target_size, color_mode, 类,class_mode,batch_size,随机播放,种子,save_to_dir, save_prefix、save_format、follow_links、子集、插值) 第538章 第539章 --> 540插值=插值 第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,类,class_mode,batch_size,洗牌,种子, data_format,save_to_dir,save_prefix,save_format,follow_links, 子集,插值,dtype) 104 如果不是类: 105 课 = [] --> 106 用于 sorted(os.listdir(directory)) 中的子目录: 107 如果 os.path.isdir(os.path.join(directory, subdir)): 108 类.append(子目录)

TypeError: listdir: path 应该是 string, bytes, os.PathLike or None, 不是 DirectoryIterator

【问题讨论】:

    标签: python machine-learning vgg-net conv-neural-network


    【解决方案1】:

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

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

    第一个参数,目录,应该是一个目录,而不是一个数据生成器,它应该是这样的:'path/to/my/train_set/'。我猜在你的情况下这只是“训练”,因为你把它们和你的笔记本放在同一个文件夹中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 2020-03-25
      相关资源
      最近更新 更多