PyTorch 深度學習 筆記

2021-10-08 20:31:30 字數 2962 閱讀 1089

方差、偏差

線性回歸來確定兩種或兩種以上變數間相互依賴的定量關係。線性回歸對於輸入x和輸出y有乙個對映(類似ax+b),而我們是訓練a、b這兩個引數。

以下**使用pytorch建立乙個線性的模型來對其進行擬合,即訓練過程。

def

linear_ex()

: x = np.random.rand(

256)

noise = np.random.randn(

256)/4

y =5* x +

7+ noise

# 以下使用pytorch建立乙個線性的模型來對其進行擬合,即訓練

# (1,1)代表輸入輸出的特徵數量是1,y=w*x+b,其中w代表權重,b代表偏置

model = linear(1,

1)# 損失函式

criterion = mseloss(

)# 優化器

optim = sgd(model.parameters(

), lr=

0.01

)# 訓練次數

epochs =

3000

# x_train, y_train 的形狀是 (256, 1), 代表 mini-batch 大小為256, feature 為1。astype('float32') 是為了下一步可以直接轉換為 torch.float。

x_train = x.reshape(-1

,1).astype(

'float32'

) y_train = y.reshape(-1

,1).astype(

'float32'

)# 開始訓練

for i in

range

(epochs)

:# 整理輸入、輸出資料。轉成torch的tensor型別

inputs = torch.from_numpy(x_train)

labels = torch.from_numpy(y_train)

# 使用模型**

outputs = model(inputs)

# 梯度歸零,以免累加

optim.zero_grad(

)# 損失

loss = criterion(outputs, labels)

# 反向傳播

loss.backward(

)# 優化。相當於更新

optim.step(

)if i %

100==0:

print

('epoch {},loss '

.format

(i, loss.data.item())

)# 訓練結束,提取最後的模型引數。

[w, b]

= model.parameters(

)print

(w.item(

), b.item())

# 視覺化模型,檢視訓練資料

predicted = model.forward(torch.from_numpy(x_train)

).data.numpy(

) plt.plot(x_train, y_train,

'go'

, label=

'data'

, alpha=

0.3)

plt.plot(x_train, predicted, label=

'predicted'

, alpha=1)

plt.legend(

) plt.show(

)

pytorch內建損失函式:

梯度下降是乙個使損失函式越來越小的優化演算法。在約束優化問題時(無求解機器學習演算法的模型引數),梯度下降是最常用的方法之一。

每一步梯度下降法需要對整個訓練集進行一次處理,但是如果資料集很大,處理速度很慢,並且不能一次性載入到記憶體或視訊記憶體。因此,將資料集劃分為小資料集,這種小資料集成為mini-batch。這種梯度下降法,乙個epoch可以進行mini-batch的個數次梯度下降。

mini-batch size的計算規則如下,在記憶體允許的最大情況下使用2的n次方個size

隨機梯度下降演算法。

# lr引數為學習率,對於sgd來說一般選擇0.1 0.01 0.001。

# 如果設定了momentum,就是帶有動量的sgd,可以不設定

optimizer = torch.optim.sgd(model.parameters(

), lr=

0.01

, momentum=

0.9)

rmsprop是一種可以加快梯度下降的演算法,利用此演算法,可減小某些維度梯度更新波動較大的情況,使其梯度下降的速度更快。

optimizer = torch.optim.rmsprop(model.parameters(

), lr=

0.01

, alpha=

0.09

)

adam 優化演算法的基本思想就是將 momentum 和 rmsprop 結合起來形成的一種適用於不同深度學習結構的優化演算法。

optimizer = torch.optim.adam(model.parameters(

), lr=

0.01

, betas=

(0.9

,0.999

), eps=1e-

08)

高偏差即欠擬合,擬合度不夠,通過增加網路結構、增加訓練時間、尋找合適的網路架構解決;高方差即過擬合,失去泛化能力,通過使用更多資料、正則化、尋找合適的網路結構解決。

# 計算偏差

print(5

- w.data.item(),

7- b.data.item(

))

正則化:

深度學習 Pytorch學習筆記(一)

pytorch中需要自己定義網路模型,該模型需要封裝到乙個自定義的類中,該類只是乙個子類,其繼承的父類為torch.nn.module,可見如下樹形結構圖 module實際又是繼承了object類,關於為什麼要繼承object類有興趣的可以看這篇部落格mro演算法 也就是說,自定義的模型除了要有 i...

深度學習 Pytorch學習筆記(五)

pytorch實現卷積神經網路 執行效率相對於keras慢太多 import torch import warnings import torchvision from torchvision.datasets import mnist from torch.utils.data import da...

pytorch 深度學習

pytorch深度學習實踐 訓練集 開發集 模型評估 測試集。f x wx b f x wx b f x w x bloss 乙個樣本 cost mean square error training set 區域性最優,不一定全域性最優。鞍點 梯度為0,但無法繼續迭代。w w c ost ww w ...