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