autograd自動求導
pytorch 是乙個基於python的科學計算包,
用於代替numpy,可以利用gpu的效能進行計算;
作為乙個深度學習平台。
張量(tensor)類似於numpy中的ndarray,但還可以在gpu上使用,實現加速計算的效果。
建立張量的幾種方式:
建立乙個沒有初始化的矩陣張量
x=torch.empty(5,3)
建立乙個隨機初始化矩陣
x = torch.rand(5,3)
建立乙個填滿零,且資料型別為long的矩陣
x = torch.zeros(5, 3, dtype=torch.long)
print(x)
直接從資料構造張量
x = torch.tensor([5.5, 3])
根據已有的張量構造新的張量
x = x.new_ones(5, 3, dtype=torch.double)
x = torch.randn_like(x, dtype=torch.float)
獲取張量的形狀
print(x.size())
注意,x.size的型別是元組
加法:加法形式一
y = torch.rand(5, 3)
print(x + y)
加法形式二
print(torch.add(x, y))
加法:給定乙個輸出張量作為引數
result = torch.empty(5, 3)
torch.add(x, y, out=result)
print(result)
加法:原位/原地操作(in-place)
y.add_(x)
print(y)
乘法:a*b: 對應元素相乘
>>> a = torch.tensor([2, 3, 5])
>>> b = torch.tensor([1, 4, 2])
>>> a*b
tensor([ 2, 12, 10])
eg2
>>> a = torch.rand(3,2,4)
>>> print(a)
tensor([[[0.7227, 0.4787, 0.9396, 0.6984],
[0.1252, 0.2006, 0.2366, 0.9549]],
[[0.4684, 0.3253, 0.7873, 0.1744],
[0.2180, 0.4210, 0.0993, 0.2495]],
[[0.0966, 0.7351, 0.1396, 0.2278],
[0.9622, 0.9284, 0.3647, 0.4792]]])
>>> b = torch.rand(3,2,4)
>>> print(b)
tensor([[[0.9952, 0.0990, 0.1335, 0.7350],
[0.6576, 0.5238, 0.2977, 0.6391]],
[[0.5607, 0.5219, 0.0735, 0.8392],
[0.3514, 0.5577, 0.7860, 0.4641]],
[[0.0231, 0.1542, 0.1217, 0.3119],
[0.8564, 0.1494, 0.3588, 0.8848]]])
>>> print(a*b)
tensor([[[0.7193, 0.0474, 0.1254, 0.5133],
[0.0824, 0.1051, 0.0704, 0.6103]],
[[0.2626, 0.1698, 0.0579, 0.1463],
[0.0766, 0.2348, 0.0780, 0.1158]],
[[0.0022, 0.1134, 0.0170, 0.0710],
[0.8241, 0.1387, 0.1309, 0.4240]]])
索引操作:
print(x[:, 1])
輸出x的第二列資料
改變tensor形狀:使用torch.view
x = torch.rand (5,3)
y= x.torch.view(15)
z = x.torch.view(-1, 5)
torch張量和numpy陣列之間可以互相轉化,
他們共享底層記憶體,乙個改變,另乙個也會改變
張量可以使用.to移動到任何裝置(device)s上
device = torch.device(「cuda」)
x = x.to(device)
或者直接在gpu上建立tensor
y = torch.ones_like(x, device =device)
為張量上的所有操作提供了自動求導操作。
.requires_grad屬性:當該屬性設定為true的話,會追蹤該張量的所有操作
.grad屬性: 這個張量的所有梯度會自動累加到.grad屬性。
.grad_fn屬性:每個張量都有乙個.grad_fn屬性,該屬性引用了建立tensor的function
完成計算後,通過呼叫.backward(),來自動計算所有梯度。
如果需要計算導數,可以在 tensor 上呼叫 .backward()。
如果tensor 是乙個標量(即它包含乙個元素的資料),則不需要為 backward() 指定任何引數,
但是如果它有更多的元素,則需要指定乙個 gradient 引數,該引數是形狀匹配的張量。
現在求out對x的梯度,
因為out是個標量,所以out.backward()等價於out.backward(torch.tensor(1.))
out.backward() #開始反向傳播
print(x.grad) #輸出導數 d(out)/dx
得到的梯度是個4*4的矩陣
可以通過給backward指定引數v,求雅可比向量積
使用torch.nn包來構建神經網路。
nn包依賴於autograd包來定義模型並對他們求導。
乙個神經網路的典型訓練過程:
定義網路
在資料集上迭代,經過網路計算得到輸出
計算損失loss
將梯度反向傳播給網路的引數
更新網路的權重引數,weight = weight -learning_rate * gradient
pytorch搭建簡單神經網路入門
參考自 以下 摘抄自 請先閱讀上述參考文章。改了幾個引數試試 import torch import matplotlib.pyplot as plt 搭建神經網路 class neuro net torch.nn.module 主要構成為 init 和forward函式 神經網路 def init...
pytorch 快速搭建神經網路
另一種搭建神經網路的方法,並不定義類 快速搭建乙個神經網路模組 net2 torch.nn.sequential 在這個括號裡面一層一層的壘神經元就好了 torch.nn.linear 2,10 如果中間有激勵函式,也加進來 torch.nn.relu torch.nn.linear 10,2 等同...
pytorch搭建簡單的神經網路
主要是熟悉pytorch這個開源框架。這個網路主要是用來擬合y x 2這個函式用的 所以說很簡單啦 自己生成的訓練資料,全部用來做訓練集了。網路結構 乙個輸入的向量,一層隱藏層,一層輸出層。隱藏層用的relu啟用函式,輸出層什麼都沒加,直接線性輸出。from torch.autograd impor...