Điều cần thiết là phải hiểu tất cả các khái niệm cơ bản cần thiết để làm việc với PyTorch. PyTorch hoàn toàn dựa trên Tensors. Tensor có các hoạt động để thực hiện. Ngoài những điều này, có rất nhiều khái niệm khác được yêu cầu để thực hiện nhiệm vụ.
Bây giờ, hãy hiểu từng khái niệm một để có kiến thức sâu về PyTorch.
Ma trận hoặc Tensors
Tensors là thành phần quan trọng của Pytorch. Có thể nói PyTorch hoàn toàn dựa trên Tensors. Theo thuật ngữ toán học, một mảng số hình chữ nhật được gọi là số liệu. Trong thư viện Numpy, những chỉ số này được gọi là ndaaray. Trong PyTorch, nó được gọi là Tensor. Tensor là một vùng chứa dữ liệu n chiều. Ví dụ: Trong PyTorch, 1d-Tensor là một vectơ, 2d-Tensor là một số liệu, 3d- Tensor là một khối lập phương và 4d-Tensor là một vectơ lập phương.
Các ma trận phía trên đại diện cho 2D-Tensor với ba hàng và hai cột.
Có ba cách để tạo Tensor. Mỗi người có một cách khác nhau để tạo Tensor. Hàng chục được tạo như:
- Tạo PyTorch Tensor một mảng
- Tạo một Tensor với tất cả những cái và số ngẫu nhiên
- Tạo Tensor từ mảng numpy
Hãy xem Tensors được tạo ra như thế nào
Tạo một Tensor PyTorch dưới dạng một mảng
Trong điều này, trước tiên bạn phải xác định mảng và sau đó truyền mảng đó vào phương thức Tensor của ngọn đuốc làm đối số.
Ví dụ
import torch arr = [[3, 4], [8, 5]] pyTensor = torch.Tensor(arr) print(pyTensor)
Đầu ra:
Tạo một Tensor với số ngẫu nhiên và tất cả một
Để tạo một số ngẫu nhiên Tensor, bạn phải sử dụng phương thức rand () và để tạo một Tensor với tất cả những cái bạn phải sử dụng những cái () của ngọn đuốc. Để tạo số ngẫu nhiên, một phương pháp khác của ngọn đuốc sẽ được sử dụng với rand, tức là manual_seed với 0 tham số.
Ví dụ
import torch ones_t = torch.ones((2, 2)) torch.manual_seed(0) //to have same values for random generation rand_t = torch.rand((2, 2)) print(ones_t) print(rand_t)
Đầu ra:
Tạo một Tensor từ mảng numpy
Để tạo một Tensor từ mảng numpy, chúng ta phải tạo một mảng numpy. Khi mảng numpy của bạn được tạo, chúng ta phải chuyển nó vào from_numpy () làm đối số. Phương thức này chuyển đổi mảng numpy thành Tensor.
Ví dụ
import torch import numpy as np1 numpy_arr = np1.ones((2, 2)) pyTensor = torch.from_numpy(numpy_arr) np1_arr_from_Tensor = pyTensor.numpy() print(np1_arr_from_Tensor)
Đầu ra:
Tensor operator
Tensor tương tự như một mảng, vì vậy tất cả các hoạt động mà chúng ta đang thực hiện trên một mảng cũng có thể áp dụng cho Tensor.
Thay đổi kích thước một Tensor
Chúng ta có thể thay đổi kích thước của Tensor bằng cách sử dụng thuộc tính size của Tensor. Chúng tôi sử dụng Tensor.view () để thay đổi kích thước Tensor. Thay đổi kích thước Tensor có nghĩa là chuyển đổi Tensor 2 * 2 chiều thành 4 * 1 hoặc 4 * 4 chiều Tensor thành 16 * 1, v.v. Để in kích thước Tensor, chúng ta sử dụng phương thức Tensor.size ().
Hãy xem một ví dụ về thay đổi kích thước một Tensor.
import torch pyt_Tensor = torch.ones((2, 2)) print(pyt_Tensor.size()) # shows the size of this Tensor pyt_Tensor = pyt_Tensor.view(4) # resizing 2x2 Tensor to 4x1 print(pyt_Tensor)
Đầu ra:
Các phép toán
Tất cả các phép toán như cộng, trừ, chia và nhân đều có thể được thực hiện trên Tensor. Ngọn đuốc có thể thực hiện các phép toán. Chúng tôi sử dụng torch.add (), torch.sub (), torch.mul () và torch.div () để thực hiện các hoạt động trên Tensors.
Hãy xem một ví dụ về cách các phép toán được thực hiện:
import numpy as np import torch Tensor_a = torch.ones((2, 2)) Tensor_b = torch.ones((2, 2)) result=Tensor_a+Tensor_b result1 = torch.add(Tensor_a, Tensor_b) //another way of addidtion Tensor_a.add_(Tensor_b) // In-place addition print(result) print(result1) print(Tensor_a)
Đầu ra:
Trung bình và độ lệch chuẩn
Chúng ta có thể tính toán độ lệch chuẩn của Tensor cho một chiều hoặc nhiều chiều. Trong phép tính toán học của chúng tôi, trước tiên chúng tôi phải tính giá trị trung bình, và sau đó chúng tôi áp dụng công thức sau trên dữ liệu đã cho với giá trị trung bình.
Nhưng trong Tensor, chúng ta có thể sử dụng Tensor.mean () và Tensor.std () để tìm độ lệch và giá trị trung bình của Tensor đã cho.
Hãy xem một ví dụ về cách nó hoạt động.
import torch pyTensor = torch.Tensor([1, 2, 3, 4, 5]) mean = pyt_Tensor.mean(dim=0) //if multiple rows then dim = 1 std_dev = pyTensor.std(dim=0) // if multiple rows then dim = 1 print(mean) print(std_dev)
Đầu ra:
Biến và Gradient
Lớp trung tâm của gói là autograd.variable. Nhiệm vụ chính của nó là quấn một Tensor. Nó hỗ trợ gần như tất cả các hoạt động được định nghĩa trên đó. Bạn có thể gọi .backword () và có tất cả các cấp độ
Tôi chỉ tính toán khi bạn hoàn thành việc tính toán của mình.
Thông qua thuộc tính .data, bạn có thể truy cập hàng Tensor, trong khi gradient cho biến này được tích lũy thành .grad.
Trong Deep learning, tính toán độ dốc là điểm mấu chốt. Các biến được sử dụng để tính toán gradient trong PyTorch. Nói một cách đơn giản, các biến chỉ là một lớp bao bọc xung quanh Tensors với chức năng tính toán độ dốc.
Dưới đây là mã python được sử dụng để quản lý các biến.
import numpy as np import torch from torch.autograd import Variable pyt_var = Variable(torch.ones((2, 2)), requires_grad = True)
Đoạn mã trên hoạt động giống như Tensors, do đó chúng ta có thể áp dụng tất cả các thao tác theo cùng một cách.
Hãy xem cách chúng ta có thể tính toán gradient trong PyTorch.
Ví dụ
import numpy as np import torch from torch.autograd import Variable // let's consider the following equation // y = 5(x + 1)^2 x = Variable (torch.ones(1), requires_grad = True) y = 5 * (x + 1) ** 2 //implementing the equation. y.backward() // calculate gradient print(x.grad) // get the gradient of variable x # differentiating the above mentioned equation // => 5(x + 1)^2 = 10(x + 1) = 10(2) = 20
Đầu ra: