对训练、测试数据划分batch是避免内存、显存溢出的最有效的方法!
核心含义:原来训练单位是epoch,即一次性放入所有训练集到内存中,让模型对所有训练数据(比如10000张256 x 256 x 3图片)进行“同时并行”计算!当数据集很多时非常容易内存、显存溢出。而对每个epoch又划分不同的批次,就使得每次送入的是一个batch的所有图片(比如32张256 x 256 x 3图片)让模型进行“同时并行”计算 —— 所有batch训练完毕,才是一个epoch训练完毕!
关键理解:不管是按epoch还是batch,送入模型中的数据都是被“同时并行”计算的!而不是一批数据送入后,模型先看一张图,训练修改一下参数,然后模型用新的参数再看下一张图,依次完成所有送入图片的训练。—— 即:训练同一批次数据的模型,是完全一样的,因为是并行同时完成的!—— 损失函数也是所有送入数据计算得到的损失的和!
注意:划分batch时,batch_size不能太小(一般8以上就可以了),因此一张一张送首先执行速度会变慢,二是让模型多图一起看可以方便进行对比学习(因为loss是求和的)!












网友评论