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(张量对象,[新设置的维度]),元素的个数不能不匹配