一元線性模型非常簡單,假設我們有變數 x
ix_i
xi 和目標 y
iy_i
yi,每個 i 對應於乙個資料點,希望建立乙個模型
y ^i
=wxi
+b
\hat_i = w x_i + b
y^i=
wxi
+by ^i
\hat_i
y^i
是我們**的結果,希望通過 y^i
\hat_i
y^i
來擬合目標 y
iy_i
yi,通俗來講就是找到這個函式擬合 y
iy_i
yi 使得誤差最小,即最小化
1 n∑
i=1n
(y^i
−yi)
2\frac \sum_^n(\hat_i - y_i)^2
n1i=1
∑n(
y^i
−yi
)2那麼如何最小化這個誤差呢?
這裡需要用到梯度下降,這是我們接觸到的第乙個優化演算法,非常簡單,但是卻非常強大,在深度學習中被大量使用,所以讓我們從簡單的例子出發了解梯度下降法的原理
import torch
import numpy as np
from torch.autograd import variable
# 讀入資料 x 和 y
x_train = np.array([[
3.3],[
4.4],[
5.5],[
6.71],
[6.93],
[4.168],
[9.779],
[6.182],
[7.59],
[2.167],
[7.042],
[10.791],
[5.313],
[7.997],
[3.1]]
, dtype=np.float32)
y_train = np.array([[
1.7],[
2.76],
[2.09],
[3.19],
[1.694],
[1.573],
[3.366],
[2.596],
[2.53],
[1.221],
[2.827],
[3.465],
[1.65],
[2.904],
[1.3]]
, dtype=np.float32)
# 畫出影象
import matplotlib.pyplot as plt
%matplotlib inline
plt.plot(x_train, y_train,
'bo'
)```# 轉換成 tensor
x_train = torch.from_numpy(x_train)
y_train = torch.from_numpy(y_train)
# 定義引數 w 和 b
w = variable(torch.randn(1)
, requires_grad=
true
)# 隨機初始化
b = variable(torch.zeros(1)
, requires_grad=
true
)# 使用 0 進行初始化
# 構建線性回歸模型
x_train = variable(x_train)
y_train = variable(y_train)
deflinear_model
(x):
return x * w + b
y_ = linear_model(x_train)
plt.plot(x_train.data.numpy(
), y_train.data.numpy(),
'bo'
, label=
'real'
)plt.plot(x_train.data.numpy(
), y_.data.numpy(),
'ro'
, label=
'estimated'
)plt.legend(
)# 計算誤差
defget_loss
(y_, y)
:return torch.mean(
(y_ - y_train)**2
)loss = get_loss(y_, y_train)
# 列印一下看看 loss 的大小
print
(loss)
PyTorch從入門到出門
1.pytorch簡介 為什麼選擇pytorch以及安裝過程 2.1 pytorch神經網路基礎 torch對比numpy 2.2 pytorch神經網路基礎 torch中的變數variable 2.3 pytorch神經網路基礎 激勵函式 activation function 3.1 pytor...
PyTorch 從入門到再次入門(一)
pytorch 以下簡稱torch 是乙個將研究院原型到產品布置無縫銜接的深度學習框架。torch有兩個版本,staple 1.0 與preview nightly 但作為我們初學者來說,直接安裝staple1.0就行了。由於我是以windows入門,所以這篇部落格的前一部分就以windows py...
Nginx從入門到實戰
什麼是nginx?nginx engine x 是一款輕量級的web 伺服器 反向 伺服器及電子郵件 imap pop3 伺服器。什麼是反向 反向 reverse proxy 方式是指以 伺服器來接受internet上的連線請求,然後將請求 給內部網路上的伺服器,並將從伺服器上得到的結果返回給int...