即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

tesnorflow的基本运用

编程语言 qq360828703 15℃ 0评论
本文目录
[隐藏]

1.Tensorflow基本:

  • 使用图 (graph) 来表示计算任务.
  • 在被称之为 会话 (Session) 的上下文 (context) 中执行图.
  • 使用 tensor 表示数据.
  • 通过 变量 (Variable) 维护状态.
  • 使用 feed 和 fetch 为任意操作输入和输出数据.

2.基本使用

  • 综述

    • 使用图来表示计算任务,图中的节点称为op(operation),图必须在会话里被启动,会话将图的op分发到诸如cpu或者gpu之类的设备上,同时执行ip的方法。方法执行后返回tensor(返回的tensor是numpy对象)
    • 一个op输入n个tensor 输出n个tensor(n >=0)
    • tensor 是一个类型化的多维数组,Tensorflow程序中使用tensor代表所有数据。
  • 计算图


    tensorflow程序通常被组织成一个构建阶段,和一个执行阶段。在构建阶段,op的执行步骤被描述成一个图(图用来表示计算任务),在执行阶段,使用会话执行图中的op.


    通常在构建阶段创建一个图来表示和训练神经网络,然后再执行阶段反复执行图中的训练op.
  • 构建图

    • 第一步 创建源op(source op).源op不需要任何输入,例如常量constant.源的输出被传递给其他op做输入.
    • Python库中,op构造器的返回值代表被构造出的op输出,这些返回值可以传递给其他的op构造器作为输入.
    • tensorflow Python库中有一个默认图(default graph),op构造器可以为其增加节点.
  • 构建的图必须在会话中启动

    • 第一步创建一个session对象.如果无任何创建参数,会话构造器将启动默认图.

      sess = tf. Session()
      
    • 调用sess的run()方法来执行图

      result = sess. run(product)//product是op计算的输出.result是一个numpy类的对象
      //'run(product)' 触发了图中三个 op (两个常量 op 和一个矩阵乘法 op) 的执行.
      
    • 整个执行过程是自动的,会话负责传递 op 所需的全部输入. op 通常是并发执行的.


      可以指定设备


      with tf.device(“/gpu:1”)//如果机器上有多个gpu默认是只用第一个,其他需要指定.
    • 关闭对话

      显示关闭        sess.close()
      with关闭
                  with tf. Session() as sess:
                  result = sess. run([product] )
                  print result
      
  • 交互式使用

    • 使用 InteractiveSession 代替 Session 类, 使用


      Tensor.eval() 和 Operation.run() 方法代替 Session.run()
    • Tensor.eval() 和 Operation.run() 方法代替 Session.run()


    • # 进入一个交互式 TensorFlow 会话.


      import tensorflow as tf


      sess = tf. InteractiveSession()


      x = tf. Variable([1.0, 2.0] )


      a = tf. constant([3.0, 3.0] )


      # 使用初始化器 initializer op 的 run() 方法初始化 ‘x’


      x. initializer. run()


      # 增加一个减法 sub op, 从 ‘x’ 减去 ‘a’. 运行减法 op, 输出结果


      sub = tf. sub(x, a)


      print sub. eval()//代替session.run


      # ==> [-2. -1.]
  • 变量

    • 变量维护图执行过程中的状态信息
  • 损失值loss是交叉熵和权重衰减项的和.

  • TensorBoard

    • 通过读取TensorFlow的事件文件来运行.
    • 通过向节点添加summary操作汇集数据(scalar_summary,histogram_summary等等)
    • 使用tf.merge_all_summaries将节点的信息汇总合并,它会依据特点步骤将所有数据生成一个序列化的 Summary protobuf对象
    • 将汇总的protobuf对象传递给tf.train.Summarywriter.SummaryWriter的构造函数中包含参数logdir.所有的事件都会写到它所指的目录下.可选参数 GraphDef 。如果输入了该参数,那么 TensorBoard也会显示你的图像。

      #合并操作   
      merged_summary_op = tf. merge_all_summaries()
      #/tep/mnist_logs日志文件目录,为了显示自己的的图表,需要将Tensorflow指向此工作的日志目录,sess.log在Tensorflow中显示sess.graph图像
      summary_writer = tf. train. SummaryWriter('/tmp/mnist_logs' , sess. graph)
      #当步数为100的时候运行合并操作
      total_step = 0
      while training:
      total_step += 1
      session. run(training_op)
      if total_step % 100 == 0:
      summary_str = session. run(merged_summary_op)
      #写入数据
      summary_writer. add_summary(summary_str, total_step)
      
    • 启动Tensorflow

       python tensorflow/tensorboard/tensorboard.py --logdir=path/to/log-directory
      

      这里的参数 logdir 指向 SummaryWriter 序列化数据的存储路径。如果 logdir 目录的子目录中包含另一次运行时的数据,那么 TensorBoard 会展示所有运行的数据。一旦 TensorBoard 开始运行,你可以通过在浏览器中输入 localhost:6006 来查看 TensorBoard。


      如果你已经通过pip安装了 TensorBoard,你可以通过执行更为简单地命令来访问 TensorBoard


      tensorboard –logdir=/path/to/log-directory

  • 构建一个多层卷积网络

    • 一般来说,初始化权重和偏置时应加入轻微噪声,来打破对称性,防止零梯度


      的问题
    • 卷积

      def conv2d(x, W) :
      #strides步长padding边距
      return tf. nn. conv2d(x, W, strides=[1, 1, 1, 1] , padding='SAME' )
      

      *池化

      def max_pool_2x2(x) :
      return tf. nn. max_pool(x, ksize=[1, 2, 2, 1] ,
      strides=[1, 2, 2, 1] , padding='SAME' )     
      

转载请注明:CodingBlog » tesnorflow的基本运用

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情