Ошибка типа: listdir: путь должен быть строкой, байтами, os.PathLike или None, а не DirectoryIterator - PullRequest
1 голос
/ 22 апреля 2020

я новичок в машинном обучении и в настоящее время пытаюсь применить VGG net для моей нейронной сети

Я сталкиваюсь с такого рода ошибкой, которая

listdir: путь должен быть строкой , bytes, os.PathLike или None, не ImageDataGenerator

В настоящее время я использую блокнот Jupyter в качестве редактора, и вот мой код, с которым я столкнулся. Ошибка

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)

это ошибка, произошедшая

Найдено 714 изображений, относящихся к 10 классам. Найдено 100 изображений, принадлежащих

к 10 классам. -------------------------------------------------- ------------------------- TypeError Traceback (последний вызов был последним) в 36 функциях возврата, метки 37 ---> 38 train_features, train_labels = extract_features (train_set, train_size) # Согласен с нашим небольшим размером набора данных (img_width, img_height), 25 batch_size = batch_size, ---> 26 class_mode = 'категорический') 27 # Пропускать данные через сверточную базу 28 i = 0

~ \ Anaconda3 \ envs \ensorflow_cpu \ lib \ site -packages \ keras_preprocessing \ image \ image_data_generator.py в flow_from_directory (self, directory, target_size, color_mode, классы, class_mode, batch_size, shuffle, seed, save_to_dir, save_prefix, save_format, follow_links, подмножество 53_последовательности, подмножество 53 переходов, подмножество 53 ссылок, подмножество, подстановка 53, интерполяция 53) = подмножество, -> 540 интерполяция = интерполяция 541) 542

~ \ Anaconda3 \ envs \ tenorflow_cpu \ lib \ site-packages \ keras_preprocessing \ image \ directory_iterator.py в init (self, directory, image_data_generator, target_size, color_mode, классы, class_mode, batch_size, shuffle, seed, data_format, save_to_dir, save_prefix, save_format, follow_links, подмножество, интерполяция, dtype) 104, если не классы: 105 classes = [] -> 106 для subdir в отсортированном (os.listdir (directory)): 107 if os.path.isdir (os.path.join (directory, subdir)): 108 classes.append (subdir)

TypeError: listdir: путь должен быть строкой, байтами, os .PathLike или None, не DirectoryIterator

1 Ответ

0 голосов
/ 22 апреля 2020

вы передаете генератор данных другому генератору данных, в этой строке:

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

первый аргумент, каталог, должен быть каталогом, а не генератором данных, это должно быть что-то вроде: 'путь / to / my / train_set / '. Я полагаю, что это просто «тренировка» в вашем случае, поскольку они находятся в той же папке, что и ваш блокнот.

...