1. 程式人生 > >tensorflow常用函式筆記

tensorflow常用函式筆記

1. tf.Session() 與 tf.InteractiveSession()

用tf.Seesino()構建會話,要定義好所有的operation之後,才能構建會話

用tf.InteractiveSession()構建會話,可以先構建一個會話再定義operation,適用於互動式環境。

2. tf.ConfigProto()

建立session時,對session進行引數設定

with tf.Session(config=tf.ConfigProto(...),...)

#tf.ConfigProto()的引數
log_device_placement=True #是否列印裝置分配日誌
allow_soft_placement=True #如果你指定的裝置不存在,允許TF自動分配裝置
tf.ConfigProto(log_device_placement=True,allow_soft_placement=True)

3. tf.get_variable() 與 tf.variable_scope()

tf.get_variable() 用於建立或獲取變數

(1)用於建立變數時,與tf.Variable()功能基本相同

v=tf.get_variable("v",shape=[1],initializer.constant(1.0))
v=tf.Variable(tf.constant(1.0,shape=[1]),name="v")
  • 相同點:建立變數的過程基本類似,呼叫tf.Variable()時所用的維度以及初始化的引數與tf.get_variable()基本類似
  • 不同點:指定變數名稱的引數不同,對於tf.Variable()變數名稱是一個可選的引數,通過name="v"的形式給出;而tf.get_variable()中變數名是必須要有的引數,函式根據變數名建立或者獲取引數。

(2)用於獲取變數時

先通過tf.variable_scope()生成一個上下文管理器,並指明需求的變數在這個上下文管理器中

然後直接用tf.get_variable()獲取已經生成的變數

#通過tf.variable_scope()控制tf.get_variable(),以獲取或建立變數

#名為“zx”的上下文控制器
with tf.variable_scope("zx"):
    v=tf.get_variable("v",[1],initializer=tf.constant_initializer(1.0))#在“zx”中定義名為“v”的變數

with tf.variable_scope("zx"):
    v=tf.get_variable("v",[1])#通過tf.get_variable()在“zx”中建立“v”變數,失敗,因為在“zx”中已經有一個了

如果上下文管理器中已經有了想要的變數,想要通過tf.get_variable()獲取它,可通過設定引數reuse的值為True來獲取:

with tf.variable_scope("zx",reuse=True):
    v1=tf.get_variable("v",[1])

print v==v1#輸出為True

(3)其他

  1.  tf.variable_scope()只能用於獲取已經建立了的變數
  2. 若tf.variable_scope()引數reuse=False或reuse=None建立上下文管理器,則tf.get_variable()可用於建立新變數,但不可建立已有變數(即同名變數)

4. tf.contrib.layers.xavier_initializer()

返回一個用於初始化權重的初始化程式“Xavier”,用來保持每一層梯度大小基本相同

xavier_initializer(
    uniform=True,
    seed=None,
    dtype=tf.float32
)

引數:

  • uniform:使用uniform或者normal分佈進行隨機初始化
  • seed:用來生成隨機數的種子
  • dtype:只支援浮點數

返回值:

  • 初始化的權重矩陣

5. tf.placeholder()

通式:tf.placeholder(dtype,shape=None,name=None)

可將這個函式中的值當作形參,在具體用到的時候再給它們賦值

引數:

  • dtype::資料型別,通常是dtype=tf.float32,tf.float64浮點型別
  • shape:資料形狀,也就是資料維度,預設為None
  • name:名稱
x=tf.placeholder(tf.float32,shape=(1024,1024))
y=tf.matmul(x,x)#矩陣相乘

with tf.Session() as sess:
    print(sess.run(y))#ERROR,因為此時x沒有具體賦值

    rand_array=np.random.rand(1024,1024)
    print(sess.run(y,feed_dict={x:rand_array}))#輸出成功

返回:tensor型別

 6. tf.train.AdamOptimizer()

實現了Adam演算法的優化器

7. tf.nn.xw_plus_b()

tf.nn.xw_plus_b((x,weights)+biases)相當於tf.matmul(x,weights)+biases

import tensorflow as tf

x=[[1, 2, 3],[4, 5, 6]]  
w=[[ 7,  8],[ 9, 10],[11, 12]]  
b=[[3,3],[3,3]]

res1=tf.nn.xw_plus_b(x,w,[3,3])
res2=tf.matmul(x,w)+b
init_op=tf.initializer_all_variables()

with tf.Session() as sess:
    #執行初始化操作
    sess.run(init_op)
    print(sess.run(res1))
    print(sess.run(res2))


輸出:
[[ 61  67]
 [142 157]]
[[ 61  67]
 [142 157]]

8. feed_dict

給使用placeholder創建出來的tensor賦值。

未完待續