Pytorch tensor維度的擴充套件,擠壓,擴張

2021-10-10 01:16:51 字數 2819 閱讀 1084

資料本身不發生改變,資料的訪問方式發生了改變

1.維度的擴充套件
函式:unsqueeze()

# a是乙個4維的

a = torch.randn(4, 3, 28, 28)

print('a.shape\n', a.shape)

print('\n維度擴充套件(變成5維的):')

print('第0維前加1維')

print(a.unsqueeze(0).shape)

print('第4維前加1維')

print(a.unsqueeze(4).shape)

print('在-1維前加1維')

print(a.unsqueeze(-1).shape)

print('在-4維前加1維')

print(a.unsqueeze(-4).shape)

print('在-5維前加1維')

print(a.unsqueeze(-5).shape)

輸出結果
a.shape

torch.size([4, 3, 28, 28])

維度擴充套件(變成5維的):

第0維前加1維

torch.size([1, 4, 3, 28, 28])

第4維前加1維

torch.size([4, 3, 28, 28, 1])

在-1維前加1維

torch.size([4, 3, 28, 28, 1])

在-4維前加1維

torch.size([4, 1, 3, 28, 28])

在-5維前加1維

torch.size([1, 4, 3, 28, 28])

注意,第5維前加1維,就會出錯

# print(a.unsqueeze(5).shape)

# errot:dimension out of range (expected to be in range of -5, 4], but got 5)

連續擴維
函式:unsqueeze()

# b是乙個1維的

b = torch.tensor([1.2, 2.3])

print('b.shape\n', b.shape)

print()

# 0維之前插入1維,變成1,2]

print(b.unsqueeze(0))

print()

# 1維之前插入1維,變成2,1]

print(b.unsqueeze(1))

# 連續擴維,然後再對某個維度進行擴張

print(b.unsqueeze(1).unsqueeze(2).unsqueeze(0).shape)

輸出結果
b.shape

torch.size([2])

tensor([[1.2000, 2.3000]])

tensor([[1.2000],

[2.3000]])

torch.size([1, 2, 1, 1])

2.擠壓維度
函式:squeeze()

# 擠壓維度,只會擠壓shape為1的維度,如果shape不是1的話,當前值就不會變

c = torch.randn(1, 32, 1, 2)

print(c.shape)

print(c.squeeze(0).shape)

print(c.squeeze(1).shape) # shape不是1,不會變

print(c.squeeze(2).shape)

print(c.squeeze(3).shape) # shape不是1,不會變

輸出結果
torch.size([1, 32, 1, 2])

torch.size([32, 1, 2])

torch.size([1, 32, 1, 2])

torch.size([1, 32, 2])

torch.size([1, 32, 1, 2])

3.維度擴張
函式1:expand():擴張到多少,

# shape的擴張

# expand():對shape為1的進行擴充套件,對shape不為1的只能保持不變,因為不知道如何變換,會報錯

d = torch.randn(1, 32, 1, 1)

print(d.shape)

print(d.expand(4, 32, 14, 14).shape)

輸出結果
torch.size([1, 32, 1, 1])

torch.size([4, 32, 14, 14])

函式2:repeat()方法,擴張多少倍

d=torch.randn([1,32,4,5])

print(d.shape)

print(d.repeat(4,32,2,3).shape)

輸出結果
torch.size([1, 32, 4, 5])

torch.size([4, 1024, 8, 15])

Pytorch Tensor和tensor的區別

在pytorch中,tensor和tensor都能用於生成新的張量 a torch.tensor 1 2 a tensor 1 2.a torch.tensor 1 2 a tensor 1 2 首先,我們需要明確一下,torch.tensor 是python類,更明確地說,是預設張量型別torch...

pytorch tensor 篩選排除

篩選排除還沒找到答案 取數運算 正好遇到乙個需求。我有m行k列的乙個表a,和乙個長為m的索引列表b。b中儲存著,取每行第幾列的元素。這種情況下,你用普通的索引是會失效的。import torch a torch.longtensor 1,2,3 4,5,6 b torch.longtensor 0,...

Pytorch tensor的感知機

單層感知機的主要步驟 單層感知機梯度的推導 要進行優化的是w,對w進行梯度下降 a torch.randn 1,10 a是乙個 1,10 的向量 w torch.randn 1,10,requires grad true w是乙個可導的 1,10 的向量 1.2.經過乙個sigmoid啟用函式 o ...