课程概要
1、tensorflow介绍
2、代码展示
一、tensorflow介绍
1、什么是tensorflow?
- 针对数量计算的使用数据流图流程图开源软件库
- 由Google Brain团队开发的机器学习的研究
- Tensorflow 是表现机器学习算法的接口,以及执行算法的执行器。
2、编程模型
主要思想:将数量计算表现为图(graph)
- 图节点表示是针对输入的操作(operation)以及输出
- 图边表示节点之间流动的张量(tensor)
- 变量(variable)是状态节点,输出他们自己的值。如b,W
- 占位节点(Placeholders)是在执行的时候会被喂入值的节点。如x
- 数学运算
- MatMul:两个矩阵的值相乘 Multiply two matrix values.
- Add: 对应元素相加
- ReLU: 对应元素的激活函数
对应代码:
- 创建权重,并进行初始化W~Uniform(-1,1);b=0
- 创建x的输入占位节点(placeholder):m*784的输入矩阵
- 建立流程图(flow graph)
代码运行时,会自动在目前图(graph)中自动生成新的节点。
3、节点运行
在定义好了节点以后,我们可以为图部署一个会话(session):和目前的执行环境相联系。
在代码上的体现是sess.run(fetches,feeds)
- Fetches:一系列图节点,返回这些节点的输出
- feeds:从图节点字典映射到具体的值。
4、模型训练
- 定义损失:建立一个placeholder来表示标签(labels),基于标签和预测来构建损失节点。
- 梯度计算:通过下面第一行的代码,我们可以把优化运算加入到运算图中,同时指定损失函数是cross_entropy,学习率是0.5。除了这种优化方法以外,还有其他的优化器。这些优化器可以自动后馈计算参数的梯度。
- 训练模型的步骤
- 创建会话(session)
- 建立训练计划
- 运行优化器 train_step
5、变量共享问题
有的时候我们会使用很多个GPU来训练神经网络,这个时候就涉及到变量共享的问题。
有一种方法是在一开始就建立变量字典,用一些字符串来代表变量,但是不利于封装。
解决方法是建立一个变量层(variable scope)
- tf.variable_scope() :提供一个层级来避免命名冲突
- tf.get_variable() :当已经存在该变量的时候,就从命名层获取该变量;当不存在时就创建该变量
6、简单总结
- 构建图
- 前馈/预测
- 优化(梯度和train_step运算)
- 初始化一个会话
- 使用session.run(train_step, feed_dict)训练
二、代码展示
1、以线性回归为例
绘制出来的图像
2、skip-gram
计算结果