使用TensorFlow实现自己的深度学习库系列
背景
目的:设计轻量级深度学习库,使用TensorFlow作为计算引擎,对其进行高层次封装,搭建一个自己的深度学习API,方便在工程实践中快速实现深度学习模型。
Keras在2015年3月首次推出,作为一个对Theano的封装库,它为工程师和研究人员构建自己的深度学习模型提供了极大的便利。随着深度学习领域的高速发展,在2015年11月谷歌大脑团队推出了深度学习框架TensorFlow1.0,TensorFlow1.0作为深度学习框架中声明式编程的代表,其使用难度较高;计算图(Graph),张量(Tenson),上下文环境(Session),占位符(Placeholder)一个个新的概念增加了用户的上手难度,因为TensorFlow的受欢迎度很高,Keras也将TensorFlow封装进后端,并将其作为了默认后端。2019年6月TensorFlow2.0发布时,TensorFlow宣布Keras成为TensorFlow的官方高级API。
然而,像Keras这样大粒度API的高级封装,使得用户丢失了自己在调试时的细微操作,同时也带来了性能的降低。
因此我们的目的是设计一个非常轻量的深度学习库,既能保证大量的底层细节,同时也能高效运行。
设计目标
根据深度学习模型构建特征,和部署需求,制定目标如下: 1. 通过基类构建深度学习模型。 2. 提供丰富的神经网络层。 3. 提供可定制化神经网络层范例。 4. 神经网络层具备自动推断上一层输入功能。 5. 保存训练参数。 6. 开发模型构建范例。 7. 保存模型拓扑结构。
以上目标在目前深度学习框架中对应关系如下: 1. 具备PyTorch中Module类功能/MindSpore中Cell类功能。 2. 具备大量神经层例如Conv2d, MaxPool2d, Dropout, BatchNorm2d。 3. 具备读取ONNX模型和保存为ONNX模型结构
欢迎访问我的个人博客,此系列文章在博客中第一时间连载。
我的GitHub
|