【问题标题】:Is it possible to prevent a stop iteration when using a generator with keras tuner in python?在 python 中使用带有 keras 调谐器的生成器时是否可以防止停止迭代?
【发布时间】:2023-02-06 19:20:38
【问题描述】:

我在使用 Keras 的随机搜索调谐器时遇到了一些麻烦。默认情况下,您可以只实现 x train 和 y train,但是由于我的数据的性质,我必须先遍历列表,然后一个一个地给调谐器一个文件。当我构建 CNN 时,这不是问题,因为我只需要检查一次数据。但是,由于随机搜索在 n 次试验中迭代地尝试找到最佳解决方案,因此在这种情况下它不能这样做,因为我总是通过使用生成器来停止迭代。这是下面的代码。

tuner = RandomSearch(build_model,
                     objective="accuracy",
                     overwrite=True,
                     #project_name="AC1",
                     max_trials = 5,
                     executions_per_trial=5
                    )

def generate_arrays_from_file(x_train, y_train):
    for x, y in zip(x_train, y_train):
        yield (x, y)
                
tuner.search(generate_arrays_from_file(X_train, Y_train), verbose=0)

作为参考,数据的形状是 (388, 96, 36, 36, 36)。在这种情况下,我的问题是我正在超调的模型一次需要 1 个形状文件(96、36、36、36)作为 3D CNN。基本上,我有 388 个数据点,在每个数据点中有 96 个带有相应标签(0 或 1)的立方体数组。在这种情况下,我的问题是,有没有办法防止停止迭代的发生,或者我可以采取不同的方法吗?

我没有尝试解包数据点(将 388、96 更改为仅 37248),因此也需要考虑这一点。

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    我不使用 Keras,也不知道这在您的确切用例中是否有意义,但您可以通过每次用完 zip 时返回到 zip 的开头来无限期地屈服:

    def generate_arrays_from_file(x_train, y_train):
        while True:  # or for _ in range(388):
            for x, y in zip(x_train, y_train):
                yield (x, y)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2021-04-01
      • 2015-02-10
      • 1970-01-01
      相关资源
      最近更新 更多