這裡對《elitesai·動手學深度學習pytorch版》task1的學習做個簡短的總結。
task1中總共分為3個部分:線性回歸、softmax、多層感知機。
因為之前有些基礎,所以3個部分原理部分都大致比較清楚,由於對pytorch不是那麼熟悉,所以下面主要對之前不熟悉的一些函式方法進行總結,並對部分演算法細節進行補充。
1. 線性回歸
線性回歸相當於乙個兩層的神經網路,只有輸入層與輸出層,且輸出層的神經元個數為1,無啟用函式,損失函式為mse。
我的問題主要集中在mini-batch隨機梯度下降:
( w,
b)←(
w,b)
−η∣b
∣∑i∈
b∂(w
,b)l
(i)(
w,b)
(\mathbf,b) \leftarrow (\mathbf,b) - \frac|} \sum_} \partial_,b)} l^(\mathbf,b)
(w,b)←
(w,b
)−∣b
∣ηi
∈b∑
∂(w,
b)l
(i)(
w,b)
上式中,b=b
atch
size
\mathcal=batchsize
b=batc
hsiz
e 其實現**如下所示:
def
sgd(params, lr, batch_size)
:for param in params:
param.data -= lr * param.grad / batch_size # ues .data to operate param without gradient track
# 呼叫sgd
sgd(
[w, b]
, lr, batch_size)
上面**中有兩個點需要注意:
param.data
以x指代param,對x.data, x.detach(), x.item()進行區分:
x.data 與 x.detach() 返回的 tensor 有相同的地方, 也有不同的地方:
相同:不同:
關於x.item()用法:
乙個元素張量可以用item得到元素值,請注意這裡的print(x)和print(x.item())值是不一樣的,乙個是列印張量,乙個是列印元素:
x = torch.randn(1)
print
(x)print
(x.item())
#結果是
tensor([-
0.4464])
-0.44643348455429077
param.grad/ batch_size
這裡除了batch_size,因為計算loss後呼叫了.sum()。
參考:[1] 關於 pytorch inplace operation, 需要知道的幾件事
[2] pytorch學習經驗(一) detach, requires_grad和volatile
[3] pytorch .detach() .detach_() 和 .data用於切斷反向傳播
2. softmax
softmax本來是指輸出層的啟用函式,現在一般也指代兩層的神經網路,在輸出層實用softmax()對輸出結果進行歸一化。
why?
假設輸出層有3個神經元,對某個樣本可以得到輸出(o1
,o2,
o3
)(, o_2, o_3)
(o1,o
2,o
3) =(
0.1,
0.1,10)
(0.1,0.1,10)
(0.1,0
.1,1
0), 直接使用輸出層的輸出有兩個問題:
一方面,由於輸出層的輸出值的範圍不確定,我們難以直觀上判斷這些值的意義。例如,剛才舉的例子中的輸出值10表示「很置信」影象類別為貓,因為該輸出值是其他兩類的輸出值的100倍。但如果o1=
o2=1
03
o_1=o_2=10^3
o1=o2
=10
3,那麼輸出值10卻又表示影象類別為貓的概率很低。
另一方面,softmax函式是hardmax函式的近似函式,也是對hardmax函式的優化。解決了hardmax函式不可導的問題。因此被廣泛的應用在神經網路中。
參考:[1] softmax函式名字的由來(代數&幾何原理)——softmax前世今生系列(2)
3. 多層感知機
多層感知機就是多層神經網路,無非就是層數多一些,且相比前面所說的線性回歸與softmax,中間層傳遞的時候加入了啟用函式,如sigmoid、tanh、relu等等。
從線性回歸到線性分類
線性回歸在統計機器學習中佔據了核心地位,最基礎的模型。線性回歸有三個特點,打破線性回歸的乙個或幾個特點,就形成了統計機器學習中的眾多模型。三個特點如下 1.線性 1.1關於特徵x是線性的,1.2關於引數w是線性的。1.3從全域性看線性組合之後直接輸出了結果,沒有任何處理。2.全域性性 對所有的特徵空...
從線性回歸到logistic回歸到一般回歸
參考資料 回歸 屬於監督學習,由已有的 x,y 學習得到模型,根據輸入的x判斷y值 線性回歸 最簡單 估計函式 損失函式 loss function 損失函式採用估計函式值和觀測值的差值的平方和,乘以1 2.這個係數是為了求導時候剛好消掉 為什麼選擇平方和作為loss function?一般假設 而...
機器學習 Task 03 多層感知機
backward 如果需要計算導數,可以在tensor上調.backward backward gradient none,retain variables false sound 如果tensor是標量 即它包含乙個元素的資料 則不需要為backward 指定任何引數 x.grad.zero 在使...