Chào mừng các bạn đến với bài viết thứ năm trong loạt bài về Lập Trình Neural Network Với Pytorch. Trong bài viết này chúng ta sẽ cùng nhau tìm hiểu sâu hơn về tensors và giới thiệu ba thuộc tính cơ bản của tensor là Rank, Axes Và Shape. Bắt đầu thôi!
Các khái niệm về rank, axes và shape là những thuộc tính của Tensor mà chúng ta cần quan tâm nhất trong Deep learning. Các khái niệm này xây dựng dựa trên nhau, bắt đầu bằng rank, sau đó là axes và shape vì vậy hãy để ý đến mối quan hệ giữa ba yếu tố này.
Cả ba thuộc tính này đều được kết nối với khái niệm indexes mà chúng ta đã thảo luận trong bài trước. Bây giờ hãy bắt đầu tìm hiểu về rank của một Tensor.
Rank Của Một Tensor
Rank của tensor đề cập đến số lượng kích thước có trong tensor. Giả sử chúng ta được thông báo rằng chúng ta có một tensor rank-2. Điều này có nghĩa là tất cả những điều sau:
- Chúng ta có một ma trận
- Chúng ta có một mảng 2d-array
- Chúng ta có một 2d-tensor
Từ rank được giới thiệu ở đây vì nó thường được sử dụng trong Deep learning khi đề cập đến số thứ nguyên có trong một tensor nhất định. Đây chỉ là một trong những trường hợp mà các lĩnh vực nghiên cứu khác nhau sử dụng các từ khác nhau để chỉ cùng một khái niệm.
Rank Và Indexes
Rank của tensor cho chúng ta biết cần có bao nhiêu indexes để truy cập (tham chiếu) đến một phần tử dữ liệu cụ thể có trong cấu trúc dữ liệu tensor.
A tensor's rank tells us how many indexes are needed to refer to a specific element within the tensor.
Chúng ta hãy xây dựng khái niệm về rank bằng cách xem xét axes của tensor.
Axes Của Một Tensor
Nếu chúng ta có một tensor và chúng ta muốn đề cập đến một dimension cụ thể, chúng ta sử dụng từ axis trong Deep learning.
An axis of a tensor is a specific dimension of a tensor.
Nếu chúng ta nói rằng tensor là tensor rank 2, có nghĩa là tensor có 2 chiều hoặc tương đương tensor có hai axes. Các phần tử được cho là tồn tại hoặc chạy dọc theo một axis. Việc (chạy) running này bị hạn chế bởi độ dài của mỗi axis. Bây giờ chúng ta hãy nhìn vào chiều dài của một axis.
Chiều Dài Của Một Axis
Chiều dài của mỗi axis cho chúng ta biết có bao nhiêu indexes dọc theo mỗi axis.
Giả sử chúng ta có một tensor gọi là t, và chúng ta biết rằng axis thứ nhất có độ dài là ba trong khi axis thứ hai có độ dài là bốn.
Vì axis đầu tiên có độ dài là ba, điều này có nghĩa là chúng ta có thể lập index ba vị trí dọc theo axis đầu tiên như sau:
t[0] t[1] t[2]
Vì axis thứ hai có độ dài là bốn, chúng ta có thể lập index bốn vị trí dọc theo axis thứ hai. Điều này có thể xảy ra đối với mỗi index của axis đầu tiên, vì vậy chúng ta có:
t[0][0] t[1][0] t[2][0] t[0][1] t[1][1] t[2][1] t[0][2] t[1][2] t[2][2] t[0][3] t[1][3] t[2][3]
Ví Dụ Tensor Axes
Hãy xem một số ví dụ dưới đây để hiểu rõ hơn:
> dd = [ [1,2,3], [4,5,6], [7,8,9] ]
Mỗi phần tử dọc theo axis đầu tiên, là một mảng:
> dd[0] [1, 2, 3] > dd[1] [4, 5, 6] > dd[2] [7, 8, 9]
Mỗi phần tử dọc theo axis thứ hai, là một số:
> dd[0][0] 1 > dd[1][0] 4 > dd[2][0] 7 > dd[0][1] 2 > dd[1][1] 5 > dd[2][1] 8 > dd[0][2] 3 > dd[1][2] 6 > dd[2][2] 9
Lưu ý rằng, với tensor các phần tử của axis cuối cùng luôn là số. Mọi axis khác sẽ chứa các mảng n chiều.
Rank của một tensor cho chúng ta biết một tensor có bao nhiêu axis và độ dài của những axis này dẫn chúng ta đến một khái niệm rất quan trọng được gọi là shape của tensor.
Shape Của Một Tensor
Shape của tensor được xác định bởi độ dài của mỗi axis, vì vậy nếu chúng ta biết shape của tensor cho trước, thì chúng ta biết chiều dài của mỗi axis và điều này cho chúng ta biết có bao nhiêu index dọc theo mỗi axis.
The shape of a tensor gives us the length of each axis of the tensor.
Hãy xem ví dụ sau:
> dd = [ [1,2,3], [4,5,6], [7,8,9] ]
Để làm việc với shape của tensor này, chúng ta sẽ tạo một torch.Tensor như sau:
> t = torch.tensor(dd) > t tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) > type(t) torch.Tensor
Bây giờ, chúng ta có một đối tượng torch.Tensor, và vì vậy chúng ta có thể yêu cầu xem shape của tensor:
> t.shape torch.Size([3,3])
Điều này cho phép chúng ta thấy shape của tensor là 3 x 3. Lưu ý rằng, trong PyTorch, size và shape của tensor giống nhau.
Shape 3 x 3 cho chúng ta biết rằng mỗi axis của hai tensor hạng này có độ dài là 3, nghĩa là chúng ta có sẵn ba chỉ số dọc theo mỗi axis. Bây giờ chúng ta hãy xem tại sao shape của tensor lại quan trọng như vậy.
Reshaping (Định Hình) Lại Một Tensor
Trước khi chúng ta xem xét việc reshape lại các tensors, hãy nhớ lại cách chúng ta reshape lại danh sách các thuật ngữ mà chúng ta đã bắt đầu trước đó:
Shape 6 x 1
- number
- scalar
- array
- vector
- 2d-array
- matrix
Shape 2 x 3
- number, array, 2d-array
- scalar, vector, matrix
Shape 3 x 2
- number, scalar
- array, vector
- 2d-array, matrix
Mỗi nhóm thuật ngữ này chỉ đại diện cho cùng một dữ liệu cơ bản với các shape khác nhau. Đây chỉ là một ví dụ nhỏ để thúc đẩy ý tưởng reshaping.
Hãy xem ví dụ sau:
> t = torch.tensor(dd) > t tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])
torch.Tensor này là một tensor cấp 2 với shape [3,3] hoặc 3 x 3.
Bây giờ, giả sử chúng ta cần reshape lại t để có shape [1,9].
> t.reshape(1,9) tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]]) > t.reshape(1,9).shape torch.Size([1, 9])
Bây giờ, một điều cần lưu ý về việc reshape lại là tích của các giá trị thành phần trong shape phải bằng tổng số phần tử trong tensor. Ví dụ:
- 3 * 3 = 9
- 1 * 9 = 9
Điều này làm cho nó có đủ vị trí bên trong cấu trúc dữ liệu tensor để chứa tất cả các phần tử dữ liệu ban đầu sau khi reshape lại.
Reshaping changes the shape but not the underlying data elements.
Kết Luận
Bây giờ chúng ta đã hiểu rõ về các Tensor, các thuật ngữ mà chúng ta cần quan tâm nhất trong Deep learning là Rank, Axes Và Shape. Hi vọng bạn thích bài viết này.
Hẹn gặp lại bạn trong các bài viết tiếp theo!