zoukankan      html  css  js  c++  java
  • tensorflow 基础学习一:计算图的概念

    tensorflow中计算图的概念

    tensorflow程序一般分为两个阶段:

      1、定义计算图所有的计算

      2、在session中执行计算

    在tensorflow程序中,系统会自动维护一个默认的计算图,可以通过tf.get_default_graph()函数获取。以下代码展示了如何获取

    默认计算图以及如何查看一个运算所属的计算图:

    import tensorflow as tf 
    a=tf.constant([1.0,2.0], name='a') # 定义一个常量使用tf.constant方法 b=tf.constant([1.0,2.0], name='b') result = a+b
    # 通过a.graph可以查看张量所属的计算图,如果没有特别指定,则属于当前默认的计算图
    print(a.graph is tf.get_default_graph()) # 输出为True

     tensorflow可以通过tf.Graph函数生成新的计算图。不同计算图上的张量和运算都不会共享

    g1=tf.Graph()
    with g1.as_default():
        # 在计算图g1中定义变量'v',并设置初始值为0。
        v=tf.get_variable('v',initializer=tf.zeros_initializer()(shape = [1]))
        
    g2=tf.Graph()
    with g2.as_default():
        # 在计算图g2中定义变量'v',并设置初始值微1。
        v=tf.get_variable('v',initializer=tf.ones_initializer()(shape = [1]))
    
    # 在计算图g1中读取变量'v'的取值
    with tf.Session(graph=g1) as sess:
        tf.global_variables_initializer().run()
        with tf.variable_scope('',reuse=True):
            # 在计算图g1中,变量'v'的取值应该为0,下一行代码会输出[0.]。
            print(sess.run(tf.get_variable('v')))
    
    # 在计算图g2中读取变量'v'的取值
    with tf.Session(graph=g2) as sess:
        tf.global_variables_initializer().run()
        with tf.variable_scope('',reuse=True):
            # 在计算图g2中,变量'v'的取值应该为1,下一行代码会输出[1.]。
            print(sess.run(tf.get_variable('v')))

    tensorflow中的计算图不仅可以用来隔离张量和计算,它还提供了管理张量和计算的机制。计算图可以通过tf.Graph.device函数来指定运行计算的设备,下面代码指定在GPU上运行加法计算:

    g=tf.Graph()
    # 指定计算运行的设备。
    with g.device('/gpu:0'):
        result=a+b

    在一个计算图中,可以通过集合(collection)来管理不同类别的资源。比如通过tf.add_to_collection函数可以将资源加入到一个或多个集合中,然后通过tf.get_collection获取集合里的资源。

    tensorflow中自动管理了一些常用的集合,如下表:

    集合名称 集合内容  使用场景
    tf.GraphKeys.VARIABLES 所有变量 持久化tensorflow模型
    tf.GraphKeys.TRAINABLE_VARIABLES 可学习的变量(一般指神经网络中的参数) 模型训练、生成模型可视化内容
    tf.GraphKeys.SUMMARIES 日志生成相关的张量 tensorflow计算可视化
    tf.GraphKeys.QUEUE_RUNNERS 处理输入的QueueRunner 输入处理
    tf.GraphKeys.MOVING_AVERAGE_VARIABLES 所有计算了滑动平均值的变量 计算变量的滑动平均值

    tensorflow中张量的概念

    tensorlfow中,所有的数据都为张量。其中,零阶张量表示标量(scalar),代表一个数;一阶张量表示向量(vector),代表一维数组;n阶张量表示一个n维数组。具体示例如下:

    # tf.constant是一个计算,这个计算的结果为一个张量,保存在变量a中。
    a=tf.constant([1.0,2.0], name='a')
    b=tf.constant([1.0,2.0], name='b')
    result = tf.add(a,b,name='add')
    print(result)
    '''
    输出:Tensor("add:0", shape=(2,), dtype=float32)
    '''

    从上述输出可以看出一个张量主要保存了三个属性:名字(name)、维度(shape)和类型(type)。其中,name属性以“node:src_output”的形式表示,node表示节点的名称,src_output表示当前张量来自节点的第几个输出。还可以通过result.get_shape函数来获取结果张量的维度信息。

    tensorflow中session的讲解

    创建session的三种方式:

    # 1、 创建一个会话
    with tf.Session() as sess:
        print(sess.run(result))
    
    # tensorflow中需要手动指定默认会话,当该会话指定后,可以通过tf.Tensor.eval函数来计算一个张量的取值。
    # 2、 创建一个默认的会话
    sess=tf.Session()
    with sess.as_default():
        print(result.eval())
    
    # 3、 创建一个会话
    sess=tf.Session() # 下面两个命令等价 print(sess.run(result)) print(result.eval(session=sess))

    # 在交互式环境下,使用设置默认会话的方法来获取张量的取值更加方便,tensorflow提供了一种在交互式环境下直接构建
    # 默认会话的函数,tf.InteractiveSession。该函数会自动将生成的会话注册为默认会话。 sess= tf.InteractiveSession() print(result.eval()) sess.close()

     使用tf.ConfigProto函数配置会话,示例如下

    config=tf.ConfigProto(allow_soft_placement=True,log_device_placement=True)
    sess1=tf.InteractiveSession(config=config)
    sess2=tf.Session(config=config)

    allow_soft_placement:一个布尔类型的参数。当为True时,在以下条件下,可以将GPU上的运算方法CPU上

      1、运算无法在GPU上执行

      2、没有GPU资源(比如本机只有一个GPU,但运算被指定在其他GPU上执行)

      3、运算输入包含对CPU计算结果的应用

    为了加强代码的可移植性,在有GPU的环境下,一般将该参数设置为True

    log_device_placement:一个布尔类型的参数。当设置为True时,日志中将会记录每个节点被安排在了那个设备上方便调试。

  • 相关阅读:
    linux本地文件上传之RZ/SZ和sftp
    sql优化
    sql server 类oracle vm_contact() 函数创建
    sql server 执行大.sql文件
    group by having和connect by
    sql server内置函数
    oracle内置函数
    oracle字符串处理函数
    oracle字符串处理相关
    团队-象棋游戏-模块开发过程
  • 原文地址:https://www.cnblogs.com/hypnus-ly/p/8040951.html
Copyright © 2011-2022 走看看