zoukankan      html  css  js  c++  java
  • TensorFlow 基础概念

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

    一、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呢?两种方式:
      1、with tf.Session():
      2、 sess = tf.Session()
        with sess.as_default():
        print(sess.run([x,y,z]))
        sess.close()

      此外,还可以设置默认图
      graph = tf.Graph()

      with graph.as_default():

    二、graph和session的必要性

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

      session有三种定义方式:
      1、该方式需要调用sess.close()来关掉sess。
      sess=tf.Session()
      init=tf.global_variables_initializer()
      sess.run(init)

      sess.close()

      2、该方式创建context,当上下文退出时自动释放,不需要手动关掉session。
      with tf.Session() as sess:
      init=tf.global_variables_initializer()
      sess.run(init)
      3、该方式可以在sess中定义operation。
      sess = tf.InteractiveSession()

      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()要运行哪个,运行哪个就触发哪个。

  • 相关阅读:
    解决Spring MVC无法接收AJAX使用PUT与DELETE请求传输的内容
    js中定时器setTimeout与setInterval使用方法经验总结
    解决ajax请求(SpringMVC后台)响应415/400/405错误
    css3 calc()的用法
    echarts2 饼图处理标签文字过长使之达到指定字数换行的目的
    在webstorm开发微信小程序之使用阿里自定义字体图标
    webstorm的一些小技巧
    前端 一些小知识,技巧总结
    用webstorm来开发微信小程序之less的配置
    js,mui,jq 操作基本的DOM
  • 原文地址:https://www.cnblogs.com/xiaoxiong-kankan/p/7606347.html
Copyright © 2011-2022 走看看