動手學深度學習PyTorch版 筆記彙總

2021-10-02 19:12:48 字數 2296 閱讀 1935

pytorch的tensor,它可以是零維(又稱為標量或乙個數)、一維、二維及多維的陣列。tensor自稱為神經網路界的numpy,它與numpy相似,二者可以共享記憶體,且之間的轉換非常方便和高效。不過它們也有不同之處,最大的區別就是numpy會把ndarray放在cpu中進行加速運算,而由torch產生的tensor會放在gpu中進行加速運算(假設當前環境有gpu)。

對tensor的操作很多,從介面的角度來劃分,可以分為兩類:

1)torch.function,如torch.sum、torch.add等;

2)tensor.function,如tensor.view、tensor.add等。

這些操作對大部分tensor都是等價的,如torch.add(x,y)與x.add(y)等價。在實際使用時,可以根據個人愛好選擇。

如果從修改方式的角度來劃分,可以分為以下兩類:

1)不修改自身資料,如x.add(y),x的資料不變,返回乙個新的tensor。2)修改自身資料,如x.add_(y)(執行符帶下劃線字尾),運算結果存在x中,x被修改。

建立tensor的方法有很多,可以從列表或ndarray等型別進行構建,也可根據指定的形狀構建。

注意torch.tensor與torch.tensor的幾點區別:

1)torch.tensor是torch.empty和torch.tensor之間的一種混合,但是,當傳入資料時,torch.tensor使用全域性預設dtype(floattensor),而torch.tensor是從資料中推斷資料型別。

2)torch.tensor(1)返回乙個固定值1,而torch.tensor(1)返回乙個大小為1的張量,它是隨機初始化的值。

模型訓練的過程其實就是在求【引數】的過程,我們先假定某類【模型】(比如決策樹模型),然後用【訓練集】來訓練,學習到對應的最優的【引數】。但是問題在於,我們沒有辦法保證我們假設的那個【模型】是最優的,我們極有可能假設錯誤。有乙個簡單的解決方案就是我們假設一堆的模型,然後用【訓練集】分別對這些模型來進行訓練,學習到每乙個【模型】中分別對應的引數——這是第一步,也就是【訓練集】的任務。

那麼我們已經學習到了一堆的模型了,哪乙個模型是最好的呢?這其實就是要來考察不同結構的模型在這些data上的優劣程度了。通常來說,我們用【超引數】來控制模型的結構(例如正則項係數、神經網路中隱層的節點個數,k值等)。那這個時候,我們就可以找一些資料來訓練和學習我們具體的超引數了。用什麼樣的資料呢?直接用【訓練集】肯定是不行的,因為我們現在的每乙個模型都是用【訓練集】來學習出來的,他們在【訓練集】上的效果已經很好了,繼續用它們來訓練超引數不會有太大的效果,所以說我們就選擇了使用【驗證集】來選擇這些超引數。這是第二步,也就是【驗證集】的任務,我們也通常稱之為【調參】。

最後,當我們學習到了【引數】和【非引數】後,我們就確定了我們具體的模型結構,這個時候我們再用一些資料來測試這個模型在新的資料上的效果。因此,我們就不能夠使用之前已經使用過的資料了,而要選擇乙個全新的資料集,這既是【測試集】。這個時候我們就要來看最後的結果怎麼樣,如果結果很好,那麼說明一切順利,但是如果結果很差,那問題出在**呢?其中可能的乙個原因就是我們事先假定的那一類的【模型】(比如我們最先選擇的決策樹模型)並不是適合來分析這些資料,因此哪怕我們選擇出了這一堆決策樹模型中最好的乙個(超引數的選擇過程),它的效果依舊不怎麼樣。

這裡還有兩個遺留的問題:

(1)訓練集、驗證集和測試集的比例應該怎麼去進行分配呢?

傳統上是6:2:2的比例,但是不同的情況下你的選擇應當不同。這方面的研究也有很多,如果你想要知道我們在設定比例的時候應當參考那些東西,可以去看isabelle guyon的這篇**:a scaling law for the validation-set training-set size ratio 。他的個人主頁(裡也展示了他對於這個問題的研究。

(2)訓練集、驗證集和測試集的資料是否可以有所重合?

有些時候我們的資料太少了,又不想使用資料增強,那麼訓練集、驗證集和測試集的資料是否可以有所重合呢?這方面的研究就更多了,各種交叉方法,感興趣的話可以去看filzmoser這一篇文章repeated double cross validation

《動手學深度學習》pytorch版筆記一

動手學深度學習 pytorch版筆記 與其說是筆記,不如說是問題集,有些已經搞清楚了,記錄一下。有些還沒搞清楚,先列在這裡,以後有空再慢慢查文件填坑。task 1 線性回歸 1.向量化運算以及矩陣的維度表示 2.torch.randn np.random.normal 等隨機數組生成函式 3.ten...

Pytorch 動手學深度學習(二)

學習安排如下 task03 過擬合 欠擬合及其解決方案 梯度消失 梯度 迴圈神經網路高階 1天 task04 機器翻譯及相關技術 注意力機制與seq2seq模型 transformer 1天 task05 卷積神經網路基礎 lenet 卷積神經網路高階 1天 梯度消失部分,主要是協變數偏移 標籤偏移...

RNN 《動手學深度學習pytorch》

rnn存在的問題 梯度較容易出現衰減或 bptt 改進 gru 控迴圈神經 絡 捕捉時間序列中時間步距離較 的依賴關係 長短期記憶long short term memory 遺忘門 控制上一時間步的記憶細胞 輸入門 控制當前時間步的輸入 輸出門 控制從記憶細胞到隱藏狀態 記憶細胞 種特殊的隱藏狀態...