【发布时间】:2019-09-28 11:00:45
【问题描述】:
我正在尝试创建一个自定义数据生成器,但不知道如何将yield 函数与__getitem__ 方法内的无限循环相结合。
编辑:回答后我意识到我使用的代码是Sequence,不需要yield 语句。
目前我使用return 语句返回多个图像:
class DataGenerator(tensorflow.keras.utils.Sequence):
def __init__(self, files, labels, batch_size=32, shuffle=True, random_state=42):
'Initialization'
self.files = files
self.labels = labels
self.batch_size = batch_size
self.shuffle = shuffle
self.random_state = random_state
self.on_epoch_end()
def __len__(self):
return int(np.floor(len(self.files) / self.batch_size))
def __getitem__(self, index):
# Generate indexes of the batch
indexes = self.indexes[index * self.batch_size:(index + 1) * self.batch_size]
files_batch = [self.files[k] for k in indexes]
y = [self.labels[k] for k in indexes]
# Generate data
x = self.__data_generation(files_batch)
return x, y
def on_epoch_end(self):
'Updates indexes after each epoch'
self.indexes = np.arange(len(self.files))
if self.shuffle == True:
np.random.seed(self.random_state)
np.random.shuffle(self.indexes)
def __data_generation(self, files):
imgs = []
for img_file in files:
img = cv2.imread(img_file, -1)
###############
# Augment image
###############
imgs.append(img)
return imgs
在这个article 中,我看到yield 用于无限循环。我不太明白这种语法。循环是如何逃脱的?
【问题讨论】:
标签: python tensorflow keras yield