zoukankan      html  css  js  c++  java
  • TensorFlow计算图,张量,会话基础知识

    import tensorflow as tf
    get_default_graph = "tensorflow_get_default_graph.png"
    # 当前默认的计算图 tf.get_default_graph
    print(tf.get_default_graph())
    
    # 自定义计算图
    # tf.Graph
    
    # g1中定义名字为v的变量 初始化为0
    g1 = tf.Graph()
    with g1.as_default():
        v = tf.get_variable("v", shape=[1],
                            initializer=tf.zeros_initializer())
    
    # g2中定义名字为v的变量 初始化为1
    g2 = tf.Graph()
    with g2.as_default():
        v = tf.get_variable("v", shape=[1],
                            initializer=tf.ones_initializer())
    
    # initialize_all_variables  Use `tf.global_variables_initializer` instead.
    # 在计算图g1中读取变量v的取值  result is[ 0.]
    with tf.Session(graph=g1) as sess:
        # tf.initialize_all_variables().run()
        tf.global_variables_initializer().run()
        with tf.variable_scope("", reuse=True):
            print(sess.run(tf.get_variable("v")))
    
    # 在计算图g2中读取变量v的取值  result is [1.]
    with tf.Session(graph=g2) as sess:
        # tf.initialize_all_variables().run()
        tf.global_variables_initializer().run()
        with tf.variable_scope("", reuse=True):
            print(sess.run(tf.get_variable("v")))
    
    '''
    #计算图可以隔离张量和计算也可以指定计算设备
    g=tf.Graph()
    #指定GPU
    with g.device("/gpu:0"):
        result=a+b
    
    '''

    2、张量

    import tensorflow as tf
    
    #tensor 张量 零阶张量是标量scalar 一阶张量是向量vector n阶张量理解为n维数组
    #张量在TensorFlow中不是直接采用数组的形式,只是运算结果的引用。并没有保存数组,保存的是如何得到这些数字的计算过程
    
    #tf.constan是一个计算,结果为一个张量,保存在变量a中
    a=tf.constant([1.0,2.0],name="a")
    b=tf.constant([2.0,3.0],name="b")
    
    result=a+b
    print(result)
    #Tensor("add:0", shape=(2,), dtype=float32)
    
    result=tf.add(a,b,name="add")
    print(result)
    #Tensor("add_1:0", shape=(2,), dtype=float32)
    #张量保存三个属性  名字name(唯一标识)  维度shape  类型 dtype
    #张量的命名是node:src_output形式给出,node是节点名称,src_output是表示张量来自节点第几个输出
    #add_1:0 说明是add节点的第一个输出(编号从0开始)
    #shape=(2,) 以为数组,长度为2
    
    #dtype=float32 每个张量类型唯一,不匹配将报错
    '''
    a=tf.constant([1,2],name="a")
    b=tf.constant([2.0,3.0],name="b")
    result=a+b
    print(result)
    #ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("b_1:0", shape=(2,), dtype=float32)'
    '''
    
    #result.get_shape 获取张量的维度
    print(result.get_shape)
    # result
    # <bound method Tensor.get_shape of <tf.Tensor 'add_1:0' shape=(2,) dtype=float32>>
    
    #当计算图构造完成后,张量可以获得计算结果 (张量本身没有存储具体的数字)
    
    
    #使用session来执行定义好的运算 (也就是张量存储了运算的过程,使用session执行运算获取结果)
    #创建会话
    sess=tf.Session()
    res=sess.run(result)
    print(res)
    #result is [ 3.  5.]
    #关闭会话是本地运行使用到的资源释放
    sess.close()
    
    #也可以使用python上下文管理器机制,吧所有的计算放在with中,上下文管理器推出是自动释放所有资源,可以避免忘记sess.close()去释放资源
    
    with tf.Session() as sess:
        print(sess.run(result))
    #[ 3.  5.]
    
    
    #as_default 通过默认的会话计算张量的取值 会话不会自动生成默认的会话,需要手动指定 指定后可以通过eval来计算张量的取值
    sess =tf.Session()
    with sess.as_default():
        print(result.eval())
    #[ 3.  5.]
    
    #ConfigProto来配置需要生成的会话
    #allow_soft_placement GPU设备相关
    #log_device_palcement 日志相关
    config=tf.ConfigProto(allow_soft_placement=True,
                          log_device_placement=True)
    sess1=tf.InteractiveSession(config=config)
    sess2=tf.Session(config=config)
    #Device mapping: no known devices.  tensorflowcorecommon_runtimedirect_session.cc
    #Device mapping: no known devices.
    
    
    #PY35	ensorflowcoreplatformcpu_feature_guard.cc:137] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX AVX2
  • 相关阅读:
    hdu 5723 Abandoned country 最小生成树 期望
    OpenJ_POJ C16G Challenge Your Template 迪杰斯特拉
    OpenJ_POJ C16D Extracurricular Sports 打表找规律
    OpenJ_POJ C16B Robot Game 打表找规律
    CCCC 成都信息工程大学游记
    UVALive 6893 The Big Painting hash
    UVALive 6889 City Park 并查集
    UVALive 6888 Ricochet Robots bfs
    UVALive 6886 Golf Bot FFT
    UVALive 6885 Flowery Trails 最短路
  • 原文地址:https://www.cnblogs.com/xiaoboge/p/10457054.html
Copyright © 2011-2022 走看看