目录
• 第1部分 元编程基础技术
• 第1章 元编程基本方法
• 1.1 元函数与type traits
• 1.1.1 元函数简介
• 1.1.2 类型元函数
• 1.1.3 各式各样的元函数
• 1.1.4 type traits
• 1.2 元函数与宏
• 1.3 本书中元函数的命名方式
• 1.4 模板模板参数与容器模板
• 1.4.1 模板作为元函数的输入
• 1.4.2 模板作为元函数的输出
• 1.4.3 容器模板
• 1.5 从元函数到元对象
• 1.5.1 元对象与元数据域
• 1.5.2 元方法
• 1.6 奇特的递归模板式
• 1.7 小结
• 1.8 练习
• 第2章 元数据结构与算法
• 2.1 基本数据结构与算法
• 2.1.1 数据结构的表示方法
• 2.1.2 基本算法
• 2.1.3 算法的复杂度
• 2.2 基于包展开与折叠表达式的优化
• 2.2.1 基于包展开的优化
• 2.2.2 基于折叠表达式的优化
• 2.3 基于操作合并的优化
• 2.4 基于函数重载的索引算法
• 2.4.1 分摊复杂度
• 2.4.2 容器的重载索引映射
• 2.4.3 构造重载索引结构
• 2.4.4 索引元函数
• 2.4.5 允许重复键
• 2.4.6 集合与顺序表的索引操作
• 2.5 顺序表的索引算法
• 2.5.1 构造索引序列
• 2.5.2 索引顺序表的元函数
• 2.6 小结
• 2.7 练习
• 第2部分 深度学习框架
• 第3章 异类词典与policy
• 3.1 名值参数简介
• 3.2 异类词典
• 3.2.1 异类词典的实现
• 3.2.2 异类词典的使用方式
• 3.3 VariantTypeDict的性能优化
• 3.4 特殊的policy类型
• 3.5 使用policy对象与异类词典
• 3.5.1 policy选择元函数
• 3.5.2 使用宏简化policy对象声明
• 3.6 其他与policy相关的元函数
• 3.7 小结
• 3.8 练习
• 第4章 深度学习框架概述
• 4.1 简介
• 4.1.1 从机器学习到深度学习
• 4.1.2 各式各样的人工神经网络
• 4.1.3 深度学习系统的组织与训练
• 4.2 本书所实现的框架
• 4.2.1 MetaNN简介
• 4.2.2 本书将要讨论的内容
• 4.3 小结
• 第5章 类型体系与基本数据类型
• 5.1 设计理念
• 5.1.1 编译期的类型检查
• 5.1.2 使用类型体系管理不同的数据类型
• 5.2 Shape类与形状信息
• 5.2.1 定义
• 5.2.2 底层访问接口
• 5.2.3 形状特化与类型标签
• 5.2.4 主体类型的相关元函数
• 5.3 TrivialTensor
• 5.4 MetaNN所提供的数据类型
• 5.4.1 基本类型MetaNN::DynamicData
• 5.4.2 派生类型MetaNN::DynamicDataWapper
• 5.4.3 使用DynamicData封装指针行为
• 5.5 辅助函数与辅助元函数
• 5.5.1 辅助函数
• 5.5.2 辅助元函数
• 5.6 DynamicData与动态类型体系
• 5.7 小结
• 5.8 练习
• 第6章 运算与表达式模板
• 6.1 表达式模板概述
• 6.2 MetaNN的运算模板设计思想
• 6.2.1 Add类模板的问题
• 6.2.2 运算模板的行为分析
• 6.3 辅助元函数与辅助类模板
• 6.3.1 IsValidOper
• 6.3.2 辅助类模板OperElementType / OperDeviceType
• 6.3.3 辅助类模板OperCateCal
• 6.4 运算模板的框架
• 6.4.1 初始化模块
• 6.4.2 接口相关辅助逻辑
• 6.4.3 GradPolicy与MakeLayerInfer
• 6.4.4 通用操作函数
• 6.5 运算实现示例
• 6.5.1 Sigmoid运算
• 6.5.2 加法运算
• 6.5.3 点乘运算
• 6.5.4 四则运算
• 6.5.5 Slice运算
• 6.5.6 Permute运算及其相关运算
• 6.5.7 ReduceSum运算
• 6.5.8 非线性变换与相应的梯度计算
• 6.6 运算的折中与局限性
• 6.6.1 运算的折中
• 6.6.2 运算的局限性
• 6.7 小结
• 6.8 练习
• 第7章 基本层
• 7.1 层的设计理念
• 7.1.1 概述
• 7.1.2 层对象的构造
• 7.1.3 参数的初始化与加载
• 7.1.4 正向传播
• 7.1.5 存储结果
• 7.1.6 反向传播
• 7.1.7 输出梯度的形状检测
• 7.1.8 更新参数
• 7.2 一个完整的基本层构造示例
• 7.2.1 policy继承的逻辑实现
• 7.2.2 policy修正逻辑的实现
• 7.2.3 compose_traits逻辑的实现
• 7.2.4 功能函数的实现
• 7.2.5 辅助逻辑的实现
• 7.3 小结
• 7.4 练习
• 第8章 复合层
• 8.1 复合层的接口与设计理念
• 8.1.1 基本结构
• 8.1.2 结构描述语句的实现
• 8.1.3 policy的继承
• 8.1.4 输入类型映射表的推导
• 8.1.5 复合层的构造函数
• 8.2 一个完整的复合层构造示例
• 8.2.1 policy继承与修正逻辑的实现
• 8.2.2 复合层构造逻辑的实现
• 8.3 小结
• 8.4 练习
• 第9章 循环层
• 9.1 设计理念
• 9.1.1 子层的容器接口
• 9.1.2 确定序列所在维度
• 9.1.3 正向传播与反向传播
• 9.2 循环层的实现
• 9.2.1 主体框架(元)数据域
• 9.2.2 KernelGenerator的实现
• 9.2.3 ShapeDictHelper:构造函数、参数初始化等接口
• 9.2.4 正向传播
• 9.2.5 反向传播
• 9.3 循环层应用示例
• 9.3.1 以AddLayer为内核的循环层
• 9.4 小结
• 9.5 练习
• 第10章 求值与优化
• 10.1 MetaNN的求值模型
• 10.1.1 运算的层次结构
• 10.1.2 求值子系统的类型划分
• 10.2 基本求值逻辑
• 10.2.1 主体类型的求值接口
• 10.2.2 非主体类型的求值
• 10.3 运算模板的求值
• 10.3.1 避免重复计算
• 10.3.2 针对运算特性的优化
• 10.3.3 多运算协同优化
• 10.4 DynamicData与求值
• 10.5 小结
• 10.6 练习
读书摘要与主要内容介绍
《动手打造深度学习框架:C++模板元编程打造深度学习框架》是一本专注于使用C++模板元编程技术构建深度学习框架的专业书籍。
一、内容结构
- 第1部分:元编程基础技术
• 第1 - 2章
• 介绍了元编程的基本方法,包括元函数与type traits、元函数与宏、元数据结构与算法等内容。这些章节为后续深度学习框架的构建打下了元编程基础。
- 第2部分:深度学习框架
• 第3 - 10章
• 详细阐述了深度学习框架的各个组成部分。
• 第3章:异类词典与policy
• 讲解了名值参数、异类词典和policy相关的概念和操作。
• 第4章:深度学习框架概述
• 对深度学习框架进行了总体介绍,包括从机器学习到深度学习的发展、人工神经网络的种类以及本书所实现框架的简介。
• 第5章:类型体系与基本数据类型
• 讨论了深度学习框架中的类型设计理念,Shape类、TrivialTensor以及MetaNN提供的数据类型等内容。
• 第6章:运算与表达式模板
• 涵盖了运算模板的设计思想、辅助元函数与类模板、运算实现示例以及运算的折中与局限性。
• 第7章:基本层
• 阐述了层的设计理念和一个完整的基本层构造示例。
• 第8章:复合层
• 介绍了复合层的接口与设计理念,并给出了复合层构造示例。
• 第9章:循环层
• 包括循环层的设计理念、实现过程和应用示例。
• 第10章:求值与优化
• 讲解了MetaNN的求值模型、基本求值逻辑、运算模板的求值以及DynamicData与求值的相关内容。
二、主要内容
本书从元编程基础入手,逐步深入到深度学习框架的构建。在元编程部分,详细讲解了如何利用C++的模板特性进行元编程,例如元函数的定义和使用、元数据结构的优化等。在深度学习框架部分,作者按照从基础数据类型到复杂层结构的顺序进行阐述。例如,在类型体系章节,介绍了如何设计适合深度学习框架的类型系统;在运算与表达式模板章节,讲解了如何实现高效的运算操作;在层结构章节,分别对基本层、复合层和循环层进行了深入分析,包括它们的设计理念和实现方法。最后,在求值与优化章节,讨论了如何对深度学习框架中的运算进行求值和优化。
这本书适合对深度学习框架实现感兴趣,且具备一定C++编程基础的读者阅读,通过阅读可以深入了解如何从底层利用元编程技术构建深度学习框架。