TensorFlow 基础概念

  初识TensorFlow,看了几天教程后有些无聊,决定写些东西,来夯实一下基础,提供些前进动力。session

1、Session.run()和Tensor.eval()的区别:
  最主要的区别就是可使用sess.run()一步获取多个Tensor值,而tensor.eval()只能获取当前tensor值。
好比:
  labels = [1,2,3]
  x = tf.expand_dims(labels, 0)
  y = tf.expand_dims(labels, 1)
  z = tf.expand_dims(labels, -1)
  print(sess.run([x,y,z]))
  注:对于tensor t,在使用t.eval()时,等价于:tf.get_default_session().run(t)。
  此外,还有一个用法,operation.run(),等价于:tf.get_default_session().run(op)。operation是什么呢,就是计算图中的一个计算节点,定义一个计算的公式。分布式

  好比:
  train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
  train_step.run(feed_dict={x:batch_xs,y_:batch_ys,keep_prob:0.5})
注:调用operation.run()和Tensor.eval()时,其参数是session,但该参数可选,默认是None,标示进程中默认的Session。那么如何设置默认session呢?两种方式:
  一、with tf.Session():
  二、 sess = tf.Session()
    with sess.as_default():
    print(sess.run([x,y,z]))
    sess.close()函数

  此外,还能够设置默认图
  graph = tf.Graph()学习

  with graph.as_default():教程

2、graph和session的必要性进程

  Python的计算效率比较低,而深度学习须要大量的迭代计算。因此,一般会使用函数库,如Numpy,把相似矩阵乘法这样的复杂运算使用其余外部语言(好比C++)来实现。但计算完成后从外部切换回Python仍然开销很大。因此,先把全部的计算操做公式定义好(这个用图描述,只是初级都用默认图),而后所有一次性在Python外运行计算(这个在定义的会话session中完成)。这是graph和session的由来及用处。get

  session有三种定义方式:
  一、该方式须要调用sess.close()来关掉sess。
  sess=tf.Session()
  init=tf.global_variables_initializer()
  sess.run(init)深度学习

  sess.close()it

  二、该方式建立context,当上下文退出时自动释放,不须要手动关掉session。
  with tf.Session() as sess:
  init=tf.global_variables_initializer()
  sess.run(init)
  三、该方式能够在sess中定义operation。
  sess = tf.InteractiveSession()io

  session能够有多个,graph也能够有多个,具体以下:
  Session类的构造函数:tf.Session.__init__(target='',graph=None,config=None)
  若是建立Session时没有指定Graph,则Session会加载默认的Graph。若是在一个进程中建立了多个Graph(这是会的,可能有多层,多个结构,或分布式处理),则须要建立不一样的Session来加载每一个Graph,而每一个Graph也能够加载在多个Session中进行计算。一个session中只能有一个图,而一个图能够放在多个session中。

  g1 = tf.Graph()
  with g1.as_default():
  c1 = tf.constant([1.0,1.0])
  with tf.Graph().as_default() as g2:
  c2 = tf.constant([2.0,2.0])

  with tf.Session(graph=g1) as sess1:
  print sess1.run(c1)
  with tf.Session(graph=g2) as sess2:
  print sess2.run(c2)

  Graph中的operation定义好以后,看sess.run()要运行哪一个,运行哪一个就触发哪一个。

相关文章
相关标签/搜索