1.logistics regression model
y' = σ(WTx+b)
激活函數(shù):sigmoid函數(shù)
損失函數(shù):L(y',y) = -[y·log(y')+(1-y)·log(1-y')](二分類)
代價函數(shù):損失均值,J(W,b) = 1/m·Σmi=1/m·ΣL(y'(i),y(i)),是W和b的函數(shù)
訓(xùn)練模型的步驟:
初始化W和b,指定learning rate和迭代次數(shù)
每次迭代,根據(jù)當(dāng)前W和b計算對應(yīng)的梯度(J對W,b的偏導(dǎo)數(shù)),然后更新W和b,w := w - α(dJ/dw)
迭代結(jié)束,學(xué)得W和b,帶入模型進(jìn)行預(yù)測,分別測試在訓(xùn)練集合測試集上的準(zhǔn)確率,從而評價模型
2.向量化
只要闊能,就不要使用顯示for循環(huán)(explicit for-loop),而是盡可能采用矢量化技術(shù)(Vectorization)
深度學(xué)習(xí)中的數(shù)據(jù)量往往巨大,用for循環(huán)去跑的話效率會非常低下,相比之下,矩陣運算就會快得多。而python的矩陣“傳播機(jī)制(broadcasting)”和專門用于矩陣計算的numpy包更是給了我們使用矩陣運算的理由。
所謂的Vectorization,就是把我們需要用for-loop來對那些只有上標(biāo)或者下標(biāo)變化的變量,放進(jìn)一個向量或者矩陣中,讓他們所有變量同時計算!
因此,Logistic regression算法向量化的過程,就是:
1.把m個樣本,同時算出它們的z(i),也就是直接算Z這個m維行向量
2.同時把Z的m維都激活,得到m維行向量A
3.得到A和Z之后,就可以直接計算J對Z的梯度dZ了,得到dZ之后,也就可以直接算出W和b的梯度了
4.同時更新所有的w(i)和b(i)
3.算法步驟
(一)數(shù)據(jù)預(yù)處理
1)搞清楚數(shù)據(jù)的形狀、維度
(209, 64, 64, 3),第一維代表m,即樣本數(shù)量,第二維第三維分別是圖片的長和寬,第四維代表圖片的RGB三個通道
2)將數(shù)據(jù)(例如圖片)轉(zhuǎn)化成向量(image to vector)方便處理
3)將數(shù)據(jù)標(biāo)準(zhǔn)化(standardize),這樣更好訓(xùn)練


????????每個特征都轉(zhuǎn)化成了同樣的分布,不管原來的范圍是什么,現(xiàn)在都基本限定在同樣的范圍內(nèi)了。原數(shù)據(jù)的不同特征的范圍可能會有很大差別,比如一批數(shù)據(jù)中“年齡”的范圍就比較小,可能20歲 ~ 60歲之間,但是另一個特征“年收入”可能波動范圍就很大,也許0.5萬 ~ 1000萬,這種情況下會導(dǎo)致我們的?等高線圖變得十分“扁平”,在梯度下降的時候會很?容易走彎路,因此?梯度下降會比較慢,精度也不高。但是經(jīng)過標(biāo)準(zhǔn)化(也稱歸一化)之后,等高線就變規(guī)矩了,就很容易梯度下降了。
另外,對于圖片數(shù)據(jù)的話,進(jìn)行標(biāo)準(zhǔn)化很簡單,因為RGB三個通道的范圍都是255,我們對圖片的處理就是直接除以255即可。
(二)構(gòu)造各種輔助函數(shù)
1)激活函數(shù)(此處我們使用sigmoid函數(shù))--activation function
2)參數(shù)初始化函數(shù)(用來初始化W和b)--initialization
3)傳播函數(shù)(這里是用來求損失cost并對W、b求導(dǎo),即dW、db)--propagate
? ? ? ? ? ? 包含了forward-propagate和backward-propagate,即正向傳播和反向傳播。
? ? ? ? ? ? 正向傳播求的是cost,反向傳播是從cost的表達(dá)式倒推W和b的偏導(dǎo)數(shù)
4)優(yōu)化函數(shù)(迭代更新W和b,來最小化cost)--optimize
5)預(yù)測函數(shù)(根據(jù)學(xué)習(xí)到的W和b來進(jìn)行預(yù)測)--predict
(三)綜合上面的輔助函數(shù),結(jié)合成一個模型
可以直接輸入訓(xùn)練集、預(yù)測集、超參數(shù),然后給出模型參數(shù)和準(zhǔn)確率
