溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PyTorch中的squeeze()和unsqueeze()如何應用

發(fā)布時間:2022-03-16 10:30:00 來源:億速云 閱讀:459 作者:iii 欄目:開發(fā)技術

本篇內容主要講解“PyTorch中的squeeze()和unsqueeze()如何應用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“PyTorch中的squeeze()和unsqueeze()如何應用”吧!

1.torch.squeeze

PyTorch中的squeeze()和unsqueeze()如何應用

squeeze的用法主要就是對數(shù)據的維度進行壓縮或者解壓。

先看torch.squeeze() 這個函數(shù)主要對數(shù)據的維度進行壓縮,去掉維數(shù)為1的的維度,比如是一行或者一列這種,一個一行三列(1,3)的數(shù)去掉第一個維數(shù)為一的維度之后就變成(3)行。squeeze(a)就是將a中所有為1的維度刪掉。不為1的維度沒有影響。a.squeeze(N) 就是去掉a中指定的維數(shù)為一的維度。還有一種形式就是b=torch.squeeze(a,N) a中去掉指定的定的維數(shù)為一的維度。

換言之:

表示若第arg維的維度值為1,則去掉該維度,否則tensor不變。(即若tensor.shape()[arg] == 1,則去掉該維度)

例如:

一個維度為2x1x2x1x2的tensor,不用去想它長什么樣兒,squeeze(0)就是不變,squeeze(1)就是變成2x2x1x2。(0是從最左邊的維度算起的)

>>> x = torch.zeros(2, 1, 2, 1, 2)
>>> x.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x)
>>> y.size()
torch.Size([2, 2, 2])
>>> y = torch.squeeze(x, 0)
>>> y.size()
torch.Size([2, 1, 2, 1, 2])
>>> y = torch.squeeze(x, 1)
>>> y.size()
torch.Size([2, 2, 1, 2])

2.torch.unsqueeze

PyTorch中的squeeze()和unsqueeze()如何應用

torch.unsqueeze()這個函數(shù)主要是對數(shù)據維度進行擴充。給指定位置加上維數(shù)為一的維度,比如原本有個三行的數(shù)據(3),在0的位置加了一維就變成一行三列(1,3)。a.squeeze(N) 就是在a中指定位置N加上一個維數(shù)為1的維度。還有一種形式就是b=torch.squeeze(a,N) a就是在a中指定位置N加上一個維數(shù)為1的維度。

>>> x = torch.tensor([1, 2, 3, 4])
>>> torch.unsqueeze(x, 0)
tensor([[ 1,  2,  3,  4]])
>>> torch.unsqueeze(x, 1)
tensor([[ 1],
        [ 2],
        [ 3],
        [ 4]])

3.例子

給一個使用上述兩個函數(shù),并進行一次卷積的例子:

from torchvision.transforms import  ToTensor
import torch as t
from torch import nnimport cv2
import numpy as np
import cv2
to_tensor = ToTensor()
# 加載圖像
lena = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imshow('lena', lena)
# input = to_tensor(lena) 將ndarray轉換為tensor,自動將[0,255]歸一化至[0,1]。
input = to_tensor(lena).unsqueeze(0)
# 初始化卷積參數(shù)
kernel = t.ones(1, 1, 3, 3)/-9
kernel[:, :, 1, 1] = 1
conv = nn.Conv2d(1, 1, 3, 1, padding=1, bias=False)
conv.weight.data = kernel.view(1, 1, 3, 3)
# 輸出
out = conv(input)
out = out.squeeze(0)
print(out.shape)
out = out.unsqueeze(3)
print(out.shape)
out = out.squeeze(0)
print(out.shape)
out = out.detach().numpy()# 縮放到0~最大值
cv2.normalize(out, out, 1.0, 0, cv2.NORM_INF)
cv2.imshow("lena-result", out)
cv2.waitKey()

結果圖如下:

PyTorch中的squeeze()和unsqueeze()如何應用

到此,相信大家對“PyTorch中的squeeze()和unsqueeze()如何應用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI