【问题标题】:Why does an instance of the keras Sequence iterate forever?为什么 keras 序列的实例会永远迭代?
【发布时间】:2019-02-15 10:47:03
【问题描述】:

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

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

  1. __init____getitem____len__ 方法从InfiniteGenerator 类复制并粘贴到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)

【问题讨论】:

  • 我运行这段代码时停止了一次。
  • 很奇怪。代码中没有错误。我只是通过将此代码粘贴到 ipython REPL 中进行了仔细检查,然后我在第二个迭代器上得到了无限循环。我正在使用我在我的 macbook 上安装了 anaconda 的 python3。我在 Ubuntu 14 上得到了相同的结果。
  • 你有没有想过这个问题?我遇到了同样的问题。 idx 重置,但它只是继续运行...
  • 您知道您使用的是什么版本的 Keras 吗?我意识到,在 2.2.3 之前,他们实际上使用了无限生成器。更改也是最近才进行的,所以我认为这很可能是问题所在。 github.com/keras-team/keras/commit/…
  • 不幸的是,我不确定,但是我 pip 升级了 keras 和 tensorflow,现在当我运行上面的脚本时,它不会像以前那样无限循环。

标签: python keras generator


【解决方案1】:

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

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

【讨论】:

  • 你能链接到那个代码吗?如果你不这样做也没关系。我更新了 keras,现在我的程序运行良好,但如果它对你来说很容易,我很好奇。
  • The Code。第 396-405 行。我没有查看他们是否在当前版本中对其进行了修改。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2022-11-26
  • 2016-08-05
相关资源
最近更新 更多