import numpy as np
import torch
# 等差數(shù)列(開始,結(jié)束,個(gè)數(shù))
torch.linspace(0.1,1,5)
tensor([0.1000, 0.3250, 0.5500, 0.7750, 1.0000])
# 空矩陣
print(torch.empty([3,4]))
# 找了一塊不用的內(nèi)存,不在乎里面的數(shù)據(jù),可能是之前遺留下來的(返回未初始化的數(shù)據(jù))
print(torch.empty(3,5))
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
tensor([[1.0286e-38, 1.0194e-38, 9.6429e-39, 9.2755e-39, 9.1837e-39],
[9.3674e-39, 1.0745e-38, 1.0653e-38, 9.5510e-39, 1.0561e-38],
[1.0194e-38, 1.1112e-38, 1.0561e-38, 9.9184e-39, 1.0653e-38]])
# 以base為底,(2,6)五等份,從2的2次方到2的6次方
torch.logspace(2,6,5,base = 2)
tensor([ 4., 8., 16., 32., 64.])
# (m,n)全a的矩陣
torch.full((3,4),2)
tensor([[2, 2, 2, 2],
[2, 2, 2, 2],
[2, 2, 2, 2]])
# 二維單位矩陣(E)
torch.eye(5)
tensor([[1., 0., 0., 0., 0.],
[0., 1., 0., 0., 0.],
[0., 0., 1., 0., 0.],
[0., 0., 0., 1., 0.],
[0., 0., 0., 0., 1.]])
依概率分布創(chuàng)建張量# 高斯分布:torch.normal(mean, std, out=None)
print(torch.normal(2, 3, size=(1,5)))
# 一一對應(yīng)生成一個(gè)
print(torch.normal(mean = torch.arange(1.,11.), std = torch.arange(1,0,-0.1)))
tensor([[6.0627, 3.5489, 3.7053, 0.9814, 3.8663]])
tensor([-0.7955, 1.0690, 3.7225, 3.0768, 4.5076, 5.9667, 6.9369, 8.6122,
8.8240, 9.8426])
# 標(biāo)準(zhǔn)正態(tài)分布
torch.randn((3,4))
tensor([[-0.1535, -1.9643, -0.8889, -0.4511],
[ 0.4905, 0.1066, 0.5044, 1.4474],
[ 1.2457, -0.8081, 2.6163, -1.1373]])
# 整數(shù)均勻分布(均勻分布 =>范圍內(nèi)的數(shù)被取到的概率一樣 =>low,high范圍內(nèi)的整數(shù)隨機(jī)數(shù)) [low,high)
torch.randint(1, 10, (2,3))
tensor([[3, 7, 8],
[9, 7, 8]])
# 生成從0到n-1的隨機(jī)排列(隨機(jī)調(diào)整數(shù)據(jù)序列)
torch.randperm(5)
tensor([2, 0, 1, 4, 3])
# 伯努利分布(0-1分布)
s = torch.empty(3, 3).uniform_(0,1) # 生成(0,1)之間的隨機(jī)數(shù)
print(s)
print(torch.bernoulli(s))
tensor([[0.8420, 0.6974, 0.6081],
[0.2279, 0.3899, 0.1904],
[0.9900, 0.6994, 0.6235]])
tensor([[1., 1., 1.],
[1., 1., 0.],
[1., 1., 0.]])
張量拼接與切分# torch.cat:按dim指定維度拼接,0為行,1為列
x = torch.randint(1, 10, (2, 3))
torch.cat((x, x, x),dim = 0)
tensor([[7, 3, 7],
[7, 4, 7],
[7, 3, 7],
[7, 4, 7],
[7, 3, 7],
[7, 4, 7]])
# torch.stack:新創(chuàng)建一個(gè)維度,拼接(在高一維拼接)
y = torch.randint(1, 10, (2,3))
torch.stack((x,y),1)
tensor([[[7, 3, 7],
[9, 1, 8]],
[[7, 4, 7],
[9, 5, 9]]])
# torch.split:為int時(shí),表示每一份的長度;為list時(shí),按list元素切分
a = torch.arange(10).reshape(5,2)
print('a:',a)
print('為int時(shí):',torch.split(a, 1)) # 返回tensor列表
print('為list時(shí):',torch.split(a,[2,3]))
a: tensor([[0, 1],
[2, 3],
[4, 5],
[6, 7],
[8, 9]])
為int時(shí): (tensor([[0, 1]]), tensor([[2, 3]]), tensor([[4, 5]]), tensor([[6, 7]]), tensor([[8, 9]]))
為list時(shí): (tensor([[0, 1],
[2, 3]]), tensor([[4, 5],
[6, 7],
[8, 9]]))
張量索引# torch.index_select:按dim指定,截??;indices參數(shù)必須是tensor數(shù)組的格式
x = torch.randn(3, 4)
print(x)
indices = torch.tensor([0, 2])
torch.index_select(x, 1, indices)
tensor([[-0.3880, 0.3159, -1.5236, -1.0030],
[ 1.2080, 0.5500, 0.0146, -1.0543],
[-1.7705, 0.6398, 2.2544, -2.0102]])
tensor([[-0.3880, -1.5236],
[ 1.2080, 0.0146],
[-1.7705, 2.2544]])
# torch.masked_select
x = torch.randn(3,4)
print(x)
mask = x.ge(0.5)# 返回True or False 以input為界
print(mask)
torch.masked_select(x, mask) # 按True進(jìn)行索引,返回一維數(shù)組
tensor([[ 0.0288, -0.0047, 1.6408, 0.2148],
[-0.7997, -0.3897, 1.1881, -0.5227],
[-0.5981, 1.8946, 0.1165, 0.7575]])
tensor([[False, False, True, False],
[False, False, True, False],
[False, True, False, True]])
tensor([1.6408, 1.1881, 1.8946, 0.7575])
張量變換# reshape 10 = 2 * 5
torch.arange(10).reshape(2,5)
tensor([[0, 1, 2, 3, 4],
[5, 6, 7, 8, 9]])
# torch.transpose:按維度轉(zhuǎn)置
x = torch.randint(1,10,(3,4))
print(x)
y = torch.transpose(x, 0, 1)# dim=1和dim=0交換
print(y)
# print(x.T) 二維的矩陣轉(zhuǎn)置可以直接x.T得到
tensor([[2, 1, 9, 7],
[9, 4, 5, 8],
[6, 9, 9, 8]])
tensor([[2, 9, 6],
[1, 4, 9],
[9, 5, 9],
[7, 8, 8]])
# torch.squeeze:壓縮長度為1的維度
x = torch.zeros(2, 1, 2, 1, 2)
print(x.shape)
y = torch.squeeze(x)
print(y,'\n',y.shape)
torch.Size([2, 1, 2, 1, 2])
tensor([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
torch.Size([2, 2, 2])
# torch.unsqueeze:按照dim擴(kuò)展維度
x = torch.tensor([1, 2, 3, 4])
torch.unsqueeze(x, dim = 1)
tensor([[1],
[2],
[3],
[4]])
線性回歸Demo# 首先隨機(jī)生成訓(xùn)練樣本x,y
x = torch.rand(20,1) * 10
y = 2 * x + (torch.rand(20,1) + 6) # y = ax + b
# 初始化線性回歸參數(shù)w,b
w = torch.randn((1), requires_grad=True)
b = torch.randn((1), requires_grad=True)
# 設(shè)置學(xué)習(xí)率lr
lr = 0.05
for iterator in range(100):
wx = torch.mul(w, x)# 向量相乘
y_pre = torch.add(wx,b)# 向量相加
# 均方誤差損失loss=
loss = (0.5 * (y - y_pre) ** 2).mean()
# 損失函數(shù)求導(dǎo),梯度下降法最小化loss
loss.backward()
# 更新參數(shù)
w.data.sub_(lr * w.grad) # '-' 表示 -=
b.data.sub_(lr * b.grad)
# 梯度清零(可以放到求導(dǎo)之前)
w.grad.data.zero_()
b.grad.data.zero_()
print(w.data, b.data)
tensor([2.1755]) tensor([5.2428])
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
成都創(chuàng)新互聯(lián)公司是一家專注網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷策劃、微信平臺(tái)小程序開發(fā)、電子商務(wù)建設(shè)、網(wǎng)絡(luò)推廣、移動(dòng)互聯(lián)開發(fā)、研究、服務(wù)為一體的技術(shù)型公司。公司成立十多年以來,已經(jīng)為1000+酒店設(shè)計(jì)各業(yè)的企業(yè)公司提供互聯(lián)網(wǎng)服務(wù)?,F(xiàn)在,服務(wù)的1000+客戶與我們一路同行,見證我們的成長;未來,我們一起分享成功的喜悅。