Tensorflow官方文档学习理解 (一)

Tensorflow是一个编程系统,使用图来表示计算任务,图中的节点被称为op(operation的缩写),一个op可以获得0个或多个Tensor,当这个op被执行的话,也可以产生0个或多个Tensor。每个Tensor是一个类型化的多维数组。例如你可以将一小组图像集表示为一个四维的浮点数数组,这四个维度分别是[batch, height, width, channels]。

一个TensorFlow图描述了计算的过程。为了进行计算,图必须在会话里面被启动。会话将op分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法。这些方法执行后,将产生的Tensor返回。在python里面,返回的是numpy ndarray对象;在C和C++语言中返回的tensor是tensorflow::tensor实例

在tensorflow中,程序的编写通常分为两步:1.构建阶段;2.执行阶段。在构建阶段op的执行过程被描述为一张图,在执行阶段,程序通过会话执行图中的op。总的来说就是,在构建阶段创建一个图来表示和训练神经网络,然后在执行阶段反复执行图中的训练op。

构建图

构建图的第一步,是创建源op。源op不需要任何输入,例如常量(constant),源op的输出被传递给其他op做运算。

在python库中,op构造器的返回值代表被构造出的op的输出,这些返回值可以传递给其他op构造器,作为输入。下面我们举例来说明一下。

首先我们需要导入tensorflow库:

import tensorflow as tf

之后的话我们创建一个常量op,产生一个1*2的矩阵[3,3]:

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

我们再创建另外一个op,产生一个2*1的矩阵[[2], [2]]:

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

我们接下来创建一个矩阵乘法的op,将之前的op的输出作为当前op的输入:

product = tf.matmul(matrix1, matrix2)

这样的话我们就构建了一张图,这张图有三个节点:两个op和一个matmul op。如果我们将product打印出来的话,我们是得不到其运算后的结果的,得到如下所示结果:

 

如上图所示,我们得到的是一个Tensor。所以我们到目前为止只是构建了一张图,我们接下来还需要启动这张图,启动这张图的第一步是创建一个Session对象,如果我们不加入任何参数到里面的话,我们将会启动默认图。代码如下:

sess = tf.Session()

接下来的话我们就可以通过sess.run的方法来执行矩阵乘法的op。并且在任务完成之后,我们需要关闭会话。

result = sess.run(product)
print(result)
sess.close()

输出结果:

Session在调用完成之后我们需要关闭会话,释放资源。我们可以通过更加简单的方法来实现:

with tf.Session() as sess:
    result = sess.run(product)
    print(result)

总的代码如下所示:

import tensorflow as tf
matrix1 = tf.constant([[3,3]])
matrix2 = tf.constant([[2], [2]])
product = tf.matmul(matrix1, matrix2)
# sess = tf.Session()
# result = sess.run(product)
# print(result)
# sess.close()
with tf.Session() as sess:
    result = sess.run(product)
    print(result)

在定义上,Tensorflow将图形定义转换成分布式执行的操作,以充分利用可用的计算资源(如CPU或GPU),并且Tensorflow会自动选择CPU或者GPU来执行。

如果机器上有超过一个可用的 GPU, 除第一个外的其它 GPU 默认是不参与计算的. 为了让 TensorFlow 使用这些 GPU, 你必须将 op 明确指派给它们执行. with...Device 语句用来指派特定的 CPU 或 GPU 执行操作:

import tensorflow as tf
with tf.Session() as sess:
    with tf.device("/cpu:0"):
        matrix1 = tf.constant([[3, 3]])
        matrix2 = tf.constant([[2], [2]])
        product = tf.matmul(matrix1, matrix2)
        result = sess.run(product)
        print(result)

设备用字符串进行标识. 目前支持的设备包括:

• "/cpu:0" : 机器的 CPU.

• "/gpu:0" : 机器的第一个 GPU, 如果有的话.

• "/gpu:1" : 机器的第二个 GPU, 以此类推.

猜你喜欢

转载自blog.csdn.net/weixin_39059031/article/details/82807847