Tensorflow 张量

Submitted by Lizhe on Wed, 08/16/2017 - 16:09

张量是n维矩阵的抽象

简单来说, 1D张量也就是一个向量, 2D张量是一个矩阵

之前的例子中我们使用了两个参数, 分别是5和3

如果将两个参数合并成一个1D张量

import tensorflow as tf

sess = tf.Session()

a = tf.constant([5,3],name="user_input_2")
b = tf.reduce_prod(a, name="mul_op")
c = tf.reduce_sum(a, name="add_op")
d = tf.add(b,c, name="sum_op")
print(d)
print(sess.run(d))
writer = tf.train.SummaryWriter('./my_graph3',sess.graph)

writer.close()
sess.close()

 

455

 

在Tensorflow中, Tensor对象等价于张量, 所有在节点(Op) 之间传递的数据都为Tensor对象.

TensorFlow的Op可以直接接收Python数据类型, 如整数和字符串等, Op会将这些Python数据类型直接转换成张量

对于Python的原生类型,

单个数值 会被转化为 0阶 张量 (或标量)

数值列表 会被转化为 1阶 张量 (向量)

如果是列表构成的列表(二维数组) 会被转化为 2阶 张量 (矩阵)

 

TensoFlow的数据类型实际上要比Python提供的基础数据类型多, 因此, TensorFlow不得不去推断你期望的是何种数据类型.

例如python的整数类型对应的TensorFlow类型有8位,16位,32位, 64位的, 所以需要借助NumPy数组手工定义Tensor对象

 

 

张量对象的shape属性表示了张量的维度和每个维度的长度

例如 [2,3] 表示了2维张量 (矩阵) 的形状,其中第一个维度上的长度是2, 第二个维度的长度是3

无论是使用元祖(2,3)还是列表[2,3] 都可以表示shape

使用None表示任意长度

[None] 任意长度的向量

[None,3] 任意行,3列的矩阵

下面的代码定义了一个1维 张量 (向量)

import tensorflow as tf

sess = tf.Session()

a = tf.constant([5,3])
shape = tf.shape(a, name="myshape")

print(sess.run(shape))

取得shape后输出

[root@localhost tensor]# python shape.py
[2]
[root@localhost tensor]#