gpt4 book ai didi

python - 为什么keras序列的一个实例会永远迭代?

转载 作者:行者123 更新时间:2023-12-05 07:30:28 27 4
gpt4 key购买 nike

这是 [keras Sequence 类的源代码][1] 的链接。

我通过执行以下操作创建了我认为完全相同的对象:

  1. InfiniteGenerator 类中的相同 __init____getitem____len__ 方法复制并粘贴到 KGen 类。
  2. Sequence 类的源代码中的 iter 方法复制到 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)

最佳答案

我在使用 tensorflow.keras 1.10 版时也遇到过这个问题。您可以在源代码中看到他们定义了 __iter__() 以返回一个无限生成器。我将以下函数添加到我的所有 Sequence 类中,以便为我需要的情况创建一个一次性迭代器。

def gen_iter(self):
for i in range(len(self)):
yield self[i]

关于python - 为什么keras序列的一个实例会永远迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52267297/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com