MATLAB的點除“./”不要亂用


今天做吳恩達機器學習的課程作業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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM