操作
算術操作
在pytorch中,同一種操作可能有很多種形式,下面用加法作為例子。
加法形式一
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)
加法形式三 inplace
# add x to y
y.add_(x)
print
(y)
注:pytorch操作inplace版本都有字尾_ ,例如x.copy_(),x.t_()
輸出
tensor([[
-0.8725,-
0.4392,-
0.0549],
[-0.3315
,0.4233
,1.2609],
[2.2099,-
0.3888,-
1.2844],
[-0.9981
,0.1833
,2.5960],
[0.4943
,0.1106
,1.4736]]
)
索引
還可以使用類似numpy的索引操作來訪問tensor的一部分,需要注意的是,索引出來的結果與原資料共享記憶體,也即修改乙個,另乙個會跟著修改。
y = x[0,
:]y +=
1print
(y)print
(x[0,:
])
輸出
tensor([-
0.4106
,0.5202
,0.1482])
tensor([-
0.4106
,0.5202
,0.1482
])
pytorch還提供了一些高階的選擇函式
函式功能
index_select(input,dim,index)
在指定維度dim上選取,比如選取某些行,某些列
masked_select(input,mask)
a[a>0] ,使用bytetensor進行選取
nonzero(input)
非0元素的下標
gather(input,dim,index)
根據index,在dim維度上選取資料,輸出的size與index一樣
改變形狀
用view()來改變tensor的形狀:
y = x.view(15)
z = x.view(-1
,5)#-1代指的數可以根據其他維度的size推出來
print
(x.size(
),y.size(
),z.size(
))
輸出:
torch.size([5
,3]) torch.size([15
]) torch.size([3
,5])
注意view()返回的新tensor與源tensor雖然可能有不同的size,但是是共享data的,也即更改其中的乙個,另外乙個也會跟著改變。(所以,view只是改變了對這個張量的觀察角度,內部資料並為改變)
x +=
1print
(x)print
(y)#也加了1
輸出;
tensor([[
0.5894
,1.5202
,1.1482],
[-0.0560
,1.3848
,1.3631],
[2.5372
,0.1347,-
0.9772],
[-0.7165
,0.7215
,3.0197],
[1.2080
,0.6697
,2.0794]]
)tensor(
[0.5894
,1.5202
,1.1482,-
0.0560
,1.3848
,1.3631
,2.5372
,0.1347,-
0.9772,-
0.7165
,0.7215
,3.0197
,1.2080
,0.6697
,2.0794
])
所以當想返回乙個新的副本(也就是不共享data記憶體)
pytorch還提供了乙個reshape()可以改變形狀,但是此函式並不能保證返回的是其拷貝,所以不推薦使用。推薦使用clone創造乙個副本然後再使用view。
x_cp = x.clone(
).view(15)
x -=
1print
(x)print
(x_cp)
輸出
tensor([[
-0.4106
,0.5202
,0.1482],
[-1.0560
,0.3848
,0.3631],
[1.5372,-
0.8653,-
1.9772],
[-1.7165,-
0.2785
,2.0197],
[0.2080,-
0.3303
,1.0794]]
)tensor(
[0.5894
,1.5202
,1.1482,-
0.0560
,1.3848
,1.3631
,2.5372
,0.1347,-
0.9772,-
0.7165
,0.7215
,3.0197
,1.2080
,0.6697
,2.0794
])
使用clone還有乙個好處是會被記錄在計算圖中,即梯度回傳到副本時也會傳到源tensor。
另外乙個常用的函式就是item(),它可以將乙個標量tensor轉換成乙個python number:
x = torch.randn(1)
print
(x)print
(x.item(
))
輸出:
tensor([-
0.3040])
-0.3040177822113037
線型代數
pytorch還支援一些線型函式
函式功能
trace
對角線元素之和(矩陣的跡)
diag
對角線元素
triu/tril
矩陣的上三角或下三角,可指定偏移量
mm/bmm
矩陣乘法,batch的矩陣乘法
addmm/addbmm/addmv/addr/baddbmm
矩陣運算t轉置
dot/cross
內積/外積
inverse
求逆矩陣
svd奇異值分解
pytorch中的tensor支援超過一百種操作,包括轉置、索引、切片、數字運算、線性代數、隨機數等等。
動手學深度學習筆記2
part1 模型選擇1 誤差與資料集 訓練誤差 training error 模型在訓練集上表現出的誤差。泛化誤差 generalization error 在任意乙個測試資料樣本上表現出的誤差的期望。舉個栗子,訓練誤差就是做往屆試卷 訓練 的錯誤率,泛化誤差則可以通過真正參加考試 測試 時的答題錯...
筆記 動手學深度學習
在求數值解的優化演算法中,小批量隨機梯度下降 mini batch stochastic gradient descent 在深度學習中被廣泛使用。它的演算法很簡單 先選取一組模型引數的初始值,如隨機選取 接下來對引數進行多次迭代,使每次迭代都可能降低損失函式的值。在每次迭代中,先隨機均勻取樣乙個由...
深度學習 動手學深度學習筆記 12
g是乙個生成的網路,它接收乙個隨機的雜訊z,通過這個雜訊生成,記做g z d是乙個判別網路,判別一張是不是 真實的 它的輸入引數是x,x代表一張,輸出d x 代表x為真實的概率,如果為1,就代表100 是真實的,而輸出為0,就代表不可能是真實的。在訓練過程中,生成網路g的目標就是盡量生成真實的去欺騙...