NumPy 高速運算徹底解說 - 六行寫一隻程式?你真懂深度學習?手工算給你看!
內容描述
硬派學習 AI 才能紮穩根基!
許多 Python 開發人員初接觸機器學習、深度學習, 往往一開始就使用當紅的 Tensorflow、Keras 等 AI 框架, 只用了短短六行就寫出一隻神經網路程式, 接著就針對參數開始東調西調、訓練模型, 為了提高神經網路模型的準確率 (Accuracy) 96.6% → 97.4% → 98.9%...而奮戰著。
只需六行?調調參數?看起來 AI 好像也不難學的樣子, 但, 這樣子就算懂 AI?
那可不一定!Tensorflow、Keras 等框架的確大幅降低你寫程式的時間成本, 卻不代表可以降低你學 AI 的學習成本, 沒有從 AI 底層運算紮實學起, 千萬別說你已經懂機器學習、深度學習!
「你在調整參數、追求準確率的過程中, 真的清楚了解每個選項背後代表的運算嗎?」
「你有自己一步一步算過 Mini-batch 的梯度下降反向傳播嗎?」
本書不使用深度學習框架, 純 Python + NumPy「一步一腳印、手工硬派」帶你學 AI,「我用手工算給你看, 你再用 NumPy 算一次, 硬派學習 AI 才能紮穩根基!」
本書特色 :
□最紮實的機器學習、深度學習 LAB 實戰
‧簡單線性迴歸、多項式迴歸分析實作
‧神經網路黑盒揭秘!二元分類、多元分類的底層運算剖析
‧損失函數公式、偏微分公式...一大堆算式有看沒有懂?手工算完再跟機器比一比, 算完保證秒懂!
‧反向傳播究竟「反」在哪?逐層帶你一步步反著算, 跟著做超有感!
‧還有強化學習、Q-learning...等更多 AI 實戰應用
□初學 AI 一定要徹底搞懂 NumPy 函式怎麼用
GitHub 2019 年度報告指出:「在機器學習、深度學習相關主題, 超過一半的 repositories 是基於 NumPy 建構的」!
‧看不懂 Python 程式碼?那是 NumPy 啦!掌握 reshape()、argmax()、transpose()、exp()、linspace()、dot()、sum()...各種 AI 實作必用函式
‧ndarray 重要概念釋疑 - axis、dimension、shape、broadcasting
‧標準差、變異數、反矩陣、內積、外積...繁瑣的數學運算交給數學函式輕鬆搞定
□詳細解說, 流暢翻譯
本書由【施威銘研究室監修】, 書中針對原書進行大量補充, 並適當添加註解, 幫助讀者更加理解內容!
★歡迎加入本書社群, 和技術者們直接對話!
從做中學 Learning by doing 粉絲專頁
目錄大綱
Ch01 NumPy 的基礎
1-1 認識 NumPy 的基本操作
1-2 ndarray 多維陣列的基本概念
1-3 ndarray 的軸 (axis) 與維度 (dimension)
1-4 ndarray 的 dtype 屬性
1-5 ndarray 的切片 (Slicing) 操作
1-6 陣列擴張 (Broadcasting)
Ch02 NumPy基本運算函式
2-1 陣列重塑 - reshape()、resize()
2-2 在陣列最後面加入元素 – append()
2-3 判斷陣列真假值 – all()、any()
2-4 找出符合條件的元素 – where()
2-5 取出最大值、最小值 – amax()、amin()
2-6 取出最大值、最小值的索引位置 – argmax()、argmin()
2-7 陣列轉置 – transpose()
2-8 陣列排序 – sort() 與 argsort()
2-9 陣列合併 – vstack()、hstack()
2-10 建立元素都是 0 的陣列 – zeros()
2-11 建立元素都是 1 的陣列 – ones()
2-12 建立「不限定元素值」的陣列 – empty()
2-13 建立指定範圍的等差陣列 – arange()
2-14 建立指定範圍的等差陣列 – linspace()
2-15 建立單位矩陣 – eye()、identity()
2-16 將陣列展平為 1D 陣列 – flatten()
2-17 將陣列展平為 1D 陣列 – ravel()
2-18 找出不是 0 的元素 – nonzero()
2-19 複製陣列元素, 拚貼成新陣列 – tile()
2-20 增加陣列的軸數 – np.newaxis
2-21 陣列合併 – np.r 與 np.c 物件
2-22 陣列的儲存與讀取 – save() 與 load()
2-23 以文字格式儲存、讀取陣列內容 – savetxt() 與 loadtxt()
2-24 建立隨機亂數的陣列 – random 模組
Ch03 NumPy 的數學函式
3-1 基本的數學運算函式
3-2 計算元素平均值 – average() 與 mean()
3-3 計算中位數 – median()
3-4 計算元素總和 – sum()
3-5 計算標準差 – std()
3-6 計算變異數 – var()
3-7 計算共變異數 – cov()
3-8 計算相關係數 – corrcoef()
3-9 網格陣列 – meshgrid()
3-10 點積運算 – dot()
3-11 計算矩陣的 determinant – linalg.det()
3-12 計算矩陣的「特徵值」與「特徵向量」 – linalg.eig()
3-13 計算矩陣的 rank – linalg.matrix_rank()
3-14 計算矩陣的「反矩陣」 – linalg.inv()
3-15 計算張量積 – outer()
3-16 計算叉積 – cross()
3-17 計算卷積 – convolve()
3-18 將連續值轉換為離散值 – digitize()
Ch04 NumPy 的實務應用
4-1 資料的正規化 (Normalization)
4-1-1 z 分數正規化
4-1-2 最小值 - 最大值正規化
4-2 迴歸分析實作
4-2-1 迴歸概念解說 (簡單線性迴歸、多項式迴歸)
4-2-2 Step1:建立 20 個 (x, y) 組合的座標點
4-2-3 Step2:餵資料給機器學習, 求出能逼近 20 個點的迴歸方程式
4-2-4 Step3:完成學習, 驗證結果
4-3 機器學習實戰 (一):使用神經網路替鳶尾花分類
4-3-1 神經網路的基本概念 (神經元、啟動函數、損失函數)
4-3-2 Step1:備妥訓練所需的資料
資料預處理
將資料集拆分為「訓練資料集」與「測試資料集」
4-3-3 Step2:開始訓練神經網路
訓練神經網路
更新權重
進入下一週期的訓練、更新權重
4-3-4 Step3:完成訓練, 驗證結果
4-4 機器學習實戰 (二):使用神經網路辨識手寫數字圖片
4-4-1 多層神經網路的概念
4-4-2 Step1:備妥訓練所需的資料
4-4-3 Step2:開始訓練神經網路
了解反向傳播之前要先了解前向傳播
以計算圖呈現損失函數 L 的算式
利用「反向傳播」求損失函數 L 對各權重的偏微分
開始訓練神經網路
4-4-4 Step3:完成訓練, 驗證結果
4-5 使用 NumPy 實作強化學習
4-5-1 OpenAI Gym 是什麼
4-5-2 安裝與執行遊戲
4-5-3 用 Q-Learning 實作強化學習
4-5-4 增進 Q-Learning 的學習成效
4-5-5 策略梯度法