model.fit()的steps_per_epoch是否覆盖Sequence的__len__()及训练样本量?
关于tf.keras.utils.Sequence与steps_per_epoch的疑问解答
- 当你在
model.fit()里显式传入steps_per_epoch参数时,确实会覆盖tf.keras.utils.Sequence中__len__()的返回值。Keras会优先使用你指定的steps_per_epoch来决定每个epoch要跑多少步,完全忽略Sequence的__len__()结果。 - 只要你把
steps_per_epoch设为x,不管__len__()返回什么数字,单个epoch内模型都会训练x * batch_size个样本(这里的batch_size是你在Sequence里定义的或fit中指定的)。需要注意的是,如果训练数据集总样本数小于x * batch_size,Keras会循环重复取数据来凑够步数,直到跑完x步为止。
举个实际例子:假设训练集有1000个样本,Sequence的__len__()返回20(对应batch_size=50),但你在model.fit()里把steps_per_epoch设为30,那每个epoch会跑30步,总共处理30*50=1500个样本——前1000个是原数据,后500个会重复取前面的数据。
内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire
相关产品推荐
相关产品推荐

