我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

人工智慧頻道發表於2019-01-04
我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

本文將介紹吳恩達的機器學習課程中關於神經網路的程式設計作業3和4。這也是我們在課程中遇到的第一個複雜的非線性演算法。我不瞭解你,但這個任務對於我來說肯定有一個陡峭的學習曲線。神經網路構成了深度學習的基礎,它具有廣泛的應用,如計算機視覺或自然語言處理。因此,重要的是獲得基本權利並在python中編碼這些賦值是確保這一點的一種方法。

在進入神經網路之前,讓我們完成邏輯迴歸的最後一節 - 多類Logistic迴歸。

該系列練習利用由5000個訓練示例組成的手寫數字資料集,其中每個示例都是20×20畫素的數字灰度影像。

載入資料集

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

由於資料集是以.mat格式而不是通常的.txt格式給出的,因此我需要使用scipy loadmat函式。官方文件可以在這裡找到。(https://docs.scipy.org/doc/scipy-0.19.0/reference/generated/scipy.io.loadmat.html)由於loadmat將.mat檔案作為帶有變數名稱作為鍵的字典載入,因此分配X和y就像使用變數的鍵訪問dict一樣簡單。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

為了更好地理解資料集,具有資料的形狀可以告訴我們資料的維度。 X形狀為5000,400,其對應5000個訓練示例,每個示例具有來自其20×20畫素的400個特徵。 y具有5000,1的形狀,其中每個訓練示例具有範圍從1到10的標籤(在該資料集中'0'數字被標記為'10')。

視覺化資料

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

上面的程式碼塊構造了100個子圖,並使用plt.imshow隨機視覺化5000個訓練示例中的100個。請注意,我們必須將訓練示例重新塑造為20 X 20畫素,才能將其視覺化並將order =“F”作為引數新增到重塑功能中,以確保影像的方向是垂直的。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

計算成本函式和梯度

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

這類似於我們在Logistic迴歸分配中使用的成本函式。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

現在進行分類任務。由於我們有多個類,我們必須使用一對一分類方法(每個類一個分類器)訓練多個邏輯迴歸分類器。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

gradientDescent函式是我們之前實現的常用優化函式。對於oneVsAll,它遍歷所有的類,並使用梯度下降(作業中使用了fmincg函式)為每個類訓練一組。然後all_theta捕獲列表中的所有優化的theta並返回為numpy陣列,重新塑造為theta的矩陣,其中第i行對應於標籤i的分類器。 np.where在這裡派上用場,為每個類得到一個y的向量,每個類的向量有1/0,以便在每次迭代中進行二進位制分類任務。

繪製成本函式以確保梯度下降按預期工作

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

alpha = 1,num_iters = 300

為了進行預測,計算每個類的x(i)的概率,並且預測為具有最高概率的類

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

訓練集準確度:91.46%

最後,神經網路的時間。使用相同的資料集,我們的目標是使用更復雜的演算法(如神經網路)實現更高的精度。對於練習的第一部分,我們給出了優化的θ值,我們需要進行前饋傳播以獲得預測和模型精度。

載入優化的theta

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

使用前饋傳播進行預測

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

訓練集準確度:97.52%。與多級邏輯迴歸相比,準確度更高!

在作業4中,我們致力於從頭開始實現神經網路。我們首先計算成本函式和θ的梯度。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

該作業分步驟進行,首先是正則化成本、梯度,最後是正則化梯度。如果你想繼續,我修改了程式碼,只要你使用正確的索引,它就會返回中間步驟的值。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

flatten()函式將陣列摺疊為一維,np.append將引數“展開”為向量。

在講座中討論了初始theta的對稱性問題。為了打破這種對稱性,需要隨機初始化。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

最後,輪到我們使用前饋傳播和反向傳播來優化θ值。我正在使用的優化演算法再次是相同的舊梯度下降。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

對執行程式碼的人發出警告。根據您的計算能力計算需要相當長的時間,如果您正在優化alpha和num_iters值,則需要更長的時間。我使用0.8表示alpha,對num_iters使用800,但我相信使用更多的tunnin可以獲得更好的準確性。

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

我的作業筆記:吳恩達的Python機器學習課程(神經網路篇)

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

來自 “ https://towardsdatascience.com/andrew-ngs-machine- ”,原文連結:http://blog.itpub.net/31545819/viewspace-2305497/,如需轉載,請註明出處,否則將追究法律責任。

相關文章