Google TensorFlow 机器学习框架介绍和使用

这是什么?

是用于数字计算 ( ) 的开源第二代软件库。它是一个基于数据流图的处理框架。图中的节点代表数学运算( ),边代表运算节点之间的数据交互。从字面上看,它有两种含义。一是表示节点之间传递的数据,通常这个数据是多维矩阵(data)或者一维向量;第二层意思是Flow,指的是数据,直观的理解是数据以流的形式进入数据操作图的各个节点。

是一个非常灵活的框架,可以在 PC 或服务器甚至移动设备上的单个或多个 CPU 和 GPU 上运行。该系统最初由 Brain 团队开发,用于研究机器学习和深度神经网络,后来发现该系统足够通用,可以支持更广泛的应用。至于谷歌为何开源框架,其回应如下:

“太好了,为什么要打开而不是保留呢?比你想象的要多:我们是 和 的关键。在这方面速度很快,但缺乏工具。在什么我们要成为最好的之一,我们希望在一个开放的想法中。一定要使用 user-and 和我们的组来配合我们的许多 .”

特点

1. 灵活(Deep) 不仅可以用于神经网络算法研究,也可以用于普通机器学习算法,甚至只要你会计算就可以表示为数据流图,并且可以使用。 2.便携(真)这个工具可以部署在个人PC上,单CPU,多CPU,单GPU,多GPU,单机多GPU,多机多CPU,多机多-GPU、手机等,几乎涵盖各种场景的计算设备。 3. 研究和产品之间的桥梁()在谷歌,研究科学家可以用它来研究新的算法,产品团队可以用它来训练实际的产品模型,更重要的是,更容易将研究成果转化为实践产品另外,白皮书说几乎所有产品都用到了,比如搜索排序、语音识别、 、自然语言处理等。4.Auto- (Auto-) 机器学习中的很多算法都用到了渐变。当你使用它们时,它会自动为你计算梯度。只要定义目标函数并添加数据就可以了。这听起来很诱人,但我不知道如何实现它。 5. 语言灵活性 ( ) 是用 C++ 实现的,然后进行封装。暂时只支持这两种语言。 呼吁社区开发更多的语言界面,以通过 SWIG 支持它。 6. 性能最大化()通过对线程、队列和异步计算(一流)的支持,可以运行在各种硬件上,同时根据计算的需要,将操作合理分配到相应的设备,例如卷积分配给GPU。安装请参考这个链接: 源代码可以从这个链接下载: 安装很简单,不用试GPU:

# Ubuntu/Linux 64-bit

$ sudo apt-get install python-pip python-dev

 

# Mac OS X

$ sudo easy_install pip

# Ubuntu/Linux 64-bit, CPU only:

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.6.0-cp27-none-linux_x86_64.whl

 

# Ubuntu/Linux 64-bit, GPU enabled:

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.6.0-cp27-none-linux_x86_64.whl

@ >

 

# Mac OS X, CPU only:

$ sudo easy_install --upgrade six

$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/mac/tensorflow-0.6.0-py2-none-any.whl

安装完成后,输入以下命令检查是否安装成功。

$ python

...

>>> import tensorflow as tf

>>> hello = tf.constant('Hello, TensorFlow!')

p>

>>> sess = tf.Session()

>>> print(sess.run(hello))

Hello, TensorFlow!

>>> a = tf.constant(10)

>>> b = tf.constant(32)

>>> print(sess.run(a + b))

42

>>> 

	如果报无法获取CPU信息错误,可以在上述代码中,修改添加如下几行:

NUM_CORES = 4 # Choose how many cores to use.
sess = tf.Session(
   config=tf.ConfigProto(inter_op_parallelism_threads=NUM_CORES,
                  intra_op_parallelism_threads=NUM_CORES))

 

基本用法

使用前,有必要了解以下概念:

1.计算以图表的形式表示。

2. 是执行的入口点,类似于.

3.数据用.表示。

4.用于表示可变状态,例如模型参数。

5.使用来自计算节点的提要以及输入和输出数据。

计算框架要求所有的计算都用图表示,图中的节点称为操作ops(简称)。一个运算可以得到零个或多个,经过计算,它可以产生零个或多个。一种是多维数组。例如,一批图像数据可以表示为一个4维浮点数组[batch, , width, ]

计算图是通过提交的,一个操作决定了graph是时候去哪个设备计算,比如是选择CPU还是CPU。 op 操作的结果是 C 中的 numpy.array 对象和 C 和 C++ 中的 :: 实例。

构建计算图

构造图的第一步是构造操作op。操作不必有输入。您可以使用协商来构造一个操作节点,然后将其结果输出到另一个正在操作的节点。下面是使用生成一个简单的操作,并基于它构建一个计算图。

作为 tf

# 创建一个 1X2 矩阵

= tf.([[3., 3.]])

# 创建一个 2X1 矩阵

= tf.([[2.],[2.]])

#创建求和的乘积运算,返回矩阵

= tf.(, )

上图包含三个运算,两个()运算,一个矩阵乘法运算()。要获得最终矩阵乘积的结果,您需要使用 提交此图。

提交计算图

#创建一个对象

sess = tf.()

#通过中间的run()方法提交计算图

= sess.run()

打印()

# ==> [[ 12.]]

#运行后关闭这个

sess.close()

运行完成后,需要手动关闭。当然,你也可以使用“with”关键字在运行后自动关闭。

使用 tf.() 作为 sess:

= sess.run([])

打印()

在分布式运行环境中,一般不需要手动指明哪些操作应该放在哪台机器上,比如CPU和GPU,但是框架提供了手动设置的功能。

使用 tf.() 作为 sess:

.(“/gpu:1”):

= tf.([[3. , 3.]])

= tf.([[2.],[2.]])

= tf.(, )

目前支持以下设备:

·”/cpu:0″: 你的CPU。

·”/gpu:0″: 你的 GPU,如果你有的话。

·”/gpu:1″: 你的GPU等

交互格式使用

通过创建对象提供类似的机制。

# 输入一个 .

作为 tf

sess = tf.()

x = tf.([1.@ >0, 2.0])

a = tf.([3.0, 3.0])

# ‘x ‘ 使用 op 的 run()。

x..run()

# 从 ‘x’ 向 ‘a’ 添加一个操作。运行它并打印

sub = tf.sub(x, a)

打印(sub.eval())

# ==> [-2. -1.]

# 完成后关闭。

sess.close()

变量()

p>

变量维护着整个执行图中间的状态,比如里面的计数器就是一个变量。具体在机器学习任务中,当我们训练一个深度神经网络时,每一层的节点权重都是用来表示的,在训练过程中,权重会不断更新。请参阅以下示例:

# a ,这将是值 0.

state = tf.(0,name=””)

# 一个向 `state` 添加一个的 Op。

one = tf.(1)

= tf.add(state, one)

= tf.(状态, )

# 必须在 `init` Op 之后

# 图表。我们首先必须将 `init` Op 添加到 .

p>

= tf.bles()

# 图表并运行操作。

使用 tf.() 作为 sess:

#’init’操作

sess.run()

#’state’的值

打印(sess.run(state))

p>

# 操作那个 ‘state’ 并打印 ‘state’。

对于_in range(3):

sess.run()

打印(sess.run(state))

#:

#0

#1

#2

#3

()是赋值操作,真正的执行是在run()执行时开始。

数据获取()

要获取一个op的运算结果,可以调用run()方法,可以同时获取多个结果。只执行一次运行请求即可获得所有结果。

=tf. (3.0)

= tf.(2.0)

= tf.(5.0)

= tf.add(, )

mul = tf.mul(, )

使用 tf.() 作为 sess:

= sess.run([mul, ])

打印()

#:

# [array([ 21.], dtype=), array([ 7.],dtype=)]

数据输入(Feed)

使用之前介绍的数据输入,直接输入一个明确的常量数据,并提供一个“()”方法来表示一个数据,然后调用run,通过参数传入批量输入的数据输入后,具体可以获得数据。具体例子可以如下:

# 创建两个输入和,然后这两个数据中没有任何内容。

# 可以理解为两个输入变量的声明。

= tf.(tf.)

= tf.(tf.)

= tf.mul(, )

使用 tf.() 作为 sess:

打印(sess.run([], ={:[7.], :[2.]}))

#:

# [数组([ 14.], dtype=)]

具体的输入是。

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片