織夢(mèng)網(wǎng)站程序模板百度網(wǎng)盤(pán)客服人工電話(huà)95188
torch.reshape
?是 PyTorch 用于改變張量形狀的函數(shù)之一。它不會(huì)改變張量的數(shù)據(jù),而是重新組織其元素以適應(yīng)新的形狀。
reshape
?的使用
torch.reshape(input, shape) → Tensor
input
:輸入張量。shape
:新形狀,使用整數(shù)或 -1 指定各維度大小。-1
?表示自動(dòng)推斷該維度大小,使總元素?cái)?shù)保持不變。
示例
import torch# 創(chuàng)建一個(gè)形狀為 (2, 3) 的張量
x = torch.arange(6).view(2, 3)# 使用 reshape 改變形狀為 (3, 2)
y = torch.reshape(x, (3, 2))print(y)
# 輸出:
# tensor([[0, 1],
# [2, 3],
# [4, 5]])
使用?-1
?自動(dòng)推斷
z = torch.reshape(x, (-1, 2))
print(z)
# 輸出:
# tensor([[0, 1],
# [2, 3],
# [4, 5]])
與其他張量形狀改變函數(shù)的區(qū)別
1.?view
- 特點(diǎn):
view
?也用于改變張量形狀,但它要求輸入張量在內(nèi)存中是連續(xù)的。 - 限制:如果張量不是連續(xù)的(即非?
contiguous
),使用?view
?會(huì)報(bào)錯(cuò),需要先調(diào)用?contiguous
?方法。 - 示例:
x = torch.arange(6).view(2, 3)
y = x.view(3, 2) # 可以直接使用x = x.T # 轉(zhuǎn)置操作使張量變?yōu)榉沁B續(xù)
y = x.view(3, 2) # 會(huì)報(bào)錯(cuò)
2.?permute
- 特點(diǎn):用于交換張量的維度,而不是改變形狀。
- 用途:適用于維度重新排列。
x = torch.rand(2, 3, 4)
y = x.permute(1, 0, 2) # 改變維度順序
3.?resize_
- 特點(diǎn):修改張量形狀,可能破壞原始數(shù)據(jù),慎用。
- 用途:多用于臨時(shí)調(diào)整張量形狀,不推薦在計(jì)算中使用。
4.?squeeze
?/?unsqueeze
- 特點(diǎn):
squeeze
:移除長(zhǎng)度為 1 的維度。unsqueeze
:添加長(zhǎng)度為 1 的維度。
- 示例:
x = torch.rand(1, 3, 1, 4)
y = x.squeeze() # 去掉長(zhǎng)度為 1 的維度
z = x.unsqueeze(2) # 在第 2 個(gè)位置添加一個(gè)長(zhǎng)度為 1 的維度
5.?flatten
- 特點(diǎn):將多維張量展平為一維張量,或在指定維度范圍內(nèi)展平。
- 用途:簡(jiǎn)化張量為線(xiàn)性輸入。
- 示例:
x = torch.rand(2, 3, 4) y = torch.flatten(x) # 展平為 1D z = torch.flatten(x, start_dim=1) # 從第 1 維開(kāi)始展平 print(z.shape) # torch.Size([2, 12])
reshape
?的優(yōu)勢(shì) - 靈活性:不需要張量是連續(xù)的。
- 安全性:自動(dòng)處理非連續(xù)張量(相比?
view
)。 - 性能:通常不會(huì)引入額外開(kāi)銷(xiāo),尤其在連續(xù)內(nèi)存情況下。
reshape
?與?view
?的選擇
- 如果確定張量是連續(xù)的,可用?
view
?提高性能。 - 如果不確定張量是否連續(xù),使用?
reshape
?更安全。
以下函數(shù)在改變張量形狀或維度時(shí)不會(huì)破壞原始數(shù)據(jù):
reshape
view
(前提是張量連續(xù))permute
transpose
squeeze
?/?unsqueeze
flatten
contiguous
這些操作只會(huì)影響數(shù)據(jù)的組織形式或內(nèi)存布局,而不會(huì)修改數(shù)據(jù)本身。
總結(jié)
reshape
?是 PyTorch 中改變張量形狀的通用函數(shù),靈活且易用。- 與其他形狀操作函數(shù)(如?
view
、permute
、squeeze
?等)的主要區(qū)別在于適用場(chǎng)景和對(duì)張量?jī)?nèi)存布局的要求。