Tensorflow基础知识

来源:互联网 发布:java第十版基础篇答案 编辑:程序博客网 时间:2024/05/16 03:54

基本使用

  • 使用图(graph)来表示计算任务
  • 通过Sessions来执行图计算
  • 使用tensor表示数据
  • 通过变量Variable维护状态
  • 使用feed和fetch可以为任意的操作赋值或从其中获取数据

TensorFlow是一种将计算表示为图的编程系统。图中的节点称为ops(operation的简称)。一个ops使用0个或以上的Tensors,通过执行某些运算,产生0个或以上的Tensors。一个Tensor是一个多维数组或列表。图必须在会话(Session)里被启动。

下面我们来看一个基本的例子:

#导入tensorflow,用tf代替import tensorflow as tf#创建一个常量(constant)op,a为一行两列的矩阵a = tf.constant([[3,3]])#创建另一个常量(constant)op,b为两行一列的矩阵b = tf.constant([[2],[3]])#矩阵乘法op(matmul),传入a,bc = tf.matmul(a, b)#输出结果print(result)

口算得出,result应该等于15,那我们来看一下,结果是不是这样的呢。

这里写图片描述

结果并不是15,而是得到一个Tensor

我们前面说过,tensorflow中的计算都应该在会话(Session)中进行,在这里我们只是定义了这些op,但是并没有执行。

接下来我们定义一个会话,看看执行结果:

#定义一个会话, 启动默认的图sess = tf.Session()#调用sess的run方法执行矩形乘法op#run(c)触发了图中3个opresult = sess.run(c)#输出结果resultprint(result)#关闭会话sess.close()

让我们来看看加上这段代码后的运行结果:这里写图片描述

输出结果正确,跟我们所想的一样。

来说说执行的过程:

  1. 在会话运行中,到语句 result = sess.run(c)的时候,程序会往上寻找c这个op

  2. 找到c= tf.matmul(a, b)时停住,这时候运行矩阵乘法op,又需要找到a,b这两个op,程序继续往上寻找。

  3. a= tf.constant([[3,3]])b= tf.constant([[2],[3]]),找到a,b这两个常量op后,再回到上一步。

  4. 最终tf.run()方法运行结束,输出result结果,关闭会话。

我们可以知道这过程就是一个一层一层调用的过程。

还有另一种会话的定义方法,此方法不需要关闭会话。

#不需要执行关闭操作with tf.Session() as sess:    # 调用sess的run方法执行矩形乘法op    # run(c)触发了图中3个op    result = sess.run(c)    print(result)

让我们看看这个方法的运行结果:这里写图片描述

两个会话的定义方法,最后的输出结果相同。选择哪一种定义方法,可以根据自己的喜好来使用。

一个很简单的小程序,用来理解会话运行的过程。

变量

变量创建及使用

前面我们接触了常量,现在我们来看一看变量的使用。

import tensorflow as tfx = tf.Variable([1,2])a = tf.constant([3,3])#增加一个减法opsub = tf.subtract(x, a)#增加一个加法opadd = tf.add(x,sub)#全局变量的初始化init = tf.global_variables_initializer()with tf.Session() as sess:    sess.run(init)    print(sess.run(sub))    print(sess.run(add))

这里我们创建了一个常量与一个变量,从这个程序中看起来,好像常量与变量的使用没什么区别,请你们注意这个代码。

init = tf.global_variables_initializer()

这个代码的作用应该很容易看出来,初始化所有的变量,在图中,如果想使用变量的话,就必须在使用之前run()这个方法。

如果不运行这个方法的话,则会提示

这里写图片描述

我们发现提示中有:Attempting to use uninitialized value Variable。尝试使用未初始化的变量,这个操作是不允许的。所以如果有需要使用变量的地方,一定要记得进行变量的初始化操作。

附上该程序运行结果:
这里写图片描述

变量第二种创建方式

前面我们说到一种变量创建的方式为tf.Variable(),但是使用这个函数前,我们必须要输入一个准确的值进去。变量变量,经常我们其实并不知道其的具体数值。所有第二种创建方式:placeholder( )方法。

我们先看一段程序:

import tensorflow as tfinput1 = tf.placeholder(tf.float32)input2 = tf.placeholder(tf.float32)output = tf.multiply(input1, input2)with tf.Session() as sess:    #feed的数据以字典的形式传入    print(sess.run(output, feed_dict={input1:7.0, input2:2.0}))

这里的placeholder()可以理解为占位符,我不知道该变量的具体数值是什么,但我知道其具体的数据类型。同时我们发现在使用placeholder()方法来创建变量的时候,不需要初始化变量的特点。

但是使用该方法时,需要用到feed_dict来传入具体数值。

本程序中input1被传入数值7.0,input2被传入数值2.0,则按我们呢的猜想来看,最后的output应该为14.0。

来看看运行结果这里写图片描述跟我们猜想的一样。这就是feed_dict的功能。

学习完常量,变量,大家可以按自己的想法,来写一些程序,运行看看结果是否正确。

原创粉丝点击