在上一节课中,我留了课后作业,让大家查找model.fit的参数,并通过修改训练步数来提升模型效果,大家修改了么,有没有发现问题?
model.fit的epochs,代表训练轮次,表明对全体数据训练多少遍,当前我们设置为500时,模型计算2020+4040的结果为
1.0146133250389469
[[6065.705]]
不够精确,把epochs提升到1000呢?
还是不行,1500呢?
0.29349346797355924
[[6057.4795]]
仍然不行
这是怎么回事,为啥提升训练步数,模型的效果不能提升呢?难道模型已经优化到极致了么?
当然不是,下面,见证奇迹的时候到了
把epochs改回500,batch_size改为10,计算结果为
[[6059.9795]]
比之前的都要好!
这是为什么呢?原因很简单,batch_size代表模型一次学习的数据量,当batch_size为1时,模型一次只能学习一个数据,得到的信息量有限,容易被单个数据带着走,无法正确更新。当batch_size设置为10时,模型一次学习10组数据,可以更全面的更新。
如果把batch_size设置为50,结算结果变为
[[6060.652]]
设置为100,计算结果变为
[[6060.0483]]
如果你实际运行了代码,不难发现,当batch_size变大时,代码运行时间变短了,这是为何?
因为模型的更新次数变少了,模型更新次数=数据量/batch_size*epochs
至此,你对batch_size和epchos的用途已经有了基本了解。那么,怎么设置epchos和batch_size才是最优呢?这个没有固定答案,需要依赖经验,反复调试才行,这也是AI开发者被称为调参党的一个原因。
课后作业
1 通过代码,找到epochs 和batchsize相对较好的组合