上节课学习了矩阵乘积和正向传递,反向传递的基本原理;本节课重点讲解一种loss function - 交叉熵,还原了Fit的过程,讲解了optimizer callback。
1
简介
如何研究论文:Kaiming init 论文解读
training loop - loss func :cross-entropy
重构
nn.Parameter
nn.Module
nn.optim
Dataset
DateLoader
Fastai核心模块
callbacks
DataBunch
Learner
2
如何做研究
上节课在模拟源代码的时候遇到2个问题:一个是对weight进行标准化时遇到的一个默认值,没有任何说明,效果也比较差;另一个是处理Linear层时,得到的数据是转置过的,那为什么要转置呢?
2.1
问题1
得到Pytorch官方回复,是个历史遗留问题,已经创建issue去优化init配置了
2.2
问题2
也是得到了官方的回复,这里告诉我们不要盲目的相信,要深入进去并且提出问题
3
mini-batch training
3.1
Loss Function Cross-entropy 交叉熵
基本概念:
EXP:e的n次方,可以把值都变成正数,而且越大的数越大,这里有篇很好的帮助理解自然数e的文章 https://www.zhihu.com/question/20296247softmax:类似于求市场份额,可以把一堆正数转化到0-1entropy:描述的是一种不确定性
Cross-entropy:这里有个比较好的解释 https://www.zhihu.com/question/65288314/answer/244557337
从头开始写这个公式:
把除法简化一下
把log里的求和变得更高效最后用one-hot code的方式,在pred中取到正确结果对应的预测值,取个均值就是loss了
用pytorch自带的函数实现就是这样的
3.2
基础training loop流程
4
重构
nn.Parameter
nn.Module
nn.optim
Dataset
DateLoader
4.1
nn.Parameter
取代的是这一段
定义在这里
4.2
nn.Module
nn.Module.add_module
nn.ModuleList
nn.Sequential
4.3
optim
原始版
pytorch版
4.4
Dataset
4.5
DataLoader
yield就是用的时候再执行有了DataLoader,就可以写的更简单了
4.6
Random Sampling
为了让每个batch可以随机抽取,同时对应的y可以匹配上
4.7
Pytorch DataLoader
效果和上面的一样
5
加上验证组
fit的过程除了训练,还有一个计算accuracy的过程,就是跑validset的数据,这时候就不会计算梯度,不会batchnorm,dropout等这一堆训练时才会做的操作
这里vaild_ds的bs2倍因为没有backward,所以有2倍的内容可以使用
6
Fastai核心模块
DataBunch
Learner
初步认识Callbacks
有了callbacks可以很容易的实现如下前沿的技术
6.1
DataBunch
6.2
Learner
有了learner,一切都可以用这样的方式调用
6.3
Callbacks
Callback是用来根据状态函数去做一些事情,可以让fit函数看起来特别清晰易懂Callbackhandler是用来管理多个Callback的,还可以给他们排优先级
6.4
Runner
把learner配置好了之后,通过runner设定该如何训练,如何调用那些callback,最常见的就是runner.fit(1,learn)
1.Metrics Callback:fit过程中统计metrics指标,并且还设置成了runner的属性run.avg_stats.valid_stats.avg_stats
2.Recorder Callback:记录每个batch的loss和计划好的lr
3.ParamScheduler Callback:部署这些计划好的超参数,如lr
常见的3中callbacks
给不同的param groups设定不同的lr
下节课会讲解如何用卷积神经网络训练模型。
相关阅读
产品经理也能动手实践的AI (一)|(二)|(三)|(四)|(五)|(六)|(七)|(八)
如果你喜欢思考,又喜欢学点新东西,别忘记关注+置顶公众号哦!
我是Hawk,8年产品经理,目前专注AI机器学习。