Python 如何编写迭代整个数据集的批处理生成器

Python 如何编写迭代整个数据集的批处理生成器,python,machine-learning,keras,data-generation,Python,Machine Learning,Keras,Data Generation,我想创建一个用于培训目的的批处理生成器-不幸的是,我不知道如何创建它,以便生成器在完成批处理后进入下一个时间步骤。也就是说,如果批处理已经处理了say[01 2 3 4],那么它必须处理整个say[01 2…100]训练集中的下一个[5 6 7 8 9] 我还希望一个历元是整个批处理的一个过程,因此批处理生成器必须返回到训练集的开头 从keras.io中,我了解到,如果默认的epoch_steps=None,那么“等于数据集中的样本数除以批量大小,如果无法确定,则等于1” 如果你能使用tenso

我想创建一个用于培训目的的批处理生成器-不幸的是,我不知道如何创建它,以便生成器在完成批处理后进入下一个时间步骤。也就是说,如果批处理已经处理了say[01 2 3 4],那么它必须处理整个say[01 2…100]训练集中的下一个[5 6 7 8 9]

我还希望一个历元是整个批处理的一个过程,因此批处理生成器必须返回到训练集的开头

从keras.io中,我了解到,如果默认的epoch_steps=None,那么“等于数据集中的样本数除以批量大小,如果无法确定,则等于1”


如果你能使用tensorflow,并且做你所描述的


否则,看起来是相关的。

如果您可以使用tensorflow,并按照您所描述的进行操作


否则,看起来很相关。

我不熟悉tensorflow,也不理解第二个链接的代码。我的想法是将一个开始索引传递给批次分配,该分配在每次传递批次时都会更新(因此,基本上在生成器中,索引是按序列长度更新的,在按序列x批次大小进行批次预期索引更新之后),但我不知道如何进行。我不熟悉tensorflow,我不明白第二个链接的代码。我的想法是将一个开始索引传递给批次分配,该分配在每次传递批次时都会更新(因此,基本上,在通过序列x批次大小进行批次预期索引更新之后,生成器中的索引会更新一个序列长度),但我不知道如何更新。
def batch_generator(batch_size, sequence_length):
    """
    Generator function for creating batches of training-data.
    """

    # Infinite loop.""
    while True:
        # Allocate a new array for the batch of input-signals.
        x_shape = (batch_size, sequence_length, num_x_signals)
        x_batch = np.zeros(shape=x_shape, dtype=np.float16)

        # Allocate a new array for the batch of output-signals.
        y_shape = (batch_size, sequence_length, num_y_signals)
        y_batch = np.zeros(shape=y_shape, dtype=np.float16)

        # Fill the batch with random sequences of data.
        for i in range(batch_size):

            # Copy the sequences of data starting at this index.
            x_batch[i] = x_train_scaled[:sequence_length]
            y_batch[i] = y_train_scaled[:sequence_length]

        x_batch_1 = x_batch[ :, :, 0:5]
        x_batch_2 = x_batch[ :, :, 5:12]
        yield ([x_batch_1, x_batch_2], y_batch)

batch_size = 32
sequence_length = 24 * 7 

generator = batch_generator(batch_size=batch_size,
                            sequence_length=sequence_length)
%%time
model.fit_generator(generator=generator,
                    epochs=10,
                    steps_per_epoch=None,
                    validation_data=validation_data,
                    callbacks=callbacks)