机器学习的三个核心的定义:定义模型、定义目标函数和定义优化方法
- 构建计算图
- 分发计算任务
- 执行计算任务
另外还要准备数据
对大多数的任务来说,第2步和第3步操作对于用户来说相对容易,于是我们的主要精力都花在第1步--也就是==构建计算图==上
在创建变量时只写了一句代码,背后却发生了很多更细粒度的Op,所以在计算图执行时,我们要明白这些Op的来源
https://suhee05.github.io/tensorflow-basics/
定义数据流图 -----计算图 ----完成计算图定义 ----Graph
运行数据流图(在数据上) -----会话 ----构建训练迭代 ----Session
深度学习算法由于其数据量大、算法复杂度高等特点,常常需要采用某种形式的并行机制,常用的并行方法有数据并行(data parallel)和模型并行(model parallel)两种。
数据并行的原理很简单,如下图,其中CPU主要负责梯度平均和参数更新,而GPU1和GPU2主要负责训练模型副本(model replica),这里称作“模型副本”是因为它们都是基于训练样例的子集训练得到的,模型之间具有一定的独立性。具体的训练步骤如下,
同时使用多个硬件资源计算不同batch的数据的梯度,然后汇总梯度进行全局的更新。
(1)在GPU1、GPU2上分别定义模型参数变量,网络结构;
(2)对于单独的GPU,分别从数据管道读取不同的数据块,然后进行前向传播(forward propagation)计算出loss,再计算关于当前Variables的gradients;
(3)把所有GPU输出的梯度数据转移到CPU上,先进行梯度取平均操作,然后进行模型参数的更新;
(4)重复步骤(1)-(3),直到模型参数收敛为止;