1. 程式人生 > >Machine Learning-Andrew Ng 課程第四周——非線性假設 & Neural Network

Machine Learning-Andrew Ng 課程第四周——非線性假設 & Neural Network

1. 影象作為輸入時的訓練

之前我們處理的輸入都是一些標量,比如房子的面積、臥室數量、腫瘤的體積等等,但在實際工程應用中,很多輸入比這複雜許多,比如說影象。

在此次程式設計作業中用到了手寫資料集,每個影象都是20×2020\times20,共有5000張圖片,在實際操作時,所有圖片都是以向量形式輸入的20×2020\times20的圖片就變成一個400維的向量,而所用的引數也就是401個(加上θ0\theta_0),也就是說,每個引數對應一個畫素——hθ(θ0x0+θ1x1+θ2x2+...θ400x400)h_\theta(\theta_0x_0+\theta_1x_1+\theta_2x_2+...\theta_{400}x_{400})

,所以處理高維輸入並沒有想象中的那麼複雜。

2. 關於神經網路中Hidden Layer在程式設計時的注意事項

這是我在程式設計作業中犯的一個錯誤,在輸入傳遞給Hidden Layer時,得用sigmoid函式將輸入的線性組合轉化為(0,1)之間的數。

X = [ones(size(X,1),1) X];
A_2 = sigmoid(X*Theta1');
A_2 = [ones(size(A_2,1),1) A_2];
[values, p] = max(A_2*Theta2',[],2);

第二行將輸入層a(1)a^{(1)}

xx)的線性組合用sigmoid函式處理,得到hidden layer的值a(2)a^{(2)}.

3. Matlab中max()函式的用法

在作業中用到了max()函式,這裡列出兩個比較好用的功能: 1.

 [values, indexs] = max(A)      #返回矩陣A中每一列最大的值給values,每個值在該列的位置給indexes

例:

A = [1 2 3;6 5 4];
[values indexes] = max(A)

返回:

values =

     6     5     4
indexes =

     2     2     2
 [values, indexs] = max(A, [], 2)      #返回矩陣A中每一行最大的值給values,每個值在該行的位置給indexes

例:

A = [1 2 3;6 5 4];
[values indexes] = max(A, [], 2)

輸出:

values =

     3
     6


indexes =

     3
     1