線性回歸假設輸出與各個輸入之間是線性關係。
我們通常收集一系列的真實資料,例如多棟房屋的真實售出**和它們對應的面積和房齡。我們希望在這個資料上面尋找模型引數來使模型的****與真實**的誤差最小。在機器學習術語裡,該資料集被稱為訓練資料集(training data set)或訓練集(training set),一棟房屋被稱為乙個樣本(sample),其真實售出**叫作標籤(label),用來**標籤的兩個因素叫作特徵(feature)。特徵用來表徵樣本的特點。
在模型訓練中,我們需要衡量****值與真實值之間的誤差。通常我們會選取乙個非負數作為誤差,且數值越小表示誤差越小。乙個常用的選擇是平方函式。
在求數值解的優化演算法中,小批量隨機梯度下降(mini-batch stochastic gradient descent)在深度學習中被廣泛使用。它的演算法很簡單:先選取一組模型引數的初始值,如隨機選取;接下來對引數進行多次迭代,使每次迭代都可能降低損失函式的值。在每次迭代中,先隨機均勻取樣乙個由固定數目訓練資料樣本所組成的小批量(mini-batch) b ,然後求小批量中資料樣本的平均損失有關模型引數的導數(梯度),最後用此結果與預先設定的乙個正數的乘積作為模型引數在本次迭代的減小量。
import torch
import torchvision
import numpy as np
import sys
"/home/kesci/input"
)import d2lzh1981 as d2l
print
(torch.__version__)
print
(torchvision.__version__)
batch_size =
256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
num_inputs =
784print(28
*28)num_outputs =
10w = torch.tensor(np.random.normal(0,
0.01
,(num_inputs, num_outputs)
), dtype=torch.
float
)b = torch.zeros(num_outputs, dtype=torch.
float
)w.requires_grad_(requires_grad=
true
)b.requires_grad_(requires_grad=
true
)x = torch.tensor([[
1,2,
3],[
4,5,
6]])
print
(x.sum
(dim=
0, keepdim=
true))
# dim為0,按照相同的列求和,並在結果中保留列特徵
print
(x.sum
(dim=
1, keepdim=
true))
# dim為1,按照相同的行求和,並在結果中保留行特徵
print
(x.sum
(dim=
0, keepdim=
false))
# dim為0,按照相同的列求和,不在結果中保留列特徵
print
(x.sum
(dim=
1, keepdim=
false))
# dim為1,按照相同的行求和,不在結果中保留行特徵
defsoftmax
(x):
x_exp = x.exp(
) partition = x_exp.
sum(dim=
1, keepdim=
true
)# print("x size is ", x_exp.size())
# print("partition size is ", partition, partition.size())
return x_exp / partition # 這裡應用了廣播機制
x = torch.rand((2
,5))
x_prob = softmax(x)
print
(x_prob,
'\n'
, x_prob.
sum(dim=1)
)
問題的根源在於全連線層只是對資料做仿射變換(affine transformation),而多個仿射變換的疊加仍然是乙個仿射變換。解決問題的乙個方法是引入非線性變換,例如對隱藏變數使用按元素運算的非線性函式進行變換,然後再作為下乙個全連線層的輸入。這個非線性函式被稱為啟用函式(activation function)。
下面我們介紹幾個常用的啟用函式:
relu函式
relu(rectified linear unit)函式提供了乙個很簡單的非線性變換。給定元素 x ,該函式定義為:
relu(x)=max(x,0).
可以看出,relu函式只保留正數元素,並將負數元素清零。
sigmoid函式
sigmoid函式可以將元素的值變換到0和1之間。
tanh函式
tanh(雙曲正切)函式可以將元素的值變換到-1和1之間。
import torch
from torch import nn
from torch.nn import init
import numpy as np
import sys
"/home/kesci/input"
)import d2lzh1981 as d2l
print
(torch.__version__)
num_inputs, num_outputs, num_hiddens =
784,10,
256
net = nn.sequential(
d2l.flattenlayer(),
nn.linear(num_inputs, num_hiddens)
, nn.relu(),
nn.linear(num_hiddens, num_outputs),)
for params in net.parameters():
init.normal_(params, mean=
0, std=
0.01
) batch_size =
256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size,root=
'/home/kesci/input/fashionmnist2065'
)loss = torch.nn.crossentropyloss(
)optimizer = torch.optim.sgd(net.parameters(
), lr=
0.5)
num_epochs =
5d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, batch_size,
none
,none
, optimizer)
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 ...
深度學習 安裝pytorch
1 官網 2 cmd中執行 注意 直接複製run this command 裡面的安裝 注意 把pip3的3刪除 第一步 pip install i 第二步 pip install torchvision 注意 第一步和第二步可以合併為pip install i torchvision 3 安裝技巧...
PyTorch 深度學習 筆記
方差 偏差 線性回歸來確定兩種或兩種以上變數間相互依賴的定量關係。線性回歸對於輸入x和輸出y有乙個對映 類似ax b 而我們是訓練a b這兩個引數。以下 使用pytorch建立乙個線性的模型來對其進行擬合,即訓練過程。def linear ex x np.random.rand 256 noise ...