企業(yè)網(wǎng)站建設(shè)多少家如何注冊網(wǎng)址
1. 矩陣與標(biāo)量
矩陣(張量)每一個元素與標(biāo)量進行操作。
import torch
a = torch.tensor([1,2])
print(a+1)
>>> tensor([2, 3])
2. 哈達瑪積(Mul)
兩個相同尺寸的張量相乘,然后對應(yīng)元素的相乘就是這個哈達瑪積。
a = torch.tensor([1,2])
b = torch.tensor([2,3])
print(a*b)
print(torch.mul(a,b))
>>> tensor([2, 6])
>>> tensor([2, 6])
這個torch.mul()和*以及torch.dot()是等價的
當(dāng)然,除法也是類似的:
a = torch.tensor([1.,2.])
b = torch.tensor([2.,3.])
print(a/b)
print(torch.div(a/b))
>>> tensor([0.5000, 0.6667])
>>> tensor([0.5000, 0.6667])
我們可以發(fā)現(xiàn)的torch.div()其實就是/, 類似的:torch.add就是+,torch.sub()就是-,不過符號的運算更簡單常用。
3. 矩陣乘法
在代碼中矩陣相乘有三種寫法:
- torch.mm()
- torch.matmul()
- @
a = torch.tensor([1.,2.])
b = torch.tensor([2.,3.]).view(1,2)
print(torch.mm(a, b))
print(torch.matmul(a, b))
print(a @ b)
輸出結(jié)果:
tensor([[2., 3.],[4., 6.]])
tensor([[2., 3.],[4., 6.]])
tensor([[2., 3.],[4., 6.]])
上面的是對二維矩陣而言的,假如參與運算的是一個多維張量,那么只有torch.matmul()可以使用
torch.mv()等價于torch.mm(),不過不同的是mv適用與矩陣和向量相乘
在多維張量中,參與矩陣運算的其實只有后兩個維度,前面的維度其實就像是索引一樣,舉個例子:
a = torch.rand((1,2,64,32))
b = torch.rand((1,2,32,64))
print(torch.matmul(a, b).shape)
>>> torch.Size([1, 2, 64, 64])
4. 冪與開方
a = torch.tensor([1.,2.])
b = torch.tensor([2.,3.])
c1 = a ** b
c2 = torch.pow(a, b)
print(c1,c2)
>>> tensor([1., 8.]) tensor([1., 8.])
5. 對數(shù)運算
pytorch中l(wèi)og是以e自然數(shù)為底數(shù)的,然后log2和log10才是以2和10為底數(shù)的運算。
import numpy as np
print('對數(shù)運算')
a = torch.tensor([2,10,np.e])
print(torch.log(a))
print(torch.log2(a))
print(torch.log10(a))
>>> tensor([0.6931, 2.3026, 1.0000])
>>> tensor([1.0000, 3.3219, 1.4427])
>>> tensor([0.3010, 1.0000, 0.4343])
6. 近似值運算
- .ceil() 向上取整
- .floor()向下取整
- .trunc()取整數(shù)
- .frac()取小數(shù)
- .round()四舍五入
a = torch.tensor(1.2345)
print(a.ceil())
>>>tensor(2.)
print(a.floor())
>>> tensor(1.)
print(a.trunc())
>>> tensor(1.)
print(a.frac())
>>> tensor(0.2345)
print(a.round())
>>> tensor(1.)
7. 剪裁運算
這個是讓一個數(shù),限制在你自己設(shè)置的一個范圍內(nèi)[min,max],小于min的話就被設(shè)置為min,大于max的話就被設(shè)置為max。這個操作在一些對抗生成網(wǎng)絡(luò)中,好像是WGAN-GP,通過強行限制模型的參數(shù)的值。
a = torch.rand(5)
print(a)
print(a.clamp(0.3,0.7))
輸出為:
tensor([0.5271, 0.6924, 0.9919, 0.0095, 0.0340])
tensor([0.5271, 0.6924, 0.7000, 0.3000, 0.3000])