一、张量(Tensor):
1、张量的阶和数据类型
2、张量的属性:
graph 张量所属的默认图
op 张量的操作名
name 张量的字符串描述
shape 张量形状
3、张量的动态形状与静态形状
TensorFlow中,张量具有静态形状和动态形状
静态形状: 创建一个张量或者由操作推导出一个张量时,初始状态的形状 tf.Tensor.get_shape:获取静态形状 tf.Tensor.set_shape():更新Tensor对象的静态形状,通常用于在不能直接推 断的情况下
动态形状: 一种描述原始张量在执行过程中的一种形状 tf.reshape:创建一个具有不同动态形状的新张量
注:
1、转换静态形状的时候,1-D到1-D,2-D到2-D,不能跨阶数改变形状
2、 对于已经固定或者设置静态形状的张量/变量,不能再次设置静态形状
3、tf.reshape()动态创建新张量时,元素个数不能不匹配
4、生成张量
5、改变张量
6、提供给Tensor运算的数学函数
https://www.tensorflow.org/versions/r1.0/api_guides/python/math_ops
注:这些都是在1.0版本下的函数,不同版本会有些差异
二、测试代码
import tensorflow as tf import os os.environ['TF_CPP_MIN_LOG_LEVEL']='2' # 创建一张图包含了一组op和tensor,上下文环境 # op:只要使用tensorflow的API定义的函数都是OP # tensor:就指代的是数据 # g = tf.Graph() # # print(g) # with g.as_default(): # c = tf.constant(11.0) # print(c.graph) # # # 实现一个加法运算 # a = tf.constant(5.0) # b = tf.constant(6.0) # # sum1 = tf.add(a, b) # # # 默认的这张图,相当于是给程序分配一段内存 # graph = tf.get_default_graph() # # print(graph) # # # 不是op不能运行 # var1 = 2.0 # # var2 = 3 # # sum2 = var1 + var2 # # # 有重载的机制,默认会给运算符重载成op类型 # sum2 = a + var1 # # print(sum2) # # # s = tf.Session() # # # # s.run() # # s.run() # # s.close() # # # 只能运行一个图, 可以在会话当中指定图去运行 # # 只要有会话的上下文环境,就可以使用方便eval() # # # 训练模型 # # 实时的提供数据去进行训练 # # # placeholder是一个占位符,feed_dict一个字典 # plt = tf.placeholder(tf.float32, [2, 3, 4]) # # print(plt) # # with tf.Session(config=tf.ConfigProto(log_device_placement=True)) as sess: # # print(sess.run(plt, feed_dict={plt: [[1, 2, 3], [4, 5, 36], [2, 3, 4]]})) # # print(sum1.eval()) # print(a.graph) # print("---------") # print(a.shape) # print(plt.shape) # print("-------") # print(a.name) # print("-------") # print(a.op) # tensorflow:打印出来的形状表示 # 0维:() 1维:(5) 2维:(5,6) 3维:(2,3,4) # 形状的概念 # 静态形状和动态性状 # 对于静态形状来说,一旦张量形状固定了,不能再次设置静态形状, 不能夸维度修改 1D->1D 2D->2D # 动态形状可以去创建一个新的张量,改变时候一定要注意元素数量要匹配 1D->2D 1->3D plt = tf.placeholder(tf.float32, [None, 2]) print(plt) plt.set_shape([3, 2, 1]) print(plt) # plt.set_shape([2, 3]) # 不能再次修改 plt_reshape = tf.reshape(plt, [3, 3]) print(plt_reshape) with tf.Session() as sess: pass