Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Cách thực hiện nhân từng phần tử (element-wise) trên tensor trong PyTorch

Phương thức torch.mul() được dùng để thực hiện phép nhân từng phần tử (element-wise multiplication) trên các tensor trong PyTorch. Nó nhân các phần tử tương ứng của các tensor. Chúng ta có thể nhân hai hoặc nhiều tensor, cũng như nhân một giá trị vô hướng (scalar) với tensor. Các tensor có cùng hoặc khác số chiều đều có thể nhân với nhau. Số chiều của tensor kết quả sẽ bằng số chiều của tensor có số chiều lớn hơn. Phép nhân từng phần tử trên tensor còn được gọi là tích Hadamard (Hadamard product).

Các bước thực hiện

  • Nhập thư viện cần thiết. Trong tất cả các ví dụ Python dưới đây, thư viện bắt buộc là torch. Hãy đảm bảo bạn đã cài đặt nó.

  • Định nghĩa hai hoặc nhiều tensor PyTorch và in chúng ra. Nếu muốn nhân với một giá trị vô hướng, hãy định nghĩa giá trị đó.

  • Nhân hai hoặc nhiều tensor bằng torch.mul() và gán kết quả cho biến mới. Bạn cũng có thể nhân vô hướng với tensor. Phép nhân này không làm thay đổi các tensor gốc.

  • In tensor kết quả.

Ví dụ 1: Nhân vô hướng với tensor

Chương trình sau minh họa cách nhân một giá trị vô hướng với tensor. Kết quả giống hệt nếu dùng tensor thay cho vô hướng.

# Chương trình Python thực hiện nhân từng phần tử
# Nhập thư viện bắt buộc
import torch

# Tạo một tensor
t = torch.Tensor([2.05, 2.03, 3.8, 2.29])
print("Tensor gốc t:\n", t)

# Nhân một giá trị vô hướng với tensor
v = torch.mul(t, 7)
print("Kết quả nhân từng phần tử:\n", v)

# Cách tương tự: dùng tensor chứa giá trị 7
t1 = torch.Tensor([7])
w = torch.mul(t, t1)
print("Kết quả nhân từng phần tử:\n", w)

# Cách khác: tạo tensor cùng kích thước với t, toàn giá trị 7
t2 = torch.Tensor([7, 7, 7, 7])
x = torch.mul(t, t2)
print("Kết quả nhân từng phần tử:\n", x)

Kết quả

Original Tensor t:     tensor([2.0500, 2.0300, 3.8000, 2.2900])
Element-wise multiplication result:     tensor([14.3500, 14.2100, 26.6000, 16.0300])
Element-wise multiplication result:     tensor([14.3500, 14.2100, 26.6000, 16.0300])
Element-wise multiplication result:     tensor([14.3500, 14.2100, 26.6000, 16.0300])

Ví dụ 2: Nhân tensor 2D với tensor 1D

Chương trình sau minh họa cách nhân tensor 2 chiều với tensor 1 chiều.

import torch

# Tạo tensor 2D
T1 = torch.Tensor([[3, 2], [7, 5]])
# Tạo tensor 1D
T2 = torch.Tensor([10, 8])

print("T1:\n", T1)
print("T2:\n", T2)

# Nhân tensor 1D với tensor 2D
v = torch.mul(T1, T2)
# v = torch.mul(T2, T1)  # Cũng cho cùng kết quả
print("Kết quả nhân từng phần tử:\n", v)

Kết quả

T1: tensor([[3., 2.], [7., 5.]])
T2: tensor([10., 8.])
Element-wise multiplication result: tensor([[30., 16.], [70., 40.]])

Ví dụ 3: Nhân hai tensor 2D

Chương trình sau minh họa cách nhân hai tensor 2 chiều.

import torch

# Tạo hai tensor 2D
T1 = torch.Tensor([[8, 7], [3, 4]])
T2 = torch.Tensor([[0, 3], [4, 9]])

print("T1:\n", T1)
print("T2:\n", T2)

# Nhân hai tensor 2D
v = torch.mul(T1, T2)
print("Kết quả nhân từng phần tử:\n", v)

Kết quả

T1: tensor([[8., 7.], [3., 4.]])
T2: tensor([[0., 3.], [4., 9.]])
Element-wise multiplication result: tensor([[ 0., 21.], [12., 36.]])