1. 程式人生 > >Tensorflow學習筆記——張量、圖、常量、變數(一)

Tensorflow學習筆記——張量、圖、常量、變數(一)

1 張量和圖

TensorFlow是一種採用資料流圖(data flow graphs),用於數值計算的開源軟體庫。其中 Tensor 代表傳遞的資料為張量(多維陣列),Flow 代表使用計算圖進行運算。資料流圖用「結點」(nodes)和「邊」(edges)組成的有向圖來描述數學運算。「結點」一般用來表示施加的數學操作,但也可以表示資料輸入的起點和輸出的終點,或者是讀取/寫入持久變數(persistent variable)的終點。邊表示結點之間的輸入/輸出關係。這些資料邊可以傳送維度可動態調整的多維資料陣列,即張量(tensor)。

a = tf.constant(2, tf.int16)
b = tf.constant(4, tf.float32)

graph = tf.Graph()
with graph.as_default():
    a = tf.Variable(8, tf.float32)
    b = tf.Variable(tf.zeros([2,2], tf.float32))
    
with tf.Session(graph=graph) as session:
    tf.global_variables_initializer().run()
    print(f)
    print(session.run(a))
    print(session.run(b))

#輸出:
>>> <tf.Variable 'Variable_2:0' shape=() dtype=int32_ref>
>>> 8
>>> [[ 0.  0.]
>>>  [ 0.  0.]]

在 Tensorflow 中,所有不同的變數和運算都是儲存在計算圖。所以在我們構建完模型所需要的圖之後,還需要開啟一個會話(Session)來執行整個計算圖。在會話中,我們可以將所有計算分配到可用的 CPU 和 GPU 資源中。

如下所示程式碼,我們宣告兩個常量 a 和 b,並且定義一個加法運算。但它並不會輸出計算結果,因為我們只是定義了一張圖,而沒有執行它:

  1. a=tf.constant([1,2],name="a")
  2. b=tf.constant([2,4],name="b")
  3. result = a+b
  4. print(result)

#輸出:Tensor("add:0", shape=(2,), dtype=int32)

下面的程式碼才會輸出計算結果,因為我們需要建立一個會話才能管理 TensorFlow 執行時的所有資源。但計算完畢後需要關閉會話來幫助系統回收資源,不然就會出現資源洩漏的問題。下面提供了使用會話的兩種方式:

a=tf.constant([1,2,3,4])
b=tf.constant([1,2,3,4])
result=a+b
sess=tf.Session()
print(sess.run(result))
sess.close

#輸出 [2 4 6 8]

with tf.Session() as sess:
    a=tf.constant([1,2,3,4])
    b=tf.constant([1,2,3,4])
    result=a+b
    print(sess.run(result))

#輸出 [2 4 6 8]

2 常量和變數

TensorFlow 中最基本的單位是常量(Constant)、變數(Variable)和佔位符(Placeholder)。常量定義後值和維度不可變,變數定義後值可變而維度不可變。在神經網路中,變數一般可作為儲存權重和其他資訊的矩陣,而常量可作為儲存超引數或其他結構資訊的變數。下面我們分別定義了常量與變數:

a = tf.constant(2, tf.int16)
b = tf.constant(4, tf.float32)
c = tf.constant(8, tf.float32)

d = tf.Variable(2, tf.int16)
e = tf.Variable(4, tf.float32)
f = tf.Variable(8, tf.float32)

g = tf.constant(np.zeros(shape=(2,2), dtype=np.float32))

h = tf.zeros([11], tf.int16)
i = tf.ones([2,2], tf.float32)
j = tf.zeros([1000,4,3], tf.float64)

k = tf.Variable(tf.zeros([2,2], tf.float32))
l = tf.Variable(tf.zeros([5,6,5], tf.float32))


在上面程式碼中,我們分別聲明瞭不同的常量(tf.constant())和變數(tf.Variable()),其中tf.float 和tf.int tftf分別聲明瞭不同的浮點型和整數型資料。而 tf.ones() 和 tf.zeros() 分別產生全是 1、全是 0 的矩陣。我們注意到常量 g,它的宣告結合了 TensorFlow 和 Numpy,這也是可執行的。

w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))


以上語句宣告一個2 行 3 列的變數矩陣,該變數的值服從標準差為 1 的正態分佈,並隨機生成。

現在,我們可以應用變數來定義神經網路中的權重矩陣和偏置項向量:

weights = tf.Variable(tf.truncated_normal([256 * 256, 10]))
biases = tf.Variable(tf.zeros([10]))
print(weights.get_shape().as_list())
print(biases.get_shape().as_list())
#輸出
>>>[65536, 10]
>>>[10]

相關推薦

Tensorflow學習筆記——常量變數

1 張量和圖 TensorFlow是一種採用資料流圖(data flow graphs),用於數值計算的開源軟體庫。其中 Tensor 代表傳遞的資料為張量(多維陣列),Flow 代表使用計算圖進行運算。資料流圖用「結點」(nodes)和「邊」(edges)組成的有向圖來描

Python學習筆記八 面向對象高級編程

tin 學習筆記 不可 __str__ 有一個 類的屬性 -- pes 實例名 參考教程:廖雪峰官網https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000 一、使

學習筆記之使用LNMP安裝DISCUZ論壇系統簡述

① 首先使用yum install -y apr* autoconf automake bison bzip2 bzip2* compat* cpp curl curl-devel fontconfig fontconfig-devel freetype f

《C++ Primer Plus》學習筆記——第六章 分支語句和邏輯運算子

本章內容包括: if 語句 if else 語句 邏輯運算子 &&、||和! cctype字元函式庫 條件運算子: ? : switch 語句 continue和break語句 讀取數字的迴圈 基本檔案輸入和輸出 if 語句 if (tes

Unity學習筆記1 簡易2D橫版RPG遊戲製作

這個教程是參考一個YouTube上面的教程做的,原作者的教程做得比較簡單,我先參考著做一遍,畢竟我也只是個初學者,還沒辦法完全自制哈哈。不過我之前也看過一個2D平臺遊戲的系列教程了,以後會整合起來,做出一個類似冒險島那樣的遊戲。 原視訊連結:點選開啟連結   這是個YouT

JAVA學習第四十五課 — 其它對象APISystemRuntimeMath類

大整數 協調 1.5 tint ava 字符串 垃圾 void lol 一、System類 1. static long currentTimeMillis() 返回以毫秒為單位的當前時間。 實際上:當前時間與協調世界時 1970 年 1 月 1 日午夜之間的時間差(

angularjs手機webapp 利用input拍照,相簿選擇顯示 上傳圖片

執行後的截圖: html程式碼 <ul class="list_img"> <li ng-repeat="imageSrc in imgshows track by $index"> <img n

Linux用戶組和權限管理

linux用戶、組使用Linux是一個Multi-tasks(多任務)、 Multi-Users(多用戶)的系統每一個登陸者或使用者都有用戶標識、密碼(所謂3A) 所謂的3A: Authentication(驗證機制) Authorization(授權機制) Audition(審計)組的概

Storm概念原理詳解及其應用BaseStorm

when 結構 tails 並發數 vm 虛擬機 cif 異步 優勢 name 本文借鑒官文,添加了一些解釋和看法,其中有些理解,寫的比較粗糙,有問題的地方希望大家指出。寫這篇文章,是想把一些官文和資料中基礎、重點拿出來,能總結出便於大家理解的話語。與大多數“wordc

懷孕產檢的那些事

div 報告 mage 北京大學 之前 clas spa 測試 class 小孩在北京大學深圳醫院出生的,產檢也是在那裏,以下說的都是北大醫院的情況,每個醫院可能不相同,想起多少寫多少吧。第一次寫,寫的很亂。 最開始呢是發現媳婦沒有來月經,然後就去藥店買了早早孕試紙(選擇在

Linux 文件管理命令語法參數實例全匯總

rwx 界面 endif 群組 new 才有 func {} ans 命令:cat cat 命令用於連接文件並打印到標準輸出設備上。 使用權限 所有使用者 語法格式 cat [-AbeEnstTuv] [--help] [--version] fileName 參數

Python學習筆記7 頭文件的添加規則轉載

www. nbsp .html 一個 情況 str tno sys AS 轉載自:https://www.cnblogs.com/taurusfy/p/7605787.html **********************************************

Linux學習筆記之Python3的安裝以及建立虛擬環境CentOS

body { background: #f4f4f4 } .title { width: 100%; background: #5cb85c; padding: 5px; font-size: 20px; margin: 5px } .sub_title { width: 99%; background: #

結構體共用體和列舉型別

定義描述三維座標點(x,y,z)的結構體型別變數,完成座標點的輸入和輸出,並求出兩點之間的距離   程式碼如下: #include <iostream> #include <cmath> #define N 2 using namespace std; stru

學習筆記】深入理解js原型和閉包3——prototype原型

既typeof之後的另一位老朋友! prototype也是我們的老朋友,即使不瞭解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。   在咱們的第一節(深入理解js原型和閉包(1)——一切皆是物件)中說道,函式也是一種物件。他也是屬性的集合,你也可以

學習筆記】深入理解js原型和閉包8——簡述【執行上下文】上

什麼是“執行上下文”(也叫做“執行上下文環境”)?暫且不下定義,先看一段程式碼: 第一句報錯,a未定義,很正常。第二句、第三句輸出都是undefined,說明瀏覽器在執行console.log(a)時,已經知道了a是undefined,但卻不知道a是10(第三句中)。 在一段js程式碼拿過來真正一句一

學習筆記】深入理解js原型和閉包9—— 簡述【執行上下文】下

繼續上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的內容。 上一篇我們講到在全域性環境下的程式碼段中,執行上下文環境中有如何資料: 變數、函式表示式——變數宣告,預設賦值為undefined; this——賦值; 函式宣告

學習筆記】深入理解js原型和閉包11——執行上下文棧

繼續上文的內容。 執行全域性程式碼時,會產生一個執行上下文環境,每次呼叫函式都又會產生執行上下文環境。當函式呼叫完成時,這個上下文環境以及其中的資料都會被消除,再重新回到全域性上下文環境。處於活動狀態的執行上下文環境只有一個。 其實這是一個壓棧出棧的過程——執行上下文棧。如下圖:   可

學習筆記】深入理解js原型和閉包12——簡介【作用域】

提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫程式碼的時候,不要在“塊”裡面宣告變數,要在程式碼的一開始就宣告好了。以避免發生歧義。如: &nbs

學習筆記】深入理解js原型和閉包15——閉包

前面提到的上下文環境和作用域的知識,除了瞭解這些知識之外,還是理解閉包的基礎。 至於“閉包”這個詞的概念的文字描述,確實不好解釋,我看過很多遍,但是現在還是記不住。 但是你只需要知道應用的兩種情況即可——函式作為返回值,函式作為引數傳遞。 第一,函式作為返回值 如上程式碼,bar函式作為返回值,賦