机器人之Google 人工智能 TensorFlow 入门中文版
小标 2018-10-25 来源 : 阅读 1016 评论 0

摘要:本文主要向大家介绍了机器人之Google 人工智能 TensorFlow 入门中文版,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

本文主要向大家介绍了机器人之Google 人工智能 TensorFlow 入门中文版,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

TensorFlow入门

本指南让您开始在TensorFlow中编程。在使用本指南之前, 请安装TensorFlow。为了充分利用本指南,您应该了解以下内容:



如何用Python编程。


至少有一点关于数组阵列的知识。


理想的是,关于机器学习的东西。但是,如果您对机器学习知之甚少,那么这仍然是您应该阅读的第一本指南。



TensorFlow提供了多个API。最低级别的API - TensorFlow核心 - 为您提供完整的编程控制。我们推荐TensorFlow Core用于机器学习研究人员和其他需要对其模型进行精细控制的人员。更高层次的API建立在TensorFlow核心之上。这些更高级别的API通常比TensorFlow Core更容易学习和使用。另外,更高级别的API使得不同用户之间的重复任务更容易和更一致。像tf.estimator这样的高级API可以帮助您管理数据集,估算器,培训和推理。


本指南从TensorFlow核心教程开始。稍后,我们演示如何在tf.estimator中实现相同的模型。了解TensorFlow核心原则将给你一个很好的思维模型,说明当你使用更紧凑的更高级别的API时,内部是如何工作的。


张量

TensorFlow中的数据中心单位是张量。一个张量由一组形成任意数量维数的原始值组成。张量的等级是它的维数。这里是一些张量的例子:


3 # a rank 0 tensor; a scalar with shape []
[1., 2., 3.] # a rank 1 tensor; a vector with shape [3]
[[1., 2., 3.], [4., 5., 6.]] # a rank 2 tensor; a matrix with shape [2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]] # a rank 3 tensor with shape [2, 1, 3]


TensorFlow核心教程

导入张量流


TensorFlow程序的规范导入语句如下所示:


import tensorflow as tf


这使得Python可以访问所有 TensorFlow 的类,方法和符号。大多数文档假定您已经完成了这个工作。


计算图

你可能会想到TensorFlow核心程序由两个独立的部分组成:



构建计算图。


运行计算图。



甲计算图形是一系列排列成节点的图形TensorFlow操作。我们来构建一个简单的计算图。每个节点将零个或多个张量作为输入,并产生张量作为输出。一种类型的节点是一个常量。像所有的TensorFlow常量一样,它不需要输入,而是输出一个内部存储的值。我们可以创建两个浮点Tensors node1 ,node2如下所示:


node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0) # also tf.float32 implicitly
print(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节点和操作来构建更复杂的计算(操作也是节点)。例如,我们可以添加我们的两个常量节点,并产生一个新的图形如下:


from __future__ import print_function
node3 = tf.add(node1, node2)
print("node3:", node3)
print("sess.run(node3):", sess.run(node3))


最后两个打印语句产生


node3: Tensor("Add: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),然后对它们进行操作。我们可以通过使用run方法的feed_dict参数将多个输入的 具体值提供给占位符来评估这个图形。


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], dtype=tf.float32)
b = tf.Variable([-.3], dtype=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,但机器学习的整点自动找到正确的模型参数。我们将在下一节展示如何完成这个。


tf.train API


机器学习的完整讨论超出了本教程的范围。但是,TensorFlow提供了优化器,可以逐渐改变每个变量,以最大限度地减少损失函数。最简单的优化器是梯度下降。它根据相对于该变量的损失导数的大小来修改每个变量。一般来说,手动计算符号派生是繁琐和容易出错的。因此,TensorFlow可以自动生成衍生产品,仅使用该函数对模型进行描述tf.gradients。为了简单起见,优化程序通常会为您执行此操作。例如,


optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)


sess.run(init) # reset values to incorrect defaults.
for i in range(1000):
  sess.run(train, {x: [1, 2, 3, 4], y: [0, -1, -2, -3]})


print(sess.run([W, b]))


导致最终的模型参数:


[array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]


现在我们已经完成了机器学习!虽然这个简单的线性回归模型不需要太多的TensorFlow核心代码,但是更复杂的模型和方法将数据提供给模型需要更多的代码。因此,TensorFlow为常见的模式,结构和功能提供更高层次的抽象。我们将在下一节学习如何使用这些抽象。


完整的程序

完成的可训练线性回归模型如下所示:


import tensorflow as tf

# Model parameters
W = tf.Variable([.3], dtype=tf.float32)
b = tf.Variable([-.3], dtype=tf.float32)
# Model input and output
x = tf.placeholder(tf.float32)
linear_model = W*x + b
y = tf.placeholder(tf.float32)

# loss
loss = tf.reduce_sum(tf.square(linear_model - y)) # sum of the squares
# optimizer
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)

# training data
x_train = [1, 2, 3, 4]
y_train = [0, -1, -2, -3]
# training loop
init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init) # reset values to wrong
for i in range(1000):
  sess.run(train, {x: x_train, y: y_train})

# evaluate training accuracy
curr_W, curr_b, curr_loss = sess.run([W, b, loss], {x: x_train, y: y_train})
print("W: %s b: %s loss: %s"%(curr_W, curr_b, curr_loss))


运行时产生


W: [-0.9999969] b: [ 0.99999082] loss: 5.69997e-11


请注意,损失是非常小的数字(非常接近零)。如果你运行这个程序,你的损失可能与上述损失不完全一样,因为模型是用伪随机值初始化的。


这个更复杂的程序仍然可以在 TensorBoard 中可视化



tf.estimator


tf.estimator 是一个高级的TensorFlow库,它简化了机器学习的机制,包括以下内容:



运行训练循环


运行评估循环


管理数据集



tf.estimator定义了许多常见的模型。


基本用法

注意线性回归程序变得简单多了 tf.estimator:


# NumPy is often used to load, manipulate and preprocess data.
import numpy as np
import tensorflow as tf

# Declare list of features. We only have one numeric feature. There are many
# other types of columns that are more complicated and useful.
feature_columns = [tf.feature_column.numeric_column("x", shape=[1])]

# An estimator is the front end to invoke training (fitting) and evaluation
# (inference). There are many predefined types like linear regression,
# linear classification, and many neural network classifiers and regressors.
# The following code provides an estimator that does linear regression.
estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns)

# TensorFlow provides many helper methods to read and set up data sets.
# Here we use two data sets: one for training and one for evaluation
# We have to tell the function how many batches
# of data (num_epochs) we want and how big each batch should be.
x_train = np.array    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程