Keras中fit_generator的下一个纪元的起点

时间:2018-12-14 01:44:32

标签: machine-learning keras generator

在Keras文档中,steps_per_epoch中的fit_generator表示:

  

在声明一个纪元完成并开始下一个纪元之前,发生器产生的总步数(一批样品)。

我想知道我是否有一个无限生成器,那么进入下一个纪元时该从哪里开始呢?我会接我离开的地方吗?还是我要从第一个样本重新开始?

1 个答案:

答案 0 :(得分:0)

这取决于生成器的定义。实际上,如果您有一个无限量生成的生成器,则必须确保已定义该生成器,以便在遍历所有样本(即一个时期)之后,它可以返回到起点(即,我们不再生成更多样本)一次)。例如,这样的生成器的草图如下:

def my_gen(x_train, y_train, batch_size):
    n_samples = x_train.shape[0]
    n_steps = np.ceil(n_samples // batch_size)
    while True:
        # one epoch: goes over all the samples
        for i in range(n_steps):
            # the last batch might have less than batch_size samples
            if (i+1) * batch_size > n_samples:
                x = x_train[i * batch_size:]
                y = y_train[i * batch_size:]
            else:  
                x = x_train[i * batch_size : (i+1) * batch_size]
                y = y_train[i * batch_size : (i+1) * batch_size]
            yield x, y