實驗3-4 數據結構-張量
1)已知兩個張量[1,3,5,7]和[2,4,4,8],編寫一個模型,計算兩個張量的加法,輸出結果,并在tensorboard中顯示
2)已知張量[1,2,3,4,5,6,7,8,9,10,11,12]有12個元素,利用tf.reshape()將其形狀轉換為[2,3,2]的三維張量
要求:程序+截圖
1)已知兩個張量[1,3,5,7]和[2,4,4,8],編寫一個模型,計算兩個張量的加法,輸出結果,并在tensorboard中顯示
①第一步
TensorBoard是TensorFlow自帶的一個強大的可視化工具,也是一個web應用程序套件。通過TensorFlow程序運行過程中產生的日志文件可視化TensorFlow的程序運行狀態,它與TensorFlow跑在兩個不同的進程中。
啟動tensorboard:
打開anaconda prompt:
激活環境activate tensorflow
切換到根目錄:cd /
切換到日志存放的目錄:cd log
查看文件:dir
啟動tensorboard:tensorboard --logdir=C:\log
TensorBoard目前支持7種可視化,即SCALARS、IMAGES、AUDIO、GRAPHS、
DISTRIBUTIONS、HISTOGRAMS、EMBEDDINGS,這七種可視化的主要功能如下:
lSCALARS:展示訓練過程中的準確率、損失值、權重/偏置的變化情況
lIMAGES:展示訓練過程中的圖像
lAUDIO:展示訓練過程中的音頻
lGRAPHS:展示模型的數據流圖,以及訓練在各個設備上消耗的內存和時間
lDISTRIBUTIONS:展示訓練過程中記錄的數據的分布圖
lHISTOGRAMS:展示訓練過程中記錄的數據的柱狀圖
lEMBEDDINGS:展示此向量后的投影分布
計算圖的概念
計算圖實際上描述的是需要依次完成的計算單元以及這些計算單元之間的相互依賴關系。由一組節點和一組有向邊構成。
①每一個計算都被稱為節點(operation,簡稱op)
②節點之間的邊描述了計算之間的依賴關系
③一個節點獲得0 個或多個張量,產生0 個或多個張量
計算圖描述了一組需要依次序完成的計算單元以及這些計算單元之間相互依賴的關系。圖中的節點表示某一具體的計算單元,如張量以及張量之間的乘積,點積等。
計算圖中的節點就是操作(Operation)
一次加法是一個操作
一次乘法是一個操作
構建一些變量的初始值也是一個操作
每個運算操作都有屬性,它在構建圖的時候就需要確定下來
操作也可以和計算設備綁定,指定操作在某個設備上執行
操作之間存在順序關系,這些操作之間的依賴就是“邊”
如果操作A的輸入是操作B執行的結果,那么這個操作A就依賴于操作B。
TensorBoard的啟動:
不需要額外安裝,安裝TensorFlow時已自動完成。
在Anaconda Prompt中先進入日志存放的目錄,再運行TensorBoard,并將日志的地址指向程
序日志輸出的地址,命令為:tensorboard--logdir= /path/log(路徑自己定)
啟動tensorboard服務的端口默認為為6006,
通過--port參數可以改變啟動服務的端口
②第二步
import tensorflow as tf
#清除default graph和不斷增加的節點
tf.reset_default_graph()#logdir改為自己機器上的合適路徑
logdir = 'C:/log'
#定義一個簡單的計算圖,實現兩個張量的加法
a = tf.constant([1,3,5,7],dtype = tf.int32)
b = tf.constant([2,4,4,8],dtype = tf.int32)
result = tf.add(a,b)
with tf.Session() as sess:print(sess.run(result))
#生成一個寫日志的writer,并將當前的TensorFlow計算圖寫入日志
writer = tf.summary.FileWriter(logdir,tf.get_default_graph())
writer.close()
③第三步
TensorBoard是一個在本地啟動的服務,啟動完成后在瀏覽器輸入網址:http://localhost:6006(一般都是電腦名稱)即可進行訪問。
查看TensorBoard內所執行完畢的計算圖
?
2)已知張量[1,2,3,4,5,6,7,8,9,10,11,12]有12個元素,利用tf.reshape()將其形狀轉換為[2,3,2]的三維張量
import tensorflow as tf #導入tensorflow類庫,別名為tf
#定義c1是一維張量,共有12個元素
c1 = tf.constant([1,2,3,4,5,6,7,8,9,10,11,12],dtype = tf.float32,name = "c1")
c2 = tf.reshape(c1,[2,3,2])
with tf.Session() as sess:sess.run(tf.global_variables_initializer())print(sess.run(c1))print(sess.run(c2))
?