tensorflow的主要数据结构–张量

tensorflow基于张量数据管理,张量是数学领域的概念,并且被开发为向量和矩阵的线性代数项的泛化.
具体到TensorFlow中,一个张量就是一个张量类的实例,是绑定了相关运算的一个特定类型的多维数组.
1.张量的属性–阶,形状和类型
之前已经介绍过,TensorFlow使用张量数据结构来标识所有数据.所有的张量都有一个静态的类型和动态的维数.所以你能够实时改变一个张量的内部结构.
张量的另一个属性就是只有张量类型的对象才能在计算图的节点中传递.
我们开始来讨论张量的其他属性:
(1)张量的阶
张量的阶(rank)表征了张量的纬度,但是跟矩阵的秩(rank)不一样.它表示张量的纬度的质量.
阶为1的张量等价于向量,阶为2的向量等价于矩阵,对于一个阶为2的张量,通过t[i,j]就能获取他的每个元素.对于一个阶为3的张量,需要通过t[i,j,k]进行寻址,以此类推.
(2)张量的形状
TensorFlow文档使用三个术语来描述张量的纬度:阶,形状和维数.
(3)张量的数据类型
除了纬度,张量还有一个确定的数据类型.你可以把任意一个类型指派给向量.
2.创建新的张量
我们既可以创建我们自己的张量,也可以从numpy中继承.下面的例子中,我们创建了一些numpy数组,并对他们进行简单的数学操作:
import tensorflow as tf
import numpy as np
a = tf.constant([[1,1],[2,2],[3,3]])
b = tf.constant(np.random.rand(32).astype(np.float32))
print(a)
print(b)
Tensor(“Const:0”, shape=(3, 2), dtype=int32)
Tensor(“Const_1:0”, shape=(32,), dtype=float32)
(1)从numpy数组到TensorFlow张量和从TensorFlow张量到numpy数组
TensorFlow与numpy是可互相操作的,通常调用eval()函数会返回numpy对象.该函数可以用作标准数值工具.
我们一定要注意张量对象只是一个操作结果的符号化句柄,所以他并不持有该操作的结果.因此,我们必须使用eval()方法来获得实际的值.该方法等价于session.run(tesnsor_to_eval)
我们创建两个numpy数组,并将他们转化为张量:
import tensorflow as tf
import numpy as np
sess = tf.Session()
numpy_arr = np.array([1,2,3])
tf_arr = tf.convert_to_tensor(numpy_arr,dtype=tf.int32)
print(numpy_arr)
print(tf_arr)
[1 2 3]
Tensor(“Const:0”, shape=(3,), dtype=int32)
tf.convert_to_tensor:该方法将python对象转化为tensor对象,他的输入可以是tensor对象,numpy数组,python列表和python标量.
3.与TensorFlow交互
与大多数python的模块一样,TensorFlow允许使用python的交互式控制台.