Hands-on Machine Learning with Scikit-Learn and TensorFlow(中文版)和深度學習原理與TensorFlow實踐-學習筆記
監督學習:新增標籤。學習的目標是求出輸入與輸出之間的關係函式y=f(x)。樸素貝葉斯、邏輯迴歸和神經網路等都屬於監督學習的方法。
監督學習主要解決兩類核心問題,即迴歸和分類。
迴歸和分類的區別在於強調一個是連續的,一個是離散的。
非監督學習:不新增標籤。學習目標是為了探索樣本資料之間是否有隱含的不易被發現的關係。
半監督學習:通常是大量不帶標籤資料加上小部分帶標籤資料
批量學習:系統不能進行持續學習,也稱離線學習
線上學習:通常還是離線完成的,但是是持續學習
這種從資料中學習規律的過程也叫作模式識別
特徵工程目的是:目的是最大限度地從原始資料中提取特徵以供演算法和模型使用
影象在計算機中最基本的便是是一組畫素值大集合,從畫素到物體的對映關係需要經過一個很長的過程,從畫素組成細小的編,由邊組成基礎的紋理基元,紋理基元組合而成圖形,圖形構成物體的各種組成部分,最後組成物體的整體。深度學習模型的結構設計遵循了這種死,具體做法是將一系列相對簡單的非線性對映操作構建成一個多層玩過,每一層都完成一次特徵變換。
包含三個以上隱層的神經網路就可以說是一種深度學習模型。只有兩個隱層的神經網路就不能算是有深度打的結構,因為它並沒有能力分級提取特徵。
理論上來說,只有神經元足夠多,構成一個很“寬”的網路,它可以擬合任意的函式,那為什麼還要更“深”?原因在於:在神經元數量相同的情況下,深層網路結構具有更大的容量,分層組合帶來的是指數級的表達空間,能夠組合成更多不同型別的子結構,這樣可以更容易地學習和表示各種特徵。並且,隱層增加則意味著由啟用函式帶來的非線性變換巢狀層數更多,就能構造更復雜的對映關係。
對於深度學習來說,人類賦予其最重要的一個先驗經驗就是:分層組成的表示方式更能準確地描述我們所在世界的規則。
tensorflow的計算圖是一個有向圖,圖中的節點嗲表數字計算操作的運算元,節點之間連線的邊代表參與計算的高位陣列資料,叫做tensor。
tensor代表多為陣列,對應神經玩過計算中的高位舉證。tnesor可以有任意緯度,米格緯度也可以有任意長度特別來說,一位tensor就是向量,是普通的一位陣列;二維tensor是矩陣。tensorflow中一般使用4位tensor表示一個mini-batch的圖片,四個緯度分別是鼻大小、畫素行數、相熟列數,通道數,即【batch,height,width,channels】。tensor中的元素可以使任意內建型別,常用額有:int32,int64,float32float64,等等。對於神經網路來說,單精度float32應該是最常用的資料型別。
對於神經網路等演算法來說,又想吐可以表示模型的結構,,但是圖中編的全職引數並不是固定不變的,而是通過訓練過程不斷調整更新的。所謂圖的狀態,就是圖中所有引數的組合,宰tensorflow中,已變數來村準引數值,變數可以與tensor一樣參與各種運算,區別在於tensor的值宰每次計算圖執行完成之後立即被丟棄,二變數的值宰通過反向傳播計算更新後會保留下來,帶入到下一輪訓練迭代。
泰坦尼克問題中的正規化主要有三個方面,意識將字串欄位轉換為數值化的表達方式,比如講性別欄位原本取值‘make’和‘female’分別轉換為0和1,這樣才能作為分類器的輸入;而是可以將數值都歸一化到【0,1】的取值範圍內,比如年齡欄位原本的至於是【0,100),歸一化過程可以使將每個值都除以100;三十不起確實資料。
邏輯迴歸:通過logistic迴歸分析,可以得到自變數的權重,從而可以大致瞭解到底哪些因素是胃癌的危險因素。同時根據該權值可以根據危險因素預測一個人患癌症的可能性
泰坦尼克問題程式碼步驟:資料讀入及預處理,構建計算圖,構建訓練迭代過程,執行訓練、儲存模型,預測測試資料結果。
為了防止訓練過擬合,我們將僅有的標記資料分成訓練資料集和驗證資料集兩類。
權重矩陣W和偏置向量b是模型中的引數,也就是要通過訓練來求得的部分。
使用tensorFlow構建計算過程是十分簡單的:
1.使用placeholder申明輸入佔位符
2.申明引數變數
3.構造前向傳播計算圖
4.宣告代價函式
5.加入優化演算法
Session.run()執行完計算後,會返回計算節點的結果。若節點為運算元,則沒有返回值,若節點是tensor,則返回當前的值。
%04d 表示:在輸出整數x的時候 按照4個位子的空間左對齊 多餘的位子用0代替
(例如:x=3 --> 輸出:0003 x=33 --> 輸出:0033)
%.9f保留小數點後9位
我們可以根據訓練圖,對學習情況進行評估,比如我們看損失訓練圖,可以看到現在是一條慢慢減小的曲線,最後的值趨近趨近於0(這裡趨近於0是由於我選的模型太容易訓練了,誤差可以逼近0,同時又能很好的表徵系統的模型,在現實情況,往往都有誤差,趨近於0反而是過擬合),這符合本意,就是要最小化loss,如果loss的曲線最後沒有平滑趨近一個數,則說明訓練的力度還不夠,還有加大次數,如果loss還很大,說明學習演算法不太理想,需改變當前的演算法,去實現更小的loss,另外兩幅圖與loss類似,最後都是要趨近一個數的,沒有趨近和上下浮動都是有問題的。