这是什么?
是用于数字计算 ( ) 的开源第二代软件库。它是一个基于数据流图的处理框架。图中的节点代表数学运算( ),边代表运算节点之间的数据交互。从字面上看,它有两种含义。一是表示节点之间传递的数据,通常这个数据是多维矩阵(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=)]
具体的输入是。
暂无评论内容