美文网首页
Tensorflow的基本使用

Tensorflow的基本使用

作者: 浩宇Harry | 来源:发表于2018-07-14 16:37 被阅读0次

    使用tensorflow 你必须明白tensorflow

    • 使用图(graph)来表示计算任务
    • 在被称为会话 Session 的上下文context 中执行图
    • 使用tensor来表示数据,放在图的节点中
    • 通过变量(Variable)来维护状态
    • 使用feed和fetch 可以为任意的操作(arbitrary operation)赋值或者从其中获取数据

    这个图,其实就是计算图,具体原理不需要知道,计算图就是flow ,也可以认为是工作流图,op(节点)的执行步骤 就被描述成一个图 ,tensor之间的转换就是op处的计算来做的

    计算图 Tensorflow

    一个TensorFlow图描述来计算的过程,为了进行计算,图必须在会话 session里被启动,会话将op分发到CPU GPU这样的设备上,同时执行op的方法,这些方法被执行后,将产生的tensor返回,在Python中 返回的 是 numpy ndarray对象

    TensorFlow程序经常被组织成一个构建阶段和一个执行阶段,在构建阶段,op的执行步骤被描述成一个图,在执行阶段,使用会话执行执行图中的op,因此会话开启执行的环境
    因此 我们通常在构建阶段,创一个神经网络,然后在执行阶段通过session反复调用这个神经网络,执行图中的op

    构建图

    构建图的第一步,是创建源op,源op不需要任何的输入,例如常量constant 源op的输出被传递给其他op做运算

    matrix1=tf.constant([[3.,3.]]) 1x2矩阵
    matrix2=tf.constant([[2.] , [2.]])  2x1矩阵
    product=tf.matmul(matrix1,matrix2)
    

    启动图

    sess = tf.session() 
    result=sess.run(product) 执行上面定义的三个运算
    print result 打印获取的矩阵
    任务完成 关闭会话:
    sess.close()
    

    With 代码块

    with tf.Session() as sess:
      result = sess.run([product])
      print result
    

    With代码块,自动获取和释放资源,除了显式调用close外,也可以使用with代码块来自动完成关闭释放资源动作

    变量 Variables

    # 创建一个变量, 初始化为标量 0.
    state = tf.Variable(0, name="counter")
    #疑问一:这个name 有什么用?
    
    # 创建一个 op, 其作用是使 state 增加 1
    
    one = tf.constant(1)
    new_value = tf.add(state, one)
    update = tf.assign(state, new_value)
    # 注意这里的add 和 给 
    # 而且无论怎样 都需要定义 操作op 然后 才可以跑 任何方法 都是有返# 回值的
    # 启动图后, 变量必须先经过`初始化` (init) op 初始化,
    # 首先必须增加一个`初始化` op 到图中.
    init_op = tf.initialize_all_variables()
    # 包含变量的情况 必须在session会话中 先执行此操作 
    
    # 启动图, 运行 op
    with tf.Session() as sess:
      # 运行 'init' op
      sess.run(init_op)
      # 打印 'state' 的初始值
      print sess.run(state)
      # 运行 op, 更新 'state', 并打印 'state'
      for _ in range(3):
        sess.run(update)
        print sess.run(state)
    #疑问2 直接print state 不行吗? 为什还要sess.run一下
    

    绘制操作图,然后一步步 用session 执行 或许 只跑最终定义的一个op就行

    Fetch 和 Feed

    with tf.Session() as sess:
      result = sess.run([mul, intermed])
      print result
    # 取回多个值 
    

    feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 "feed" 操作, 标记的方法是使用 tf.placeholder() 为这些操作创建占位符.

    #也就是说 feed 和 placeholder 结合使用 否则placeholder 定义的随时#被替换的 tensor就没有意义 始终没有输入值的话
    input1 = tf.placeholder(tf.float32)
    input2 = tf.placeholder(tf.float32)
    output = tf.mul(input1, input2)
    
    with tf.Session() as sess:
      print sess.run([output], feed_dict={input1:[7.], input2:[2.]})
    
    # 输出:
    # [array([ 14.], dtype=float32)]
    

    相关文章

      网友评论

          本文标题:Tensorflow的基本使用

          本文链接:https://www.haomeiwen.com/subject/roiepftx.html