深度学习基础课:重构并加入调试日志和测试代码
大家好~我开设了“深度学习基础班”的线上课程,带领同学从0开始学习全连接和卷积神经网络,进行数学推导,并且实现可以运行的Demo程序
线上课程资料:
加QQ群,获得ppt等资料,与群主交流讨论:106047770
本系列文章为线上课程的复盘,每上完一节课就会同步发布对应的文章
本课程系列文章可进入索引查看:
为什么要学习本课
- 为什么要重构代码?
答:方便加入各种不同类型的层到神经网络中
重构代码
-
为了简单,本节课只考虑全连接层
-
重构的关键是定义每层的forward等函数的输入、输出为统一的抽象类型
-
通过泛型来实现类型重载,如支持全连接层和卷积层的forward函数的input参数为不同的类型(前者为Vector.t,后者为Matrix.t)
-
重构后的“构建神经网络”的伪代码如下所示:
let networkState = let Network.build(
[
LinearLayer.create(layerData1),
LinearLayer.create(layerData2)
]
)
加入调试日志
- 为什么要加入调试日志?
答:目前使用DebugUtils来在运行时检查一些值是否有异常。但是这样这不够全面,所以加入调试日志来打印训练的每轮中的每层的输入和输出,从而方便排查
加入BDD测试
对隐藏层和输出层进行了BDD测试(行为驱动测试)
相关的代码为:test
代码实现
- 重构后的入口代码为:Main