Tensorflow 在keras中安装发电机:指定的批次尺寸在哪里?

Tensorflow 在keras中安装发电机:指定的批次尺寸在哪里?,tensorflow,keras,Tensorflow,Keras,嗨,我不明白keras fit_发生器的文件 我希望我的困惑是理性的 有一个批量大小,还有批量培训的概念。使用model\u fit(),我将批量大小指定为128 对我来说,这意味着我的数据集一次将提供128个样本,从而大大减少了内存。只要我有时间等待,它应该允许训练1亿个样本数据集。毕竟,keras一次只能“处理”128个样本。对吧? 但我高度怀疑,仅仅指定批量大小并不能满足我的要求。大量内存仍在使用中。为了实现我的目标,我需要分批训练,每个训练128个例子 所以我猜这就是fit\u gene

嗨,我不明白keras fit_发生器的文件

我希望我的困惑是理性的

有一个批量大小,还有批量培训的概念。使用
model\u fit()
,我将
批量大小指定为128

对我来说,这意味着我的数据集一次将提供128个样本,从而大大减少了内存。只要我有时间等待,它应该允许训练1亿个样本数据集。毕竟,keras一次只能“处理”128个样本。对吧?

但我高度怀疑,仅仅指定
批量大小
并不能满足我的要求。大量内存仍在使用中。为了实现我的目标,我需要分批训练,每个训练128个例子

所以我猜这就是
fit\u generator
的作用。我真的想问一下,为什么批量大小不能像它的名字所暗示的那样工作

更重要的是,如果需要
fit_generator
,我在哪里指定
batch_size
?医生说要无限循环。
生成器每行循环一次。我如何一次循环128个样本,并记住上次停止的位置,下次keras要求提供下一批的起始行号(第一批完成后将是第129行)时回忆它

首先,keras批量大小确实非常有效。如果你在GPU上工作,你应该知道这个模型可能会有很多keras,特别是如果你使用的是循环单元。如果您使用的是CPU,那么整个程序都加载到内存中,批处理大小不会对内存产生太大影响。如果您使用的是
fit()
,则整个数据集可能会加载到内存中,keras会在每一步生成批。很难预测将要使用的内存量

至于
fit_generator()
方法,您应该构建一个python生成器函数(使用
yield
而不是
return
),每一步生成一批。
yield
应该在一个无限循环中(我们经常使用
,而true:
…)


你有一些代码来说明你的问题吗

您需要在生成器内部以某种方式处理批大小。以下是生成随机批次的示例:

import numpy as np
data = np.arange(100)
data_lab = data%2
wholeData = np.array([data, data_lab])
wholeData = wholeData.T

def data_generator(all_data, batch_size = 20):

    while True:        

        idx = np.random.randint(len(all_data), size=batch_size)

        # Assuming the last column contains labels
        batch_x = all_data[idx, :-1]
        batch_y = all_data[idx, -1]

        # Return a tuple of (Xs,Ys) to feed the model
        yield(batch_x, batch_y)

print([x for x in data_generator(wholeData)])