1. 程式人生 > >tensorflow學習(3):初始化

tensorflow學習(3):初始化

一、隨機數生成函式

  1. tf.truncated_normal(shape, mean, stddev)
    shape表示生成張量的維度,mean是均值,stddev是標準差。這個函式產生正太分佈(嚴格的說是高斯分佈),均值和標準差自己設定。
    這是一個截斷的產生正太分佈的函式,就是說產生正太分佈的值如果與均值的差值大於兩倍的標準差,那就重新生成。
    和一般的正太分佈的產生隨機資料比起來,這個函式產生的隨機數與均值的差距不會超過兩倍的標準差,但是一般的別的函式是可能的。

  2. tf.random_normal(shape, mean, stddev,seed) ,和上面的tf.truncated_normal區別是:
    tf.truncated_normal的輸出如字面意思是截斷的,而截斷的標準是2倍的stddev。
    舉例,當輸入引數mean = 0 , stddev =1時,
    使用tf.truncated_normal的輸出是不可能出現[-2,2]以外的點的,
    而如果shape夠大的話,tf.random_normal卻會產生2.2或者2.4之類的輸出。
    注:將seed設定成相同的值,會導致幾次隨機產生的值是相同的

  3. tf.random_uniform():平均分佈;需要指定最大值,最小值,取值型別

  4. tf.random_gamma():gamma分佈
    需要指定形狀引數alpha,尺度引數beta,取值型別需要指定形狀引數alpha,尺度引數beta,取值型別

二、常數生成函式

相比於隨機數生成函式,常數生成函式的引數要簡單很多,而且容易記憶(不過在隨機數生成函式裡面,一般用的比較多的也就是正態分佈,也只需要記憶均值和方差即可,而且一般初始化的時候都希望均值為0)
常數生成函式引數一般為2個,shape和型別

函式名稱 功能 樣例
tf.zeros 產生全0陣列 tf.zeros([2,3],int32)–>[[0,0,0],[0,0,0]]
tf.ones 產生全1陣列 tf.ones([2,3],int32)–>[[1,1,1],[1,1,1]]
tf.fill 產生給定常數的陣列 tf.zeros([2,3],9)–>[[9,9,9],[9,9,9]]
tf.constant 產生一個給定值的常量 tf.constant([1,2,3])–>[1,2,3]

三、其他

雖然在變數定義時給出了變數初始化的方法,但這個方法並沒有被真正執行,此時保留在tensor中的並沒有數字,而只是保留了shape,type,name這三個關鍵元素,要執行初始化,tensorflow提供 了一個函式:
tf.global_variables_initializer()
雖然非常長,但是根據字面意思還是能記憶的。
如下是一個完整的初始化方式:(假設是一個三層網路)

import tensorflow as tf
w1 = tf.Variables(tf.random_normal([2,3]))
w2 = tf.Variables(tf.random_normal([3,1]))
x = tf.constant([10,20])
a = tf.matmul(x,w1)
y = tf.matmul(a,w2)
with tf.Session() as sess:
	init_op = tf.global_variables_initialized()
	sess.run(y)  #輸出y值