Как импортировать изображения из папки и установить часть из них в качестве тестовых данных, а часть-в качестве обучающих данных?

#python #tensorflow #keras

Вопрос:

Я пытаюсь импортировать все 60 000 изображений (50 000 для обучения и 10 000 для тестирования) в каталог (местоположение каталога известно) в Python для классификации изображений с использованием TensorFlow. Я хочу импортировать все изображения и позволить им

path = /home/user/mydirectory

Я пробую код:

 import numpy as np                                               
import keras                                                     
from keras.models import Sequential                              
from keras.layers import Dense, Dropout, Activation, Flatten     
from keras.layers import Conv2D, MaxPooling2D                    
from keras.preprocessing.image import ImageDataGenerator         
import matplotlib.pyplot as plt                                  
from keras.utils import np_utils          

from PIL import Image
import glob
image_list = []
for filename in glob.glob(r'/home/user/mydirectory*.gif'): #assuming gif
    im=Image.open(filename)
    image_list.append(im)
(x_train, y_train)=image_list()
(x_test, y_test)=image_list()
 

Однако ошибка есть TypeError: 'list' object is not callable

Ответ №1:

Тебе следовало бы

 ... = image_list
 

в последних 2 строках выше вместо

 ... = image_list()
 

поскольку это список, а не вызываемая функция.

Ответ №2:

Вы вызываете список image_list() в последней и предпоследней строке. Вы пытаетесь разделить на поезд и ярлык, но у вас нет добавленной категории image_list .

Вы можете создать папку с именем категории; например, предположим, что у вас есть два класса, собака и кошка, затем вы можете создать каталог обучения, например:

 home/usr/mydirectory/train/cat
home/usr/mydirectory/train/dog
 

и используйте Генератор данных изображений:

 train_datagen = ImageDataGenerator(rescale = 1./255,
                               shear_range = 0.2,
                               zoom_range = 0.2,
                               horizontal_flip = True)
training_set =train_datagen.flow_from_directory(  
                                            'home/usr/mydirectory/train/',
                                             target_size = (64, 64),
                                             batch_size = 32,
                                             class_mode = 'binary')
 

Аналогично, для тестовых данных вы можете создать каталог с тестовыми изображениями и хранить изображения с категорией в качестве имени папки.

Комментарии:

1. Спасибо! Как насчет того, чтобы у меня было 10 занятий, а не 2?

2. вы можете создать 10 различных каталогов или создать CSV-файл, в котором первый столбец содержит имя изображения, а второй столбец содержит метку

3. Можете ли вы написать код о том, как создать CSV-файл? Спасибо!

4. Но для набора обучающих данных. Я не знал этикетки для каждого изображения. Как их обозначить?

5. Без ярлыка, как вы будете обучать свой классификатор? Что вы хотите классифицировать?

Ответ №3:

В вашем коде вы пытаетесь вызвать список как функцию, которая выдает ошибку. Я думаю, что приведенный ниже код может помочь вам получить два подмножества для ваших данных.

 import numpy as np
import random                                        
import keras                                                     
from keras.models import Sequential                              
from keras.layers import Dense, Dropout, Activation, Flatten     
from keras.layers import Conv2D, MaxPooling2D                    
from keras.preprocessing.image import ImageDataGenerator         
import matplotlib.pyplot as plt                                  
from keras.utils import np_utils          

from PIL import Image
import glob
image_list = []
for filename in glob.glob(r'/home/user/mydirectory*.gif'): #assuming gif
    im=Image.open(filename)
    image_list.append(im)

random.shuffle(image_list) # This line now has shuffled your list(inplace operation)
n = len(image_list)
train_data_len = int(n*0.83) # Roughly 50k images
train_data = images_list[:train_data_len] # getting images upto 50k index
test_data = images[train_data_len:] # getting rest of the images
 

Существуют и другие способы обработки данных. Для начала я нашел это легким делом.

Комментарии:

1. Как насчет того, чтобы у меня было два разных каталога? Один предназначен для обучения, а другой-для тестирования?

2. Вот ошибка, основанная на вашем коде: NameError: name 'random' is not defined