TensorFlow 完整的TensorFlow入门教程

本文从安装TensorFlow开始,介绍如何使用Python编程、数组知识及基本机器学习概念来操作TensorFlow。详细讲解了TensorFlow的计算图构建与运行,包括张量、节点、占位符、变量、损失函数等核心概念,最后通过一个简单的线性回归模型演示了如何训练模型。
1:你想要学习TensorFlow,首先你得安装Tensorflow,在你学习的时候你最好懂以下的知识:
    a:怎么用python编程
     b:了解一些关于数组的知识
     c:最理想的情况是:关于机器学习,懂一点点;或者不懂也是可以慢慢开始学习的。

2:TensorFlow提供很多API,最低级别是API:TensorFlow Core,提供给你完成程序控制,还有一些高级别的API,它们是构建在
TensorFlow Core之上的,这些高级别的API更加容易学习和使用,于此同时,这些高级别的API使得重复的训练任务更加容易,
也使得多个使用者操作对他保持一致性,一个高级别的API像tf.estimator帮助你管理数据集合,估量,训练和推理。

3:TensorsTensorFlow的数据中央控制单元是tensor(张量),一个tensor由一系列的原始值组成,这些值被形成一个任意维数的数组。
一个tensor的列就是它的维度。

4:
import tensorflow as tf
上面的是TensorFlow 程序典型的导入语句,作用是:赋予Python访问TensorFlow类(classes),方法(methods),符号(symbols)

5The Computational Graph TensorFlow核心程序由2个独立部分组成:
    a:Building the computational graph构建计算图
    b:Running the computational graph运行计算图
一个computational graph(计算图)是一系列的TensorFlow操作排列成一个节点图。
  1. node1 = tf.constant(3.0, dtype=tf.float32)
  2. node2 = tf.constant(4.0)# also tf.float32 implicitly
  3. print(node1, node2)
最后打印结果是:
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0",shape=(), dtype=float32)
要想打印最终结果,我们必须用到session:一个session封装了TensorFlow运行时的控制和状态
  1. sess = tf.Session()
  2. print(sess.run([node1, node2]))
我们可以组合Tensor节点操作(操作仍然是一个节点)来构造更加复杂的计算,
  1. node3 = tf.add(node1, node2)
  2. print("node3:", node3)
  3. print("sess.run(node3):", sess.run(node3))
打印结果是:
  1. node3:Tensor("Add:0", shape=(), dtype=float32)
  2. sess.run(node3):7.0

6:TensorFlow提供一个统一的调用称之为TensorBoard,它能展示一个计算图的图片;如下面这个截图就展示了这个计算图
7:一个计算图可以参数化的接收外部的输入,作为一个placeholders(占位符),一个占位符是允许后面提供一个值的。
  1. a = tf.placeholder(tf.float32)
  2. b = tf.placeholder(tf.float32)
  3. adder_node = a + b # + provides a shortcut for tf.add(a, b)
这里有点像一个function (函数)或者lambda表达式,我们定义了2个输入参数a和b,然后提供一个在它们之上的操作。我们可以使用
feed_dict(传递字典)参数传递具体的值到run方法的占位符来进行多个输入,从而来计算这个图。
  1. print(sess.run(adder_node, {a:3, b:4.5}))
  2. print(sess.run(adder_node, {a: [1,3], b: [2,4]}))
结果是:
  1. 7.5
  2. [3. 7.]
在TensorBoard,计算图类似于这样:

8:我们可以增加另外的操作来让计算图更加复杂,比如
  1. add_and_triple = adder_node *3.
  2. print(sess.run(add_and_triple, {a:3, b:4.5}))
  3. 输出结果是:
  4. 22.5
在TensorBoard,计算图类似于这样:

9:在机器学习中,我们通常想让一个模型可以接收任意多个输入,比如大于1个,好让这个模型可以被训练,在不改变输入的情况下,
我们需要改变这个计算图去获得一个新的输出。变量允许我们增加可训练的参数到这个计算图中,它们被构造成有一个类型和初始值:
  1. W = tf.Variable([.3], dtype=tf.float32)
  2. b = tf.Variable([-.3], dtype=tf.float32)
  3. x = tf.placeholder(tf.float32)
  4. linear_model = W*x + b

10:当你调用tf.constant常量被初始化,它们的值是不可以改变的,而变量当你调用tf.Variable时没有被初始化,
在TensorFlow程序中要想初始化这些变量,你必须明确调用一个特定的操作,如下:
  1. init = tf.global_variables_initializer()
  2. sess.run(init)

11:要实现初始化所有全局变量的TensorFlow子图的的处理是很重要的,直到我们调用sess.run这些变量都是未被初始化的。
既然x是一个占位符,我们就可以同时地对多个x的值进行求值linear_model,例如:
  1. print(sess.run(linear_model, {x: [1,2,3,4]}))
  2. 求值linear_model
  3. 输出为
  4. [0. 0.30000001 0.60000002 0.90000004]

12:我们已经创建了一个模型,但是我们至今不知道它是多好,在这些训练数据上对这个模型进行评估,我们需要一个
y占位符来提供一个期望的值,并且我们需要写一个loss function(损失函数),一个损失函数度量当前的模型和提供
的数据有多远,我们将会使用一个标准的损失模式来线性回归,它的增量平方和就是当前模型与提供的数据之间的损失
linear_model - y创建一个向量,其中每个元素都是对应的示例错误增量。这个错误的方差我们称为tf.square。然后
,我们合计所有的错误方差用以创建一个标量,用tf.reduce_sum抽象出所有示例的错误。
  1. y = tf.placeholder(tf.float32)
  2. squared_deltas = tf.square(linear_model - y)
  3. loss = tf.reduce_sum(squared_deltas)
  4. print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
  5. 输出的结果为
  6. 23.66


13:我们分配一个值给W和b(得到一个完美的值是-1和1)来手动改进这一点,一个变量被初始化一个值会调用tf.Variable
但是可以用tf.assign来改变这个值,例如:fixW = tf.assign(W, [-1.])
  1. fixb = tf.assign(b, [1.])
  2. sess.run([fixW, fixb])
  3. print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]}))
  4. 最终打印的结果是:
  5. 0.0

14tf.train APITessorFlow提供optimizers(优化器),它能慢慢改变每一个变量以最小化数,最简单的优化器是
gradient descent(梯度下降),它根据变量派生出损失的大小,来修改每个变量。通常手工计算变量符号是乏味且容易出错的,
因此,TensorFlow使用函数tf.gradients这个模型一个描述,从而能自动地提供衍生品,简而言之,优化器通常会为你做这个。例如:
  1. optimizer = tf.train.GradientDescentOptimizer(0.01)
  2. train = optimizer.minimize(loss)
  3. sess.run(init)# reset values to incorrect defaults.
  4. for iin range(1000):
  5. sess.run(train, {x: [1,2,3,4], y: [0, -1, -2, -3]})
  6. print(sess.run([W, b]))
  7. 输出结果为
  8. [array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]

现在你已经完成了实际的机器学习,尽管这个简单的线性回归模型不要求太多TensorFlow core代码,更复杂的模型和
方法将数据输入到模型中,需要跟多的代码,因此TensorFlow为常见模式,结构和功能提供更高级别的抽象,我们将会
在下一个章节学习这些抽象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值