如果把Tensorflow翻译成中文,意思是流动的张量, 第零阶张量为标量,第一阶张量为矢量, 第二阶张量则成为矩阵,在tensorflow中流动的数据大多都以这三种数据结构流动,那么如何去申明一个tensor,在tensorflow中提供了很多的方法,我简要的介绍其中一些申明方法。
申明固定tensor
1. zero_tensor = tf.zeros([2, 3])
#申明一个2行3列的全零矩阵
2. ones_tensor = tf.ones([3, 4])
#申明一个3行4列的全一矩阵
3. filled_tensor = tf.fill([2, 3], 42)
#申明一个2行3列的数值全为42的矩阵
4. constant_tensor = tf.constant([1,2,3])
#申明一个[1,2,3]数列
***
打印结果
1.print(sess.run(zero_tensor))
[[ 0. 0. 0.]
[ 0. 0. 0.]]
2.print(sess.run(ones_tensor))
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
3.print(sess.run(filled_tensor))
[[42 42 42]
[42 42 42]]
4.print(sess.run(constant_tensor))
[1 2 3]
***
申明同维tensor
1.zeros_similar = tf.zeros_like(constant_tensor )
#申明一个形状完全和constant_tensor 相同的全零数列
2.ones_similar = tf.ones_like(constant_tensor )
#申明一个形状完全和constant_tensor 相同的全一数列
***
打印结果
1.print(sess.run(zeros_similar))
[0 0 0]
2.print(sess.run(ones_similar))
[1 1 1]
***
申明序列tensor
1.linear_tensor = tf.linspace(1.0, 3.0, 3)
#申明含3个数并且间隔相等的数列,以1开头,以3结尾。
2.integer_seq_tensor = tf.range(start=6, limit=15, delta=3)
#申明一个以6开头,以15结尾,公差为3的等差数列
***
打印结果
1.print(sess.run(linear_tensor))
[ 1. 2. 3.]
2.print(sess.run(integer_seq_tensor))
[ 6 9 12]
***
这里需要注意的是 tf.linspace(start, end, num)这个函数start和end必须是浮点型,而num必须是整型
申明随机tensor
1.randunif_tensor = tf.random_uniform([2, 3],minval=0, maxval=1)
#随机申明一个2行3列,数值在0到1之间,呈均匀分布的矩阵
2.randnorm_tensor = tf.random_normal([2, 3],mean=0.0, stddev=1.0)
#随机申明一个2行3列,期望为0,标准偏差为1,呈正态分布的矩阵
3.shuffled_output = tf.random_shuffle(constant_tensor)
#保持数据形状不变,随机打乱,比如把constant_tensor [1 2 3]随机打乱
4.cropped_output = tf.random_crop(ones_tensor,[3,3])
#将数据剪裁成其他形状,把ones_tensor 剪裁成一个3行3列的矩阵
***
打印结果
1.print(sess.run(randunif_tensor))
[[ 0.97704864 0.58669806 0.89186013]
[ 0.08044159 0.61465633 0.6720506 ]]
2.print(sess.run(randnorm_tensor))
[[ 0.50780362 -0.06368136 0.78358406]
[ 0.43803024 -0.29855973 1.14529634]]
3.print(sess.run(shuffled_output))
[1 3 2]
4.print(sess.run(cropped_output))
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
***
tf.random_crop(input_tensor, crop_size)这个函数剪裁后的矩阵在任意一个维度上的数据个数都不能超过剪裁前的矩阵
使用函数申明
我们也可以使用tensorflow中内置的函数tf.convert_to_tensor将其他array类型的数据转换成矩阵
changeto_tensor = tf.convert_to_tensor(np.array([[1., 2., 3.],[-3., -7.,-1.],[0., 5., -2.]]))
***
打印结果
print(sess.run(change_to_tensor))
[[ 1. 2. 3.]
[-3. -7. -1.]
[ 0. 5. -2.]]
***
如何使用tensor
即然我们已经申明好了各种形状的tensor,接下来的问题就是如何使用它,其实也很简单,将tensor 转换成Tensorflow里的变量,就可以放心大胆的使用它了,一行代码
my_var = tf.Variable(input_tensor)
巧妇难为无米之炊,tensor就像大米。有了tensor,你才能用tensoflow里面提供的方法,去烹调出机器学习领域的满汉全席。