报错:Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs`

 

日萌社

人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)


    1.使用repeat() 解决如下报错:
        WARNING:tensorflow:Your input ran out of data; interrupting training. 
        Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` 
        batches (in this case, 414 batches). You may need to use the repeat() function 
        when building your dataset.
        警告:tensorflow:输入的数据用完;中断训练。请确保您的数据集或生成器至少可以生成
        “每个steps_per_epoch*epoch”批(在本例中为414 batches)。在构建数据集时,可能需要使用repeat()函数。
        
    2.解决:
		 方式一:
		        如果使用 model.fit(train_dataset, validation_data=test_dataset, steps_per_epoch=M, epochs=N),
		        即同时steps_per_epoch和epochs的话,则要求把训练集和验证集都拷贝N份(epochs份),
		        因为使用了steps_per_epoch之后,每次epoch的遍历是对不同份的训练集和验证集进行遍历,
		        不再是对同一份训练集和验证集进行遍历,因此一开始就要拷贝N份(epochs份)的源训练集和源验证集,
		        供以遍历epoch次。可以使用repeat(epochs)对数据集进行拷贝epochs份。
		 方式二: 
		        如果使用 model.fit(train_dataset, validation_data=test_dataset, epochs=N),
               只使用了epochs的话,那么每次epoch的遍历都是对同一份训练集和验证集进行遍历,便不需要把训练集和验证集都拷贝N份(epochs份),
               其中steps_per_epoch值不需要传入,即会在第一次epoch的遍历中自动计算steps_per_epoch值。
               
    3.例子:batch、repeat、steps_per_epoch、epochs的使用
            1.先用 batch(批次大小) 然后才用 repeat(重复次数),
              比如:repeat(2)重复数据集2次,即复制一份数据集,最终即有两份数据集。
            2.steps_per_epoch 即表示 一个epoch 里面遍历批量数据的次数,即遍历多少个批量数据完成一个epoch。
            3.应保证要输入到模型的数据集(包括训练集/验证集)的批量个数都均为steps_per_epoch*epoch。

            4.fit中没有定义steps_per_epoch,只定义了epochs的话,那么只会对同一份数据集进行遍历epochs次进行训练。
              如果fit中同时有传训练集和验证集validation_data进行训练/验证的话,那么均为对同一份训练集和验证集进行遍历epochs次进行训练/验证。
              打印的训练信息格式如下:当前步数step/总步数steps - ETA:剩余训练时间  - loss - accuracy
              
            5.fit中同时定义了steps_per_epoch和epochs的话,那么表示对数据集进行遍历epochs次进行训练,并且每个epoch中遍历steps_per_epoch个批量数据。
              但要注意的是此处所说的对数据集进行遍历epochs次指的不是对同一份数据集遍历epochs次,而是对epochs份数据集遍历epochs次,
              而每份数据集遍历1次,因此需要对原始数据集拷贝epochs份,才能每份数据集遍历1次,一共遍历epochs次进行训练。
              如果fit中同时有传训练集和验证集validation_data进行训练/验证的话,那么同时要把训练集和验证集validation_data都拷贝epochs份。
              可以使用repeat(epochs)对数据集进行拷贝epochs份。
              第一个epoch打印的训练信息格式如下:
                当前步数step/Unknown - ETA:剩余训练时间  - loss: - accuracy: 
              第一个epoch之后的每个epoch打印的训练信息格式如下:(因为经过第一个epoch之后底层就已经计算好每个epoch需要遍历多少个批量数据,即得出总步数steps) 
                当前步数step/总步数steps - ETA:剩余训练时间  - loss - accuracy
        
    4.使用顺序:from_tensor_slices -> map -> shuffle -> batch -> repeat -> prefetch

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

あずにゃん

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值