大家好~我开设了“深度学习基础班”的线上课程,带领同学从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