#python #keras #generator #yield
Вопрос:
Я пытаюсь понять, как imagedatagenerator получает изображения из каталога и передает их на обучение. например.
import os
import numpy
import cv2
class image_gen():
def __init__(self, sdir, batch_size, shuffle):
self.batch_index=0
self.sdir=sdir # directory containing input images
self.batch_size=batch_size #batch size is number of samples in a batch
# tuple (width, height) for target image
self.shuffle=shuffle # set to True to shuffle images, False for no shuffle
# initialize list to hold sequential list of total labels generated
self.image_list=[] # initialize list to hold sequential list of total images filenames generated
self.s_list=os.listdir(self.sdir) # list of images in directory
def get_images(self): # gets a batch of input images, resizes input image to make target images
input_image_batch=[] # initialize list to hold a batch of target images
# initialize list to hold batches of input images
sample_count=len(self.s_list) # determine total number of images available
for i in range(self.batch_index * self.batch_size, (self.batch_index 1) * self.batch_size ): #iterate for a batch
j=i % sample_count # cycle j value over range of available images
k=j % self.batch_size # cycle k value over batch size
if self.shuffle: # if shuffle select a random integer between 0 and sample_count-1 to pick as the image=label pair
m=np.random.randint(low=0, high=sample_count-1, size=None, dtype=int)
else:
m=j # no shuffle
path_to_img=os.path.join(self.sdir, self.s_list[m]) # define the path to the m th image
input_image=cv2.imread(path_to_img)
#create the target image from the input image
input_image_batch.append(input_image)
input_image_array=numpy.array((input_image_batch), dtype = "object")
self.batch_index=self.batch_index 1
yield (input_image_array)
Так я это называю
batch_size=5
sdir=r"D:\Input" # set this to your image directory
shuffle=True
gen=image_gen(sdir, batch_size,shuffle) # instantiate an instance of the class
input_images=next(gen.get_images()) # get a batch of inputs
Тренируя его
model.fit(input_images,output_images,validation_data = (X_val,y_val),batch_size= 5,epochs = 100)
Каждый раз,когда я вызываю функцию, она выдает мне пакет (который я выбираю, здесь его 5) изображений. Теперь я пытаюсь понять, что такое модель воли.следует продолжать вызывать функцию, чтобы получить следующую партию изображений, или я должен передать цикл в функции, чтобы продолжать получать изображения из каталога. Если я сделаю цикл while в функции, это не приведет к перегрузке памяти, потому что там будут все файлы из каталога.Или, проще говоря, работает ли приведенный выше код как генератор изображений данных