Tensorflow之核心教程
来源:互联网 发布:吉利知豆d1导航系统 编辑:程序博客网 时间:2024/06/05 18:59
TensorFlow核心教程
导入Tensorflow
TensorFlow程序的规范导入声明如下:
import tensorflow as tf
这使Python可以访问TensorFlow的所有类,方法和符号。大多数文档假定您已经完成了。
计算图
您可能会认为TensorFlow Core程序由两个独立部分组成:
1.构建计算图。
2.运行计算图。
计算图形是一系列排列成节点的图形TensorFlow操作。我们来构建一个简单的计算图。每个节点采用零个或多个张量作为输入,并产生张量作为输出。一种类型的节点是一个常数。像所有TensorFlow常数一样,它不需要任何输入,它输出一个内部存储的值。我们可以创建两个浮点式传感器node1 ,node2如下所示:
node1 = tf.constant(3.0, tf.float32)node2 = tf.constant(4.0) # also tf.float32 implicitlyprint(node1, node2)
输出结果:
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0", shape=(), dtype=float32)
请注意,打印节点不会输出值3.0,4.0正如您所期望的那样。相反,它们是在评估时分别产生3.0和4.0的节点。要实际评估节点,我们必须在会话中运行计算图。会话封装了TensorFlow运行时的控制和状态。
下面的代码创建一个Session对象,然后调用其run方法运行足够的计算图来评价node1和node2。通过在会话中运行计算图如下:
sess = tf.Session()print(sess.run([node1, node2]))
我们看到3.0和4.0的预期值:
[3.0, 4.0]
我们可以通过将Tensor节点与操作相结合来构建更复杂的计算(操作也是节点)。例如,我们可以添加我们的两个常量节点并生成一个新的图,如下所示:
node3 = tf.add(node1, node2)print("node3: ", node3)print("sess.run(node3): ",sess.run(node3))
最后两个print语句生成:
node3: Tensor("Add_2:0", shape=(), dtype=float32)sess.run(node3): 7.0
TensorFlow提供了一个名为TensorBoard的实用程序,可以显示计算图的图片。这是一个屏幕截图,显示TensorBoard如何可视化图形:
就这样,这个图并不是特别有趣,因为它总是产生一个恒定的结果。可以将图形参数化为接受外部输入,称为占位符。一个占位符是一个承诺后提供一个值。
a = tf.placeholder(tf.float32)b = tf.placeholder(tf.float32)adder_node = a + b # + provides a shortcut for tf.add(a, b)
前面的三行有点像一个函数或一个lambda,其中我们定义了两个输入参数(a和b),然后对它们进行一个操作。我们可以使用feed_dict参数来指定多个输入的图表来指定为这些占位符提供具体值的Tensors:
print(sess.run(adder_node, {a: 3, b:4.5}))print(sess.run(adder_node, {a: [1,3], b: [2, 4]}))
输出结果:
7.5[ 3. 7.]
在TensorBoard中,图形如下所示:
我们可以通过添加另一个操作来使计算图更加复杂。例如,
add_and_triple = adder_node * 3.print(sess.run(add_and_triple, {a: 3, b:4.5}))
产生输出
22.5
前面的计算图在TensorBoard中将如下所示:
在机器学习中,我们通常会想要一个可以接受任意输入的模型,比如上面的一个。为了使模型可训练,我们需要能够修改图形以获得具有相同输入的新输出。 变量允许我们向图中添加可训练的参数。它们的构造类型和初始值:
W = tf.Variable([.3], tf.float32)b = tf.Variable([-.3], tf.float32)x = tf.placeholder(tf.float32)linear_model = W * x + b
常数被调用时初始化tf.constant,其值永远不会改变。相比之下,调用时,变量不会被初始化tf.Variable。要初始化TensorFlow程序中的所有变量,必须显式调用特殊操作,如下所示:
init = tf.global_variables_initializer()sess.run(init)
重要的是实现initTensorFlow子图的一个句柄,初始化所有的全局变量。在我们调用之前sess.run,变量未初始化。
既然x是占位符,我们可以同时评估linear_model几个值, x如下所示:
print(sess.run(linear_model, {x:[1,2,3,4]}))
产生输出
[ 0. 0.30000001 0.60000002 0.90000004]
我们创建了一个模型,但是我们不知道它有多好。为了评估培训数据的模型,我们需要一个y占位符来提供所需的值,我们需要编写一个损失函数。
损失函数测量当前模型与提供的数据之间的距离。我们将使用线性回归的标准损失模型,其将当前模型和提供的数据之间的三角形的平方相加。linear_model - y创建一个向量,其中每个元素都是对应的示例的错误增量。我们打电话tf.square给这个错误。然后,我们求和所有平方误差,创建一个单一的标量,使用tf.reduce_sum以下方法抽象出所有示例的错误:
y = tf.placeholder(tf.float32)squared_deltas = tf.square(linear_model - y)loss = tf.reduce_sum(squared_deltas)print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))
产生损失值
23.66
我们可以手动重新分配的值提高这W和b为-1和1变量的值,完美初始化为提供的价值 tf.Variable,但可以使用操作等来改变tf.assign。例如, W=-1并且b=1是我们的模型的最佳参数。我们可以改变W,并 b因此:
fixW = tf.assign(W, [-1.])fixb = tf.assign(b, [1.])sess.run([fixW, fixb])print(sess.run(loss, {x:[1,2,3,4], y:[0,-1,-2,-3]}))
最终打印显示现在的损失为零
0.0
我们猜测的“完美”的价值观W和b,但机器学习的整点自动找到正确的模型参数。我们将在下一节中展示如何完成此项工作。
- Tensorflow之核心教程
- 深度学习之TensorFlow进阶教程一
- TensorFlow教程之深入MNIST测试
- tensorFlow 教程
- TensorFlow 教程
- TensorFlow 教程
- TensorFlow 教程
- TensorFlow 教程
- Tensorflow教程
- TensorFlow教程之完整教程 2.7 字词的向量表示
- TensorFlow官方教程学习笔记之1-TensorFlow入门教程(Getting Started With TensorFlow)
- TensorFlow教程 1 Tensorflow简介
- TensorFlow教程之MNIST机器学习入门测试
- tensorflow系列教程(2)之---回归的例子
- Seagull PHP框架学习教程之Seagull核心库
- JSTL标签详细教程之——核心库
- Playmaker Input篇教程之引入的核心概念
- Spring基础学习教程(Spring之核心容器bean)-06
- ONVIF双向对讲(RTSP协议)
- Servlet3 ServletContainerInitializer与Spring Web
- Android开发(二)
- 从HGraph生成SSA
- 操作系统(进程2)
- Tensorflow之核心教程
- ZooKeeper系列(四)
- nginx+tomcat简单负载均衡配置
- 如何使用php判断服务器是否是HTTPS连接
- bootstrap-警告框/进度条/列表组/面板
- SaltStack实战之SaltStack快速入门
- Spark性能调优(六)
- 手动创建Http服务器(集群Http服务器)
- Kotlin之类和对象