tensorflow基本术语解释

计算图、tensor节点、操作、常量、变量,以及占位符

整体流程

计算图、tensor节点、操作

TensorFlow是一个采用数据流图,用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。TensorFlow的核心编程可以分解为两个离散的部分:

  • 构建计算图
  • 执行计算图

计算图(computational graph)是一系列被安排成图(graph)中节点(node)的TensorFlow操作(操作也是节点,操作可以认为就是各种计算如加减乘除等)。每个节点都以0或多个张量作为输入,并产生一个张量作为输出。节点的一种类型就是constant。例如,下面的语句构建了一个非常简单的计算图,其中创建了两个浮点数张量node1和node2。

  1. node1 = tf.constant(3.0, dtype=tf.float32)  
  2. node2 = tf.constant(4.0# also tf.float32 implicitly  

注意node1和node2是两个节点(张量),要取得它们的值就必须对它们进行evaluate,而要对node进行evaluate,我们就必须在一个session中执行计算图。一个session是对TensorFlow运行时的状态和控制所进行的封装。


常量、变量,以及占位符

2.1 常量:constant

  1. node1 = tf.constant(3.0, dtype=tf.float32)  
  2. node2 = tf.constant(4.0# also tf.float32 implicitly  

2.2 变量:Variable

Variables允许我们向图中增加可训练的参数。构建Variables一般要指定类型和初始值,例如:

[python]  view plain  copy
  1. W = tf.Variable([.3], dtype=tf.float32)  
  2. b = tf.Variable([-.3], dtype=tf.float32)  
  3. x = tf.placeholder(tf.float32)  
  4. linear_model = W * x + b  
(1)Variable和constant区别

Variable和constant的一个区别就在于constant在你调用tf.constant时就会被初始化,而且它们的值不会再改变。相反,在你调用tf.Variable时,Variable并不会被初始化。为了初始化你程序中的Variables,你必须显式地调用下面这个特殊的语句

[python]  view plain  copy
  1. init = tf.global_variables_initializer()  
  2. sess.run(init)  

(2)Variable和get_variable区别

W = tf.Variable(tf.constant(0.0,shape=[self.vocab_size,self.embedding_size]), trainable=False, name="W")

Variable必须明确指定初始值。

如果需要把预先的tensor值赋给刚才定义的Variable可以加上如下语句

self.embedding_init = tf.assign(W,self.embedding_placeholder)


W = tf.get_variable("W",[vocab_size,embedding_size],trainable=False)

不同于tf.Variable那样直接传值,tf.get_variable()用initializer来创建变量。一个initializer 就是一个函数,

创建一个形状是shape的张量。

Variable和get_variabletrainable参数都表示该变量是否是随着模型不断迭代。


2.3 占位符:placeholders

一个计算图还可以通过接受外部输入的方法来进行参数化,这被称为placeholders(占位符),一个placeholder可以理解为一种承诺,即后面会提供数值。例如:

[python]  view plain  copy
  1. a = tf.placeholder(tf.float32)  
  2. b = tf.placeholder(tf.float32)  
  3. adder_node = a + b  # + provides a shortcut for tf.add(a, b)  

然后就像函数调用一样,当我们evaluate这个图的时候,就要为placeholders提供输入值( 也就是最后执行计算图的时候需要把数据feed进去 ):

[python]  view plain  copy
  1. print(sess.run(adder_node, {a: 3, b: 4.5}))  
  2. print(sess.run(adder_node, {a: [13], b: [24]}))  

参考:

http://blog.csdn.net/baimafujinji/article/details/78048858

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值