在Keras的文档中,fit_generator
中的steps_per_epoch
表示:
从生成器中产出样本批次的总步数,用于声明一个epoch结束并开始下一个epoch。
我想知道如果我有一个无限的生成器,那么当我进入下一个epoch时,我应该从哪里开始?我是继续上次的位置,还是从第一个样本重新开始?
回答:
这取决于你生成器的定义。实际上,如果你有一个无限产出批次的生成器,那么你必须确保它被定义为在遍历完所有样本(即一个epoch)后回到起始点(即在一个epoch中我们不会重复生成样本)。例如,这样的生成器的一个粗略草图如下:
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: # 一个epoch:遍历所有样本 for i in range(n_steps): # 最后一个批次可能少于batch_size个样本 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