一直都有拜讀《動手學習深度學習》的慾望,無奈總是心裡說想要,身體又很誠實。最近由於全民戰「疫」,只能天天宅在家裡,為了不荒廢學習報名參加了datawhale聯合博禹教育,上交大,和鯨科技和亞馬遜aws打造的「動手學習深度學習」的ai公益訓練營。藉此機會,好好的讀讀《動手學習深度學習》這本書。同時,本次公開課選用pytorch來講解《動手學習深度學習》中的知識點,也藉此好好學學pytorch框架,充實一下自己的機器學習和深度學習**庫。
本讀書筆記的目的主要是記錄學習過程中掌握的一些新的知識點和程式設計技巧,第一部分的學習中,主要的收穫包括兩點:1.torch.gather函式的使用; 2.使用torch的tensor.backward()函式計算梯度時,backward函式只能作用在標量值,在之前的pytorch學習中並未注意這個細節。由於在實際應用中,一般不需要自己實現交叉熵損失函式,都是使用pytorch自帶的類來實現交叉熵損失,所以很少會用到gather函式。以下是torch.gather函式的具體的使用方法:
y_pred=torch.tensor([[0.1,0.2,0.3], [0.2,0.3,0.5], [0.3,0.35,0.35]])
y_true=torch.tensor([1,0,1])
y_pred.gather(1,y_true.view(-1, 1))
上述**的輸出為:
tensor([[0.2000],
[0.2000],
[0.3500]])
gather函式的詳細引數列表可以參考pytorch的官方文件,其引數最重要的主要就是前兩個,第乙個引數表示索引的維度,第二個引數是乙個索引值列表。在我們的例子中,y_true中存放的是索引值,y_pred是要進行索引的張量,我們索引的維度是"1",也就是按列索引。所以y_pred.gather(1,y_true.view(-1, 1))
的輸出結果為y_pred中第一行元素 [0.1,0.2,0.3] 中的第2個元素0.2(對應y_true中的第乙個元素"1"),y_pred第二行元素 [0.2,0.3,0.5] 中的第1個元素0.2(對應y_true中的第二個元素"0"),y_pred第三行元素 [0.3, 0.35, 0.35]中的第2個元素0.35(對應y_true中的第3個元素"1")。
gather函式使用中的坑:第二個引數也必須是張量(也即是本例中的 y_true);y_pred和y_true必須有相同的秩,在本例中y_pred為3行3列(秩為2),所以y_true必須被轉換為3行1列(秩為2,也即y_true.view(-1, 1))。
動手學深度學習讀書筆記 1
深度學習簡介 應用深度學習的關鍵 問題的動機和特點 將大量不同型別神經網路層通過特定方式組合在 起的模型背後的數學原理 在原始資料上擬合極複雜的深層模型的優化演算法 有效訓練模型 避免數值計算陷阱以及充分利用件效能所需的工程技能 為解決方案挑選合適的變數 超引數 組合的經驗。絕大多數神經網路都包含以...
深度學習讀書筆記(1)
欠擬合 模型不能在訓練集上獲得足夠低的誤差 過擬合 訓練誤差和測試誤差之間的差距太大。通過調整模型的容量,可以控制模型是否偏向過擬合或者欠擬合。從預先知道的真實分布p x,y 而出現的誤差被稱為貝葉斯誤差。任何模型容量小於最優容量的固定引數模型會漸進到大於貝葉斯誤差的誤差值。在所有可能的資料生成分布...
動手學深度學習筆記(1)
機器學習,神經網路是很多領域共同發展的成果。時至今日,絕大多數神經網路都包含以下的核心原則 深度學習從發現到發展,仍能屹立的部分原因 在機器學習的眾多研究方向中,表徵學習關注如何自動找出表示資料的合適方式,以便更好地將輸入變換為正確的輸出。深度學習是具有多級表示的表徵學習方法。在每一級 從原始資料開...