方差、偏差
線性回歸來確定兩種或兩種以上變數間相互依賴的定量關係。線性回歸對於輸入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 ...