動手學深度學習PyTorch版課程筆記

作者:DennisShaw


Task01:


線性迴歸

模型:線性迴歸的假設:輸出與各個輸入之間是線性關係,求出最終的權重與偏置

損失函數:在訓練過程中衡量價格預測值與真實值間的誤差,單個樣本時,使用平方誤差;取小批量樣本時,使用平方誤差求平均。

優化:使用隨機梯度下降,小批量隨機梯度下降指先選取一組模型參數的初始值,如隨機選取;接下來對參數進行多次迭代,使每次迭代都可能降低損失函數的值。

矢量計算:使用torch做矢量加法比使用標量加法更快。

使用Pytorch進行計算的一般流程:一般流程:初始化torch->讀取數據集->定義模型->初始化模型參數->定義損失函數->定義優化函數->訓練->得到結果

課後練習:(錯題分析)

1、全連接層的輸入形狀是7×8,輸出形狀是7×1,當權重w爲8×1時,根據矩陣的乘法,輸入X*w形狀爲7×1,每一個輸出的偏置時相同的,故偏置的形狀爲1×1
2、

def squared_loss(y_hat, y):
	return (y_hat - y.view(y_hat.size())) ** 2 / 2

y_hat爲預測的標籤,y爲真實的標籤,y_hat的形狀是[n, 1],而y的形狀是[n]。
view()函數作用是改變tensor的形狀,重構張量的維度,view中的-1是自適應的調整。-1這個位置由其他位置的數字來推斷。
view(x,y)表示重構爲x×y維的Tensor
torch.view(-1)則原張量會變成一維的結構
如果是torch.view(參數a,-1),則表示在參數b未知,參數a已知的情況下自動補齊列向量長度,參數a乘參數b等於tensor中的總元素數

tensor([[0, 1, 2],[1, 2, 3],[2, 3, 4]])
進行.view(-1)後
tensor([0, 1, 2, 1, 2, 3, 2, 3, 4])

進行.view(-1,1)
可將tensor從
tensor([0, 1, 2])#3
變爲
tensor([[0],
        [1],
        [2]])#3×1

另外torch.shape可查看當前的tensor的形狀


Softmax與分類模型

線性迴歸用於連續值預測
Softmax用於離散值預測

Softmax中輸出值最大的即可判別爲該類

使用交叉熵損失函數離散值適用交叉熵損失函數)以更適合衡量兩個概率分佈差異的測量函數

Pytorch中使用torchvision.datasets來讀取圖像數據集

課後練習:(錯題分析)

1、softmax([100, 101, 102])的結果等於softmax([-2 -1, 0])
2、在剛開始訓練時,訓練數據集上的準確率低於測試數據集上的準確率,原因是訓練集上的準確率是在一個epoch的過程中計算得到的,測試集上的準確率是在一個epoch結束後計算得到的,後者的模型參數更優


多層感知機

多層感知機(multilayer perceptron,MLP):神經網絡的基礎架構
神經網絡的激活函數:使得神經網絡能夠進行非線性變換,激活函數一定是非線性的,通常有ReLU函數、Sigmoid函數、tanh函數
激活函數的選擇:
ReLu函數是一個通用的激活函數,目前在大多數情況下使用。但是,ReLU函數只能在隱藏層中使用。

用於分類器時,sigmoid函數及其組合通常效果更好。由於梯度消失問題,有時要避免使用sigmoid和tanh函數。

在神經網絡層數較多的時候,最好使用ReLu函數,ReLu函數比較簡單計算量少,而sigmoid和tanh函數計算量大很多。

在選擇激活函數的時候可以先選用ReLu函數如果效果不理想可以嘗試其他激活函數。

課後練習:(錯題分析)

對於只含有一個隱藏層的多層感知機,輸入是256×256的圖片,隱藏單元個數是1000,輸出類別個數是10,則模型的所有權重矩陣W的元素數量之和是
num_input=256*256
num_hidden=1000
num_output=10
隱藏層權重=num_input×num_hidden
輸出層權重=num_hidden×num_output
故結果爲65546000


Task02:


文本預處理

文本數據的常見預處理步驟:
通常包括四個步驟

  1. 讀入文本
  2. 分詞
  3. 建立字典,將每個詞映射到一個唯一的索引(index)
  4. 將文本從詞的序列轉換爲索引的序列
    或者用spaCy和NLTK現成的分詞工具對文本進行分詞

課後練習:(錯題分析)

建立詞典時無需進行句子長度的統計


語言模型

n-gram模型:評估該序列是否合理
n-gram的缺陷:

  1. 參數空間過大
  2. 數據稀疏

時序數據的採樣
隨機採樣:每次從數據裏隨機採樣一個小批量,在隨機採樣中,每個樣本是原始序列上任意截取的一段序列,相鄰的兩個隨機小批量在原始序列上的位置不一定相毗鄰。
相鄰採樣:在相鄰採樣中,相鄰的兩個隨機小批量在原始序列上的位置相毗鄰。

課後練習:(錯題分析)

馬爾科夫假設是指一個詞的出現只與前面n個詞相關
隨機採樣中前後批量中的數據是不連續的。


循環神經網絡基礎

循環神經網絡語言模型:目的是基於當前的輸入過去的輸入序列,預測序列的下一個字符
在這裏插入圖片描述
從零開始實現循環神經網絡:
首先將字符表示成向量(如one-hot向量),每個字符對應一個唯一的索引。
初始化隱藏層和輸出層參數。
定義RNN模型,使得其用循環的方式依次完成循環神經網絡每個時間步的計算。
裁剪梯度,應對梯度爆炸問題,裁剪後的梯度的L2範數不超過設定的裁剪的閾值。

課後練習:(錯題分析)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章