尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
點擊上方關注,All in AI中國
本文將介紹吳恩達的機器學習課程中關於神經網路的編程作業3和4。這也是我們在課程中遇到的第一個複雜的非線性算法。我不了解你,但這個任務對於我來說肯定有一個陡峭的學習曲線。神經網路構成了深度學習的基礎,它具有廣泛的應用,如計算機視覺或自然語言處理。因此,重要的是獲得基本權利並在python中編碼這些賦值是確保這一點的一種方法。
在進入神經網路之前,讓我們完成邏輯回歸的最後一節 – 多類Logistic回歸。
該系列練習利用由5000個訓練示例組成的手寫數字數據集,其中每個示例都是20×20像素的數字灰度圖像。
加載數據集
由於數據集是以.mat格式而不是通常的.txt格式給出的,因此我需要使用scipy loadmat函數。官方文檔可以在這里找到。(https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.io.loadmat.html)由於loadmat將.mat文件作為帶有變量名稱作為鍵的字典加載,因此分配X和y就像使用變量的鍵訪問dict一樣簡單。
為了更好地理解數據集,具有數據的形狀可以告訴我們數據的維度。 X形狀為5000,400,其對應5000個訓練示例,每個示例具有來自其20×20像素的400個特徵。 y具有5000,1的形狀,其中每個訓練示例具有架式圍從1到10的標籤(在該數據集中’0’數字被標記為’10’)。
可視化數據
上面的代碼塊構造了100個子圖,並使用plt.imshow隨機可視化5000個訓練示例中的100個。請注意,我們必須將訓練示例重新塑造為20 X 20像素,才能將其可視化並將order =「F」作為參數添加到重塑功能中,以確保圖像的方向是垂直的。
計算成本函數和梯度
這類似於我們在Logistic回歸分配中使用的成本函數。
現在進行分類任務。由於我們有多個類,我們必須使用一對一分類方法(每個類一個分類器)訓練多個邏輯回歸分類器。
gradientDescent函數是我們之前做到的常用優化函數。對於oneVsAll,它遍歷所有的類,並使用梯度下降(作業中使用了fmincg函數)為每個類訓練一組。然後all_theta捕獲列表中的所有優化的theta並返回為numpy數組,重新塑造為theta的矩陣,其中第i行對應於標籤i的分類器。 np.where在這里派上用場,為每個類得到一個y的向量,每個類的向量有1/0,以便在每次迭代中進行二進制分類任務。
繪制成本函數以確保梯度下降按預期工作
alpha = 1,num_iters = 300
為了進行預測,計算每個類的x(i)的概率,並且預測為具有最高概率的類
訓練集準確度:91.46%
最後,神經網路的時間。使用相同的數據集,我們的目標是使用更複雜的算法(如神經網路)做到更高的精度。對於練習的第一部分,我們給出了優化的θ值,我們需要進行前饋傳播以獲得預測和模型精度。
加載優化的theta
使用前饋傳播進行預測
訓練集準確度:97.52%。與多級邏輯回歸相比,準確度更高!
在作業4中,我們致力於從頭開始做到神經網路。我們首先計算成本函數和θ的梯度。
該作業分步驟進行,首先是正則化成本、梯度,最後是正則化梯度。如果你想繼續,我修改了代碼,只要你使用正確的索引,它就會返回中間步驟的值。
flatten()函數將數組折疊為一維,np.append將參數「展開」為向量。
在講座中討論了初始theta的對稱性問題。為了打破這種對稱性,需要隨機初始化。
最後,輪到我們使用前饋傳播和反向傳播來優化θ值。我正在使用的優化算法再次是相同的舊梯度下降。
對執行代碼的人發出警告。根據您的計算能力計算需要相當長的時間,如果您正在優化alpha和num_iters值,則需要更長的時間。我使用0.8表示alpha,對num_iters使用800,但我相信使用更多的tunnin可以獲得更好的準確性。
GitHub傳送門: (https://github.com/benlau93 / machine – learning by andrew – ng- in- python)
後續期待
來源:https://towardsdatascience.com/andrew-ngs-machine-learning-course-in-python-neural-networks-e526b41fdcd9