【AI學習篇】實戰深度學習(3):深度學習的數據表示

醫工薈萃,不是蘿蔔開會,融合創新才是硬道理!

預計閱讀時間: 4 分鐘

上一講中薈薈用keras演示了使用全連接神經網絡如何實現手寫數字的識別,當然這個神經網絡還是相當的"淺"。在正式開始進入深度學習前,薈薈認為作為初學者,很有必要先了解一下神經網絡裡的數據表示方法,即TensorFlow這個詞裡的Tensor(張量),以及張量的基本操作和運算方法。

上一講發出後,被吐槽太長了,看得累。。。所以這講薈薈先來說說啥是張量,下一講再說說它的基本操作及運算,再下一講正式進入深度學習。

啥叫張量(Tensor)?

前面的例子中,我們的數據都是存儲在Numpy數組中的,在深度學習中,我們對這種多維數組有個專門的名字叫做張量“Tensor”, 攜帶信息的張量(Tensor)在神經網絡中不斷流動(Flow),所以知名的深度學習框架叫做TensorFlow。在這裡我們無需理解張量在數學中的含義----多重線性映射(聽起來就暈死),只需理解

張量是矩陣向任意維度的推廣。下面用實際的例子來解釋一下,就一清二楚了:

  • 標量(0維張量)

在Numpy中使用只有一個float32或float64數構成的數組,叫做0維張量,它的維數為0 (張量的維數有時也稱之為軸,故標量張量的軸為0)代碼中的x.ndim給出數組x的軸數

【AI學習篇】實戰深度學習(3):深度學習的數據表示

標量(0維張量)

  • 向量(1維張量)

一系列數字構成的向量,也稱為1維(1D)張量,有1個軸。

【AI學習篇】實戰深度學習(3):深度學習的數據表示

向量(1維張量)

  • 矩陣(2維張量)

多個向量組成的矩陣,稱為2維(2D)張量,有兩個軸,第一個軸叫做行(row),第二個軸叫做列(column)

【AI學習篇】實戰深度學習(3):深度學習的數據表示

矩陣(2維張量)

  • 3維張量或更高維張量

將多個矩陣組成數組,則構成3維(3D)張量,有三個軸,第一個軸叫做批量軸(batch-axis),可以理解為:如果某個矩陣代表一個樣本比如一個灰度圖像,批量軸就是有多少個樣本。第二個軸是行,第三個軸是列。通常來說深度學習中的數據的第一個軸(0軸,索引從0開始)都是批量軸。

【AI學習篇】實戰深度學習(3):深度學習的數據表示

3維張量或更高維張量

本例中除了使用x.ndim看有多少個軸外,還可以使用x.shape看一下這個3D張量x的形狀,可以發現x是由三個3*5的矩陣構成的(3, 3 ,5)。x.shape返回的是一個python元組tuple( 就是一個常量列表,python語言的基礎入門在這裡就不再贅述,一點基礎沒有的朋友,推薦大家搜索公眾號“crossin的編程教室”,裡面有非常簡潔明瞭的入門教程哦!)

至於4維張量,就是由多個3維張量構成的數組,比如做圖像識別的彩色圖像張量就是4維張量,在TensorFlow裡的形狀就是(樣本數/批量,高,寬,顏色通道)。深度學習裡最常用的張量也就是0D-4D的張量了

0D-6D張量的形象理解如下圖所示。

【AI學習篇】實戰深度學習(3):深度學習的數據表示

0D-6D張量

除了上述介紹的軸的個數(ndim),張量形狀(shape), 張量同學還有一個重要屬性是數據類型(dtype),通常包括float32、float64、uint8等。以上講中mnist數據集為例(見下圖),訓練集是一個3維張量,形狀是(60000, 28, 28)即60000個28*28的灰度圖像,圖像像素的數據類型是uint8,也就是取值範圍為0-255的整形數。

【AI學習篇】實戰深度學習(3):深度學習的數據表示

mnist數據集的張量屬性

總結:本講應該瞭解啥是張量,0D-4D的張量代表了什麼,張量的主要屬性ndim、shape、dtype。下一講薈薈來說說張量的基本操作和運算。


分享到:


相關文章: