TensorFlow常量、變數和佔位符詳解(學習筆記)
本文章只是學習筆記,不具有任何參考性
http://c.biancheng.net/view/1885.html 學習網站
基本的TensorFlow提供了一個庫定義和執行對張量的各種數學運算。
張量:可以理解為一個n維矩陣,所有型別的資料。包括標量,向量和矩陣都是特殊型別的張量。
TensorFlow 支援一下三種型別的張量:
1.常量:常量是其值不能改變的張量
2.變數:當一個量在會話中的值需要更新時,使用變數來表示。例如,在神經網路中,權重需要在訓練期間更新,可以通過將權重宣告為變數來實現
變數在使用前需要被顯示初始化。另外需要注意的是,常量儲存在計算圖的定義中,每次載入圖時都會載入相關變數。換句話說,它們是佔用記憶體的。另一方面,變數又是分開儲存的。它們可以儲存在引數伺服器上。
3.佔位符:用於將值輸入TensorFlow圖中。他們可以和feed_dict 一起使用來輸入資料。在訓練神經網路時,它們通常用於提供新的訓練樣本。在繪畫中執行計算圖時,可以為佔位符賦值。這樣在構建一個計算圖時不需要真正地輸入資料。需要注意的是佔位符不包含任何資料,因此不需要初始化它們。
TensorFlow 常量
宣告一個標量常量:
t_1 = tf.constant(4)
一個形如[1,3]的常量向量可以用如下程式碼宣告:
t_2 = tf.constant([4,3,2])
要建立一個所有元素為零的張量,可以使用tf.zero()函式。這個語句可以建立一個形如[M,N]的零元素矩陣,資料型別(dtype)可以是32位,float32等
例如:
zero_t = tf.zeros([2,3],tf.int32)
還可以建立與現有Numpy陣列或張量具有相同形狀的張量常量
tf.zeros_like(t_2)
tf.ones_like(t_2)
建立一個所有元素都設為1的張量。下面的語句即建立一個形如[M,N]、元素均為1的矩陣:
例如:
tf.ones([2,3],tf.int32)
更進一步,還有以下語句:
- 在一定範圍內生成一個聰初值到終值等差排布的序列:
tf.linspace(start,stop,num)
相應的值位(stop-start/(num-1))例如:
range_t = tf.linspace(2.0,5.0,0.5)
- 從開始(預設值=0)生成一個數字序列,增量為delta (預設值=1),直到終值(但不包括終值)
tf.range(start,limit,delta)
range_t = tf.range(5)
#resualt:[0,1,2,3,4]
TensorFlow 允許建立具有不同分佈的隨機張量:
1.使用以下語句建立一個具有一定均值(預設值=0.0)和標準差(預設值=1.0)、形狀為[M,N] 的正態分佈隨及陣列:
shape:輸入張量的形狀,必選
mean:正態分佈的均值,預設為0
stddev:正態分佈的標準差
dtype:輸出的型別,預設為tf.float32
seed:隨機數種子,是一個整數,當設定之後,每次生成的隨機數都一樣
name: 操作的名稱
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
t_random = tf.random_normal([2,3],mean=2.0,stddev=4,seed=12)
#2.建立一個具有一定均值(預設值=0.0)和標準差(預設值=1.0)、形狀[M,N]的截尾正態分佈隨機陣列:
t_random =tf.truncated_normal([1,5],stddev=2,seed=12)
#3.要在種子的[minval (default=0),maxval] 範圍內建立形狀為[M,N] 的給定伽馬分佈隨機陣列,請執行如下語句:
4.要將給定的張量隨機剪為指定的大小,使用以下語句:
tf.random_crop(t_random[2,5],seed=12)
這裡t_random 是一個已經定義好的張量。這將導致隨及從張量 t_random 中裁剪出一個大小為[2,5]的張量。
很多時候需要以隨機的順序來呈現訓練樣本,可以使用tf.random.shuffle() 來沿著它的第一維隨機排列張量。如果t_random 是想要重新排列的張量,使用下面的程式碼:
tf.set_random_seed(54)
TensorFlow 變數
它們通過使用變數類來建立。變數的定義還包括應該初始化的常量/隨機值。下面的程式碼中建立了兩個不同的張量變數t_a和t_b。 兩者將被初始化為形狀為[50,50]的隨機均勻分佈,最小值=0,最大值=10:
rand_t = tf.random_uniform([50,50],0,10,seed=0)
t_a = tf.Variable(rand_t)
t_b = tf.Variable(rand_t)
注意變數通常在神經網路中表示權重和偏置
定義兩個變數的權重和偏置。
weights = tf.Variable(tf.random_noraml([100,100],stddev=2))
bias = tf.Variable(tf.zeros[100],name = 'biases')
在前面的例子中,都是利用一些常量來初始化變數,也可以指定一個變數來初始化另一個變數。下面的語句將利用前面定義的權重來初始化weight2:
weight2 = tf.Variable(weights.initialized_value(),name='w2')
變數的定義將指定變數如何被初始化,但是必須顯式初始化所有的宣告變數。在計算圖的定義中通過宣告初始化操作物件來實現:
intial_op = tf.global_variables_initializer()
每個變數也可以在執行途中單獨來初始化
bias = tf.Variable(tf.zeros([100,100]))
with tf.Session() as sess:
sess.run(bias.initializer)
儲存變數:使用Saver類儲存變數,定義一個Saver操作物件
saver = tf.train.Saver()
TensorFlow 佔位符
它們用於將資料提供給計算圖。
tf.placeholder(dtype,shape=None,name=None)
dtype 定佔位符的資料型別,並且必須宣告佔位符時指定。在這裡,為x定義一個佔位符並計算 y=x *2,
x = tf.placeholder("float")
y = x * 2
data_x = tf.random_uniform([4,5],10)
with tf.Session() as sess:
x_data = sess.run(data_x)
print(sess.run(y,feed_dict{x:x_data}))
需要注意的是,所有常量、變數和佔位符將在程式碼的計算圖部分中定義。如果在定義部分使用 print 語句,只會得到有關張量型別的資訊,而不是它的值。
為了得到相關的值,需要建立會話圖並對需要提取的張量顯式使用執行命令,如下所示:
print(sess.run(t_1))
#Will print the value of t_1 defined in step 1
相關文章
- [go 學習筆記] 二、變數、常量Go筆記變數
- Tensorflow學習筆記: 變數及共享變數筆記變數
- TensorFlow學習(二):變數常量型別變數型別
- Nginx變數詳解(學習筆記十九)Nginx變數筆記
- TensorFlow筆記(2) 常量與變數【僅供自學】筆記變數
- Swift學習筆記(三十三)——常量引數,變數引數和inout引數Swift筆記變數
- CUDA學習筆記之變數限制符筆記變數
- 變數與常量 - Go 學習記錄變數Go
- 自學PHP筆記(四) PHP變數和常量PHP筆記變數
- 自學PHP筆記(四) PHP常量和變數PHP筆記變數
- go 學習筆記之有意思的變數和不安分的常量Go筆記變數
- PHP變數與常量學習PHP變數
- 學習筆記:數位dp筆記
- 數位DP 學習筆記筆記
- 【學習筆記】數位DP筆記
- 引數佔位符
- 比特幣學習筆記————附錄1 交易指令碼的操作符、常量和符號比特幣筆記指令碼符號
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- Solidity語言學習筆記————7、單位和全域性變數Solid筆記變數
- 【GO學習二】包,函式,常量和變數Go函式變數
- 《從零開始學Swift》學習筆記(Day 8)——小小常量、變數大作用Swift筆記變數
- Swift學習筆記(二十四)——常量陣列和常量字典Swift筆記陣列
- TensorFlow 學習筆記筆記
- 詳解 Go 語言中 20 個佔位符!Go
- Python 佔位符格式化詳解Python
- Robot Framework(12)- 詳細解讀 RF 的變數和常量Framework變數
- Python學習筆記 - 變數Python筆記變數
- javascript學習筆記,二、變數JavaScript筆記變數
- C++ 預設引數和佔位符C++
- 認真一點學 Go:17. 詳解 20 個佔位符Go
- TensorFlow學習筆記(二)筆記
- tensorflow學習筆記3筆記
- Tensorflow學習筆記一筆記
- Tensorflow學習筆記二筆記
- 《Java核心技術 卷I》學習筆記2:資料型別、變數與常量Java筆記資料型別變數
- java常量和變數Java變數
- 《從零開始學Swift》學習筆記(Day 6)——哎呀常量和變數都該什麼時候用啊?Swift筆記變數
- Activiti 學習筆記五:流程變數筆記變數