zoukankan      html  css  js  c++  java
  • python之深度学习(tensorflow)图,会话

    import tensorflow as tf
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把报错的这个警告等级降低
    #图:默认已经注册,一组表示tf.Operation(节点)计算单元的对象和tf.Tensor(张量)操作之间的数据单元的对象,所以一张图包含两个:
    #一个是OP一个是Tensor
    #获取一个图的方法有:tf.get_default_graph()
    a = tf.constant(8.0)
    b = tf.constant(5.0)
    sum1 = tf.add(a,b)
    gra = tf.get_default_graph() #<tensorflow.python.framework.ops.Graph object at 0x000001F51CBD9438>
                                 #说白了其实还是给你一个地址,你以后的操作的程序就在这个内存块内进行
    print(gra)
    with tf.Session() as sess:
        print(sess.run(sum1)) #打印13
        #接下来我们看看每个Operation的图也就是地址是不是在一起的,答案是一样的,都在这个地址上0x000001F7992AA438>
        print(a.graph)
        print(sum1.graph)
        print(sess.graph)
    
    #哪些是Operation呢:标量运算(加减乘除等数学运算);向量运算;矩阵运算;带状态的运算;神经网络的组件;控制流等等
    #只要是使用tensorflow的API定义的函数都是OP,例如上边的a,b,sum1,gra等等
    #什么是Tensor呢:就是指的是数据,例如上边的a = tf.constant(8.0)中的8.0就是Tensor类型的
    #所以可以抽象的理解成:OP是一个载具,Tensor是一个被载的数据
    import tensorflow as tf
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把报错的这个警告等级降低
    #placeholder是一个占位符,feed_dict是一个字典
    plt = tf.placeholder(tf.float32,[None,3])#一个未知维列表,未知的行但是有3列张量类型是tf.float32
    with tf.Session() as sess:
        print(sess.run(plt,feed_dict={plt:[[1,2,3],[4,5,6]]}))
    
    #哪些是Operation呢:标量运算(加减乘除等数学运算);向量运算;矩阵运算;带状态的运算;神经网络的组件;控制流等等
    #只要是使用tensorflow的API定义的函数都是OP,例如上边的a,b,sum1,gra等等
    #什么是Tensor呢:就是指的是数据,例如上边的a = tf.constant(8.0)中的8.0就是Tensor类型的
    #所以可以抽象的理解成:OP是一个载具,Tensor是一个被载的数据
    #run()方法:run(fetches,feed_dict=None,graph=None):是运行OP和Tensor
    #参数:fetches是嵌套的列表,元组
    #参数:feed_dict允许调用者覆盖图中指定的张量的值,提供给placeholder使用

    张量的动态形状和静态形状:

    张量的静态形状:创建一个张量初始状态的形状,方法有:tf.get_shape():获取静态的形状,tf.set_shape() :更新Tensor对象的静态形状

    张量的动态形状:描述原始张量在执行过程中的一种形态,tf.reshape():创建一个不同动态的新张量

    import tensorflow as tf
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把报错的这个警告等级降低
    
    plt = tf.placeholder(tf.float32,[None,3])
    shape1 = plt.get_shape()
    print(shape1)  #(?, 3)
    plt.set_shape([4,3])
    print(plt.get_shape()) #(4, 3)
    #再次设置形状,他会报错,对于静态形状来说只能设置一次形状
    plt.set_shape([5,3])
    print(plt.get_shape()) #(4, 3)
    
    
    with tf.Session() as sess:
        pass

    接下来试验一下张量的动态性状:需要特别注意的是:动态完后的元素个数和分配前是一样 的,4 * 3 = 3 * 4

    import tensorflow as tf
    import os
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'#把报错的这个警告等级降低
    
    plt = tf.placeholder(tf.float32,[None,3])
    shape1 = plt.get_shape()
    print(shape1)  #(?, 3)
    plt.set_shape([4,3])
    print(plt.get_shape()) #(4, 3)
    #再次设置形状,他会报错,对于静态形状来说只能设置一次形状
    # plt.set_shape([5,3])
    # print(plt.get_shape()) #(4, 3)
    #接下来就是动态形状了
    plt_reshape = tf.reshape(plt,[3,4])
    print(plt_reshape.get_shape()) #(3, 4)
    
    with tf.Session() as sess:
        pass

    总结一下:

    1.转化静态形状的时候一维只能到一维,二维只能到二维,三维只能到三维

    2.对于已经固定的静态形状的张量或者变量,不能再次设置他的静态形状

    3.tf.reshape(张量对象,[新设置的维度]),元素的个数不能不匹配

  • 相关阅读:
    关于前端复用的构思
    react-redux单元测试(基于react-addons-test-utils,mocha)
    关于windows下NODE_ENV=test无效的情况解决办法
    javascript柯里化及组合函数~
    如何使用函数式编程?
    redux源码解析-函数式编程
    react案例->新闻移动客户端--(react+redux+es6+webpack+es6的spa应用)
    jQuery高级技巧——性能优化篇
    jQuery高级技巧——DOM操作篇
    使用checkbox实现纯CSS下拉框
  • 原文地址:https://www.cnblogs.com/boost/p/13490065.html
Copyright © 2011-2022 走看看