机器学习0004 Tensorflow中产生tensor的函数
最近在学习tensorflow,学习过程中有好多不懂的,产生tensor就是其中之一,下面是今天整理的,所有内容都在代码和注释中,其他废话不多说。
----------------
import tensorflow as tf import numpy as np sess=tf.Session() #1.tf.ones #产生形状为shape,类型为dtype,名字是name,所有值是“1”的tensor a=tf.ones(shape=[2,3], dtype=tf.float32,name=None) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 1. 1. 1.] # [ 1. 1. 1.]] ######################################## #2.tf.zeros #产生形状为shape,类型为dtype,名字是name,所有值是“0”的tensor a=tf.zeros(shape=[2,3], dtype=tf.float32,name=None) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 0. 0. 0.] # [ 0. 0. 0.]] ######################################## #3.tf.ones_like #产生一个tensor形状的,类型是dtype,所有值是“1”的tensor vec=[[1,2,3,4],[5,6,7,8]] a=tf.ones_like(tensor=vec, dtype=tf.float32, name=None, optimize=True) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 1. 1. 1. 1.] # [ 1. 1. 1. 1.]] ######################################## #4.tf.zeros_like #产生一个tensor形状的,类型是dtype,所有值是“0”的tensor a=tf.zeros_like(tensor=a, dtype=tf.float32, name=None, optimize=True) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 0. 0. 0. 0.] # [ 0. 0. 0. 0.]] ######################################## #5.tf.fill #产生一个形状是dims,所有值是value的tensor a=tf.fill(dims=[2,3], value=3.14159, name=None) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 3.14159012 3.14159012 3.14159012] # [ 3.14159012 3.14159012 3.14159012]] ######################################## #6.tf.constant #产生一个形状是shape,类型是dtype,值是value的常量tensor,这个有点难解释,看下方运行结果 #(1) a=tf.constant(value=88, dtype=tf.float32, shape=[6], name=None) print(sess.run(a)) # [ 88. 88. 88. 88. 88. 88.] #(2) a=tf.constant(value=[88,99], dtype=tf.float32, shape=[6], name=None) print(sess.run(a)) # [ 88. 99. 99. 99. 99. 99.] #(3) a=tf.constant(value=[88,99,11,22,33,44], dtype=tf.float32, shape=[6], name=None) print(sess.run(a)) # [ 88. 99. 11. 22. 33. 44.] #(4) #a=tf.constant(value=[88,99,11,22,33,44,55,66,77], dtype=tf.float32, shape=[6], name=None) #print(sess.run(a)) # ValueError: Too many elements provided. Needed at most 6, but received 9 直接报错 #(5) a=tf.constant(value=88, dtype=tf.float32, shape=[2,3], name=None) print(sess.run(a)) # [[ 88. 88. 88.] # [ 88. 88. 88.]] #(6) a=tf.constant(value=[1,2], dtype=tf.float32, shape=[2,3], name=None) print(sess.run(a)) # [[ 1. 2. 2.] # [ 2. 2. 2.]] #(7) a=tf.constant(value=[1,2,3], dtype=tf.float32, shape=[2,3], name=None) print(sess.run(a)) # [[ 1. 2. 3.] # [ 3. 3. 3.]] #(8) a=tf.constant(value=[1,2,3,4,5,6], dtype=tf.float32, shape=[2,3], name=None) print(sess.run(a)) print('#'*40)#华丽分割线 # [[ 1. 2. 3.] # [ 4. 5. 6.]] ######################################## #7.tf.random_normal #和这个类似的还有: #tf.truncated_nomal 截断正态分布,产生的值在[mean-2*dev,mean+2*dev]区间内 #tf.random_uniform 平均分布 #tf.random_gamma 伽马分布 #tf.random_poisson 泊松分布 #产生一个形状是shape,均值是mean的,标准差是stddev,类型是dtype的值符合正态分布的tensor a=tf.random_normal(shape=[2,3], mean=0, stddev=2.0, dtype=tf.float32, seed=None, name=None) b=sess.run(a) print(b) print("mean=",np.mean(b,keepdims=False))#计算平均值 print("stddev=",np.std(b,keepdims=False))#计算标准差 #注意:以下结果仅供参考,每次产生的都不太一样,产生的值服从正态分布,当经过大量的数据后,效果会更稳定 # [[-1.06130075 3.85585999 2.9854815 ] # [-1.93925571 2.28367829 -2.51560712]] # mean= 0.601476 # stddev= 2.51796 a=tf.random_normal(shape=[5000], mean=0, stddev=2.0, dtype=tf.float32, seed=None, name=None) b=sess.run(a) print("mean=",np.mean(b,keepdims=False))#计算平均值 print("stddev=",np.std(b,keepdims=False))#计算标准差 print('#'*40)#华丽分割线 #下面是经过产生5000个数据的某几次运行结果,mean趋近于0 ,std趋近于2.0 #mean= -0.0181304 stddev= 1.97549 #mean= 0.0371914 stddev= 2.00946 #mean= -0.0146296 stddev= 1.98888 ######################################## #8.tf.random_shuffle #随机打乱,只对一维有效 a=tf.random_shuffle(value=[1,2,3,4,5,6,7,8,9,10], seed=None, name=None) b=tf.random_shuffle(value=[[1,2,3,4,5],[6,7,8,9,10]], seed=None, name=None) print(sess.run(a)) print(sess.run(b)) print('#'*40)#华丽分割线 #[ 9 5 2 3 7 1 8 10 6 4] # [[ 1 2 3 4 5] # [ 6 7 8 9 10]] ######################################## #9.tf.random_crop #随机裁剪,产生一个形状为size的tensor,从value中随机选取连续的形状为size的区域进行剪裁 a=tf.random_crop(value=[1,2,3,4,5,6,7,8,9,10], size=[4],seed=None, name=None) print(sess.run(a)) print('#'*40)#华丽分割线 # [6 7 8 9] 也可能是 [5 6 7 8] [4 5 6 7]等等 ######################################## sess.close()