tensorflow004_张量的阶和数据类型(张量的形状的改变)
TensorFlow用张量这种数据结构来表示所有的数据.你可以把一个张量想象成一个n维的数组或列表.一个张量有一个静态类型和动态类型的维数.张量可以在图中的节点之间流通.其实张量更代表的就是一种多位数组。
阶
在TensorFlow系统中,张量的维数来被描述为阶.但是张量的阶和矩阵的阶并不是同一个概念.张量的阶(有时是关于如顺序或度数或者是n维)是张量维数的一个数量描述.比如,下面的张量(使用Python中list定义的)就是2阶.
t = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
数据类型
Tensors有一个数据类型属性.你可以为一个张量指定下列数据类型中的任意一个类型:
形状和变换
通过tf.tensor.shap
属性获得tensor的形状
0维:() 1维:(5) 2维:(5,6) 3维:(2,5,6)
plt = tf.placeholder(tf.float32,[None,3])
#打印tensor的形状
print(plt.shape)
形状的改变
静态形状改变:tf.tensor.set_shape()
- 当张量的形状固定时就不能再次修改了
- 相同维度之间的形状的改变 1D->1D 2D->2D
plt = tf.placeholder(tf.float32,[None,3])
#打印tensor的形状
print(plt.shape)
#静态改变形状
plt.set_shape([2,3])
print(plt.shape)
此时该张量形状已经固定,当再次修改时就会报错,这就需要使用动态形状改变
动态改变:
- 动态形状改变可以去创建一个新的张量但是一定要注意元素的数量要匹配
- 不同维度之间的形状的改变 1D->2D 2D->3D
tf.reshape(plt,[3,2])
#动态形状改变
plt_reshape = tf.reshape(plt, [3,2])
print(plt_reshape.shape)
完整代码
#coding:utf-8
import tensorflow as tf
plt = tf.placeholder(tf.float32,[None,3])
#打印tensor的形状
print(plt.shape)
#静态改变形状
plt.set_shape([2,3])
print(plt.shape)
#plt.set_shape([3,2]) 会报错,因为静态形状改变只适用在形状不固定的张量
#动态形状改变
plt_reshape = tf.reshape(plt, [3,2])
print(plt_reshape.shape)