درود همراهان گرامی. امروز قصد دارم توضیحاتی در مورد دستورات squeeze و unsqueeze در کتابخانه PyTorch ارائه بدم تا بتونید با این دستورات آشنا شده و از اونها در کدهای خودتون استفاده کنید و یا شبکه هایی که این دستورات در آنها استفاده شده است را بهتر درک کنید.
قبل از هرچیز توضیحی در مورد معنی واژه squeeze بدم، در دیکشنری معنی کلمه squeeze فشردن یا چلاندن آورده شده است. همانطور که می توان حدس زد از این دستور برای فشرده سازی یا کم کردن ابعاد تنسورها (آرایه های چندبعدی) در پایتورچ استفاده می شود و در نقطه مقابل از unsqueeze برای اضافه کردن ابعاد تنسور استفاده می گردد.
برای کم کردن یا فشردن یک تنسور در کتابخانه پایتورچ از دستور torch.squeeze() استفاده می نماییم. با این کار تنسور جدیدی برگردانده می شود که تمام ابعاد با سایز یک را حذف می نماید. برای مثال اگر تنسور ما سایز M*1*N*1*P*1 داشته باشد و از دستور torch.squeeze() استفاده نماییم، تنسوری با سایز M*N*P برگردانده خواهد شد.
در نقطه مقابل برای اضافه کردن ابعاد جدید به تنسور از دستور torch.unsqueeze() استفاده می نماییم. با هر استفاده از این دستور باعث اضافه شدن یک بعد با اندازه یک در جای مشخص شده خواهیم شد.
مراحل استفاده
- کتابخانه مورد نیاز را وارد کنید. در اینجا ما از کتابخانه PyTorch استفاده خواهیم نمود. برای وارد کردن پایتورچ در کدها ما از کلمه کلیدی torch استفاده می نماییم: import torch درصورتی که قبلا این کتابخانه را نصب نکرده باشید باید ابتدا اقدام به نصب پایتورچ کنید.
- یک تنسور ساخته و آن را در خروجی چاپ کنید.
- تنسور ساخته شده را با استفاده از دستور torch.squeeze(input) فشرده کرده و ابعادی با اندازه یک را حذف می کنیم. (در مثال زیر ما ابعاد 2 در 1 در 2 را به ابعاد 2 در 2 تبدیل نموده ایم.)
- در ادامه با استفاده از دستور torch.unsqueeze(input, dim) یک بعد با اندازه یک در بعد وارد شده اضافه کرده و تنسور جدید به ما داده می شود.
مثال
# Python program to squeeze and unsqueeze a tensor
# import necessary library
import torch
# Create a tensor of all one
T = torch.ones(2,1,2) # size 2x1x2
print("Original Tensor T:\n", T )
print("Size of T:", T.size())
# Squeeze the dimension of the tensor
squeezed_T = torch.squeeze(T) # now size 2x2
print("Squeezed_T\n:", squeezed_T )
print("Size of Squeezed_T:", squeezed_T.size())
خروجی
Original Tensor T:
tensor([[[1., 1.]],
[[1., 1.]]])
Size of T: torch.Size([2, 1, 2])
Squeezed_T
: tensor([[1., 1.],
[1., 1.]])
Size of Squeezed_T: torch.Size([2, 2])
مثال
# Python program to squeeze and unsqueeze a tensor
# import necessary library
import torch
# create a tensor
T = torch.Tensor([1,2,3]) # size 3
print("Original Tensor T:\n", T )
print("Size of T:", T.size())
# Squeeze the tensor in dimension o or column dim
unsqueezed_T = torch.unsqueeze(T, dim = 0) # now size 1x3
print("Unsqueezed T\n:", unsqueezed_T )
print("Size of UnSqueezed T:", unsqueezed_T.size())
# Squeeze the tensor in dimension 1 or row dim
unsqueezed_T = torch.unsqueeze(T, dim = 1) # now size 3x1
print("Unsqueezed T\n:", unsqueezed_T )
print("Size of Unsqueezed T:", unsqueezed_T.size())
خروجی
Original Tensor T:
tensor([1., 2., 3.])
Size of T: torch.Size([3])
Unsqueezed T
: tensor([[1., 2., 3.]])
Size of UnSqueezed T: torch.Size([1, 3])
Unsqueezed T
: tensor([[1.],
[2.],
[3.]])
Size of Unsqueezed T: torch.Size([3, 1])