今天做吳恩達機器學習的課程作業ex2時,發現了自己之前一直忽略了一個非常重要的基礎知識:MATLAB的點除運算。
點除運算當然要從MATLAB獨特的“數組運算”講起,也就是MATLAB在正常的矩陣運算(加、減、數乘、矩陣乘法)之外,為了方便運算又定義的一套“數組運算”規則。非常典型的就是我們常見的點乘“.*”和點除“./”了,詳細的使用方法及與“/”和“*”的區別見matlab中乘法“*”和點乘“.*”;除法“/”和點除“./”的聯系和區別。
而我今天在實現sigmoid函數時,非常天真地直接這樣寫:
function g = sigmoid(z) g = 1 /(1 + exp(-z)); end
然后在計算Cost Function時就遇到了矩陣乘法維度不一致的錯誤,而我還天真地以為自己沒錯。。。
正如上面鏈接中的文章提到:
數值和矩陣進行除法運算時,要分數值在前還是在后。
(1),數值在前,只能用./
(2),數值在后,這兩種一樣:A/b = A./b
所以應該是:
function g = sigmoid(z) g = 1 ./(1 + exp(-z)); end
