本文主要内容来自于斯坦福大学课程CS20,有兴趣的同学请点击CS20。
一、Python 原生类型
TensorFlow接受了Python自己的原生数据类型,例如Python中的布尔值类型,数值数据类型(整数,浮点数)和字符串类型。单一值将转换为0维张量(标量),列表值将转换为1维张量(向量),列表套列表将被转换成2维张量(矩阵)等等,以下示例来自于TensorFlow for Machine Intelligence.
t_0 = 19 # Treated as a 0-d tensor, or "scalar"
tf.zeros_like(t_0) # ==> 0
tf.ones_like(t_0) # ==> 1
t_1 = [b"apple", b"peach", b"grape"] # treated as a 1-d tensor, or "vector"
tf.zeros_like(t_1) # ==> [b'' b'' b'']
tf.ones_like(t_1) # ==> TypeError
t_2 = [[True, False, False],
[False, False, True],
[False, True, False]] # treated as a 2-d tensor, or "matrix"
tf.zeros_like(t_2) # ==> 3x3 tensor, all elements are False
tf.ones_like(t_2) # ==> 3x3 tensor, all elements are True
二、TensorFlow原生类型
就像Numpy一样,TensorFlow也有属于自己的数据类型,你会在TensorFlow中看到诸如tf.int32, tf.float32除了这些之外,还有一些很有意思的数据类型例如tf.bfloat, tf.complex, tf.quint.下面是全部的TensorFlow数据类型,截图来自tf.DType
三、Numpy数据类型
你可能已经注意到了Numpy和TensorFlow有很多相似之处。TensorFlow在设计之初就希望能够与Numpy有着很好的集成效果。Numpy软件包现在已经成为数据科学的通用语言。
TensorFlow数据类型很多也是基于Numpy的,事实上,如果你令 np.int32==tf.int32将会返回True.你也可以直接传递Numpy数据类型直接给TensorFlow中的ops。
tf.ones([2, 2], np.float32) ==> [[1.0 1.0], [1.0 1.0]]
请记得,我们的好朋友tf.Session.run(),要求的输入对象是一个Tensor但是它的输出是一个Numpy数组。事实上,在绝大多数场合,你可以同时使用TensorFlow类型和Numpy类型。
将数据传递到TensorFlow时,我们可以将数据转换为适当的类型,但某些数据类型仍然难以正确转换,例如复数。 因此,通常将人工定义的张量对象创建为NumPy数组。 但是,我们还是建议尽可能使用TensorFlow类型。