tensorflow常用函式筆記
阿新 • • 發佈:2018-11-11
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)其他
- tf.variable_scope()只能用於獲取已經建立了的變數
- 若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賦值。
未完待續