1. 程式人生 > 其它 >tensorflow載入資料的三種方式 之 TF生成資料的方法

tensorflow載入資料的三種方式 之 TF生成資料的方法

Tensorflow資料讀取有三種方式:

  • Preloaded data: 預載入資料 Feeding:
  • Python產生資料,再把資料餵給後端。 Reading from
  • file: 從檔案中直接讀取 具體可以參考:極客學院的資料讀取

這裡介紹下:

TF生成資料的方式

正常情況下,使用tf.initialize_all_variables()初始化變數,在完全構建好模型並載入之後才執行這個操作。生成資料的主要方法如下 1)如果需要利用已經初始化的引數給其他變數賦值 TF的變數有個initialized_value()屬性,就是初始化的值,使用方法如下:

# 原始的變數  
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),name="weights")  
# 創造相同內容的變數  
w2 = tf.Variable(weights.initialized_value(), name="w2")  
# 也可以直接乘以比例  
w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice") 

tf.set_random_seed(seed) 設定產生隨機數的種子。 1. 生成tensor:

①tf.zeros(shape, dtype=tf.float32, name=None)
#tf.zeros([2, 3], int32) ==> [[0, 0, 0], [0, 0, 0]]
②tf.ones(shape, dtype=tf.float32, name=None)
#tf.ones([2, 3], int32) ==> [[1, 1, 1], [1, 1, 1]]
③tf.zeros_like(tensor, dtype=None, name=None)
新建一個與給定的tensor型別大小一致的tensor,其所有元素為1。# 'tensor' is [[1, 2, 3], [4, 5, 6]] 
tf.ones_like(tensor) ==> [[1, 1, 1], [1, 1, 1]]
④tf.constant(value, dtype=None, shape=None, name='Const')建立一個常量tensor,先給出value,可以設定其shape
# Constant **1-D** Tensor populated with value list. 
tensor = tf.constant([1, 2, 3, 4, 5, 6, 7]) => [1 2 3 4 5 6 7] 
# Constant **2-D** tensor populated with scalar value -1. 
tensor = tf.constant(-1.0, shape=[2, 3]) => [[-1. -1. -1.] [-1. -1. -1.]

⑤tf.fill(dims, value, name=None)
建立一個形狀大小為dim的tensor,其初始值為value
# Output tensor has shape [2, 3]. 
 fill([2, 3], 9) ==> [[9, 9, 9],[9, 9, 9]]
⑥tf.ones_like(tensor, dtype=None, name=None)

2.生成序列

⑦tf.range(start, limit, delta=1, name='range')
返回一個tensor等差數列,該tensor中的數值在start到limit之間,不包括limit,delta是等差數列的差值。start,limit和delta都是int32型別。
# 'start' is 3 
# 'limit' is 18 
# 'delta' is 3
tf.range(start, limit, delta) ==> [3, 6, 9, 12, 15] 
# 'limit' is 5 start is 0
tf.range(start, limit) ==> [0, 1, 2, 3, 4]
⑧tf.linspace(start, stop, num, name=None)返回一個tensor,該tensor中的數值在start到stop區間之間取等差數列(包含start和stop),如果num>1則差值為(stop-start)/(num-1),以保證最後一個元素的值為stop。其中,start和stop必須為tf.float32或tf.float64。num的型別為int。
tf.linspace(10.0, 12.0, 3, name="linspace") => [ 10.0 11.0 12.0]

3.生成隨機數

⑨tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
返回一個tensor其中的元素的值服從正態分佈。
seed: A Python integer. Used to create a random seed for the distribution.See set_random_seed for behavior。
⑩tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
返回一個tensor其中的元素服從截斷正態分佈
理解:shape表示生成張量的維度,mean是均值,stddev是標準差。這個函式產生正太分佈,均值和標準差自己設定。這是一個截斷的產生正太分佈的函式,就是說產生正太分佈的值如果與均值的差值大於兩倍的標準差,那就重新生成。和一般的正太分佈的產生隨機資料比起來,這個函式產生的隨機數與均值的差距不會超過兩倍的標準差,但是一般的別的函式是可能的。
⑩①tf.random_uniform(shape, minval=0.0, maxval=1.0, dtype=tf.float32, seed=None, name=None)
返回一個形狀為shape的tensor,其中的元素服從minval和maxval之間的均勻分佈。
⑩②tf.random_shuffle(value, seed=None, name=None)
對value(是一個tensor)的第一維進行隨機化。
       [[1,2],            [[2,3],
        [2,3],     ==>     [1,2],
        [3,4]]             [3,4]] 

引數說明:參考官網:連結

shape: 用於表示維度,通常為一個int32型別陣列,或者一個一維(1-D)的tf.int32數字.注意不能直接使用數字
dtype: 所要建立的tensor物件的資料型別
tensor: tensor物件
mean:資料型別為dtype的張量值或Python值。是正態分佈的均值。
stddev:資料型別為dtype的張量值或Python值。是正態分佈的標準差
seed:一個Python整數。是隨機種子。
name: 操作的名稱(可選)
操作案例:這裡之選擇一個操作,用with開與關
data1=tf.zeros([2, 3],tf.int32)
with tf.Session() as sess1:
    print(sess1.run(data1))
receive:
[[0 0 0]
 [0 0 0]]