Tensor 在TF中用来存储数据,有点像Spark 中的RDD,用来表示一个集合,里面可能在计算后才有数据,它是TF中常用的数据结构,作为网络层的输入和输出。
把python中的数据变成一个Tensor:
import tensorflow as tf
print(tf.constant([[1,1], [2,2]]))
输出:
tf.Tensor(
[[1 1]
[2 2]], shape=(2, 2), dtype=int32)
生成服从正态分布的随机数:
tensor_random = tf.random.truncated_normal(shape=[4, 3], mean=0, stddev=1)
print(tensor_random)
输出:
tf.Tensor(
[[-0.6169643 -0.48704767 0.64570683]
[ 0.854015 -0.07537854 1.2956442 ]
[ 1.3869987 -0.12490827 0.5543784 ]
[-1.2535942 0.82831544 -1.324502 ]], shape=(4, 3), dtype=float32)
还有一类型变量tf.Variable,可以通过Tensor构造:
var1 = tf.Variable(tensor_random, name='var1')
print(var1)
输出:
<tf.Variable 'var1:0' shape=(4, 3) dtype=float32, numpy=
array([[-0.6169643 , -0.48704767, 0.64570683],
[ 0.854015 , -0.07537854, 1.2956442 ],
[ 1.3869987 , -0.12490827, 0.5543784 ],
[-1.2535942 , 0.82831544, -1.324502 ]], dtype=float32)>
在tf1中使用变量前需要先初始化:
sess = tf.Session()
sess.run(tf.global_variables_initializer()) # 初始化
print(sess.run(var1))
表示稀疏矩阵使用tf.SparseTensor,有3个参数来描述稀疏矩阵:
- indices 描述有值的位置的下标
- values 描述各个有值位置的值
- dense_shape 形状
例如定一个2行32列,在第一行的第二列和第二行的第一列有值,分别是1,2:
sparse_tensor = tf.SparseTensor(indices=[[0, 1], [1, 0]], values=[1, 2], dense_shape=[2, 32])
print(tf.sparse.to_dense(sparse_tensor)) # 稀疏矩阵转换稠密矩阵
输出:
tf.Tensor(
[[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]], shape=(2, 32), dtype=int32)
还有方法tf.sparse.from_dense
把稠密矩阵转换为稀疏矩阵。