Tensorflow基础知识

基本使用

  • 使用图(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,b
c = tf.matmul(a, b)

#输出结果
print(result)

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

这里写图片描述

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

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

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

#定义一个会话, 启动默认的图
sess = tf.Session()

#调用sess的run方法执行矩形乘法op
#run(c)触发了图中3个op
result = sess.run(c)

#输出结果result
print(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 tf
x = tf.Variable([1,2])
a = tf.constant([3,3])
#增加一个减法op
sub = tf.subtract(x, a)
#增加一个加法op
add = 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 tf
input1 = 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的功能。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值