Вот ссылка на [исходный код класса Sera Keras] [1].
Я создал точно такой же объект, выполнив следующие действия:
- копирование и вставка одних и тех же методов
__init__
, __getitem__
и __len__
из класса InfiniteGenerator
в класс KGen
.
- копирование метода iter из исходного кода класса
Sequence
класса InfiniteGenerator
.
Моя гипотеза состоит в том, что оба этих генератора должны создать конечный список, но объект Sequence
будет повторяться вечно. Почему?
class InfiniteGenerator(object):
def __init__(self, alist):
self.alist = alist
def __getitem__(self, idx):
return self.alist[idx]
def __len__(self):
return len(self.alist)
def __iter__(self):
for item in (self[i] for i in range(len(self))):
yield item
from keras.utils import Sequence
class KGen(Sequence):
def __init__(self, alist):
self.alist = alist
def __getitem__(self, idx):
return self.alist[idx]
def __len__(self):
return len(self.alist)
if __name__ == '__main__':
ig = InfiniteGenerator(list(range(4)))
for item in ig:
print(item)
print('now trying second iterator')
import time
time.sleep(1)
kg = KGen(list(range(4)))
for item in kg:
print(item)