tek4

Rank, Axes Và Shape – Lập Trình Neural Network Với Pytorch Bài 5

by - September. 21, 2021
Kiến thức
Machine Learning
<p style="text-align: justify;"><em>Ch&agrave;o mừng c&aacute;c bạn đến với b&agrave;i viết thứ năm trong loạt b&agrave;i về&nbsp;<a href="https://tek4.vn/lap-trinh-neural-network-voi-pytorch-deep-learning-voi-pytorch/" target="_blank" rel="noopener"><strong>Lập Tr&igrave;nh Neural Network Với Pytorch</strong></a>. Trong b&agrave;i viết n&agrave;y ch&uacute;ng ta sẽ c&ugrave;ng nhau&nbsp;t&igrave;m hiểu s&acirc;u hơn về tensors v&agrave; giới thiệu ba thuộc t&iacute;nh cơ bản của tensor l&agrave;&nbsp;Rank, Axes V&agrave; Shape. Bắt đầu th&ocirc;i!</em></p> <p style="text-align: justify;">C&aacute;c kh&aacute;i niệm về&nbsp;rank, axes v&agrave; shape l&agrave; những thuộc t&iacute;nh của Tensor m&agrave; ch&uacute;ng ta cần quan t&acirc;m nhất trong Deep learning.&nbsp;C&aacute;c kh&aacute;i niệm n&agrave;y x&acirc;y dựng dựa tr&ecirc;n nhau, bắt đầu bằng&nbsp;rank, sau đ&oacute; l&agrave; axes v&agrave; shape&nbsp;v&igrave; vậy h&atilde;y để &yacute; đến mối quan hệ giữa ba yếu tố n&agrave;y.</p> <p style="text-align: justify;">Cả ba thuộc t&iacute;nh n&agrave;y đều được kết nối với kh&aacute;i niệm indexes m&agrave; ch&uacute;ng ta đ&atilde; thảo luận trong b&agrave;i trước. B&acirc;y giờ h&atilde;y bắt đầu t&igrave;m hiểu về rank của một Tensor.</p> <h3 style="text-align: justify;">Rank Của Một Tensor</h3> <p style="text-align: justify;"><img style="width: 100%;" src="http://tek4vn.2soft.top/public_files/capture-168-png-1" alt="Capture-168" /></p> <p style="text-align: justify;">Rank của tensor đề cập đến số lượng k&iacute;ch thước c&oacute; trong tensor.&nbsp;Giả sử ch&uacute;ng ta được th&ocirc;ng b&aacute;o rằng ch&uacute;ng ta c&oacute; một tensor&nbsp;rank-2.&nbsp;Điều n&agrave;y c&oacute; nghĩa l&agrave; tất cả những điều sau:</p> <ul style="text-align: justify;"> <li>Ch&uacute;ng ta c&oacute; một ma trận</li> <li>Ch&uacute;ng ta c&oacute; một mảng&nbsp;2d-array</li> <li>Ch&uacute;ng ta c&oacute; một&nbsp;2d-tensor</li> </ul> <p style="text-align: justify;">Từ <em>rank </em>được giới thiệu&nbsp;ở đ&acirc;y&nbsp;v&igrave; n&oacute; thường được sử dụng trong Deep learning khi đề cập đến số thứ nguy&ecirc;n c&oacute; trong một tensor nhất định.&nbsp;Đ&acirc;y chỉ l&agrave; một trong những trường hợp m&agrave; c&aacute;c lĩnh vực nghi&ecirc;n cứu kh&aacute;c nhau sử dụng c&aacute;c từ kh&aacute;c nhau để chỉ c&ugrave;ng một kh&aacute;i niệm.</p> <h4 class="sub-section-heading" style="text-align: justify;">Rank V&agrave; Indexes</h4> <p style="text-align: justify;">Rank của tensor cho ch&uacute;ng ta biết cần c&oacute; bao nhi&ecirc;u indexes để truy cập (tham chiếu) đến một phần tử dữ liệu cụ thể c&oacute; trong cấu tr&uacute;c dữ liệu tensor.</p> <pre><code>A tensor's rank tells us how many indexes are needed to refer to a specific element within the tensor.</code></pre> <p style="text-align: justify;">Ch&uacute;ng ta h&atilde;y x&acirc;y dựng kh&aacute;i niệm về rank bằng c&aacute;ch xem x&eacute;t axes của tensor.</p> <h3 class="section-heading" style="text-align: justify;">Axes Của Một Tensor</h3> <p style="text-align: justify;">Nếu ch&uacute;ng ta c&oacute; một tensor v&agrave; ch&uacute;ng ta muốn đề cập đến một&nbsp;<em>dimension&nbsp;</em>cụ thể, ch&uacute;ng ta sử dụng từ&nbsp;<em>axis</em>&nbsp; trong Deep learning.</p> <pre><code>An axis of a tensor is a specific dimension of a tensor.</code></pre> <p style="text-align: justify;">Nếu ch&uacute;ng ta n&oacute;i rằng tensor l&agrave; tensor rank 2, c&oacute; nghĩa l&agrave; tensor c&oacute; 2 chiều hoặc tương đương tensor c&oacute; hai axes.&nbsp;C&aacute;c phần tử được cho l&agrave; tồn tại hoặc chạy dọc theo một&nbsp;axis.&nbsp;Việc (chạy)&nbsp;<em>running</em> n&agrave;y bị hạn chế bởi độ d&agrave;i của mỗi axis.&nbsp;B&acirc;y giờ ch&uacute;ng ta h&atilde;y nh&igrave;n v&agrave;o chiều d&agrave;i của một&nbsp;axis.</p> <h4 class="sub-section-heading" style="text-align: justify;">Chiều D&agrave;i Của Một Axis</h4> <p style="text-align: justify;">Chiều d&agrave;i của mỗi axis&nbsp;cho ch&uacute;ng ta biết c&oacute; bao nhi&ecirc;u indexes&nbsp;dọc theo mỗi axis.</p> <p style="text-align: justify;">Giả sử ch&uacute;ng ta c&oacute; một tensor gọi l&agrave; <em>t</em>, v&agrave; ch&uacute;ng ta biết rằng axis thứ nhất c&oacute; độ d&agrave;i l&agrave; ba trong khi axis thứ hai c&oacute; độ d&agrave;i l&agrave; bốn.</p> <p style="text-align: justify;">V&igrave; axis đầu ti&ecirc;n c&oacute; độ d&agrave;i l&agrave; ba, điều n&agrave;y c&oacute; nghĩa l&agrave; ch&uacute;ng ta c&oacute; thể lập index ba vị tr&iacute; dọc theo axis đầu ti&ecirc;n như sau:</p> <pre class="language-python"><code>t[0] t[1] t[2]</code></pre> <p style="text-align: justify;">V&igrave; axis thứ hai c&oacute; độ d&agrave;i l&agrave; bốn, ch&uacute;ng ta c&oacute; thể lập index bốn vị tr&iacute; dọc theo axis thứ hai. Điều n&agrave;y c&oacute; thể xảy ra đối với mỗi index của axis đầu ti&ecirc;n, v&igrave; vậy ch&uacute;ng ta c&oacute;:</p> <pre class="language-python"><code>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]</code></pre> <h4 class="sub-section-heading" style="text-align: justify;">V&iacute; Dụ Tensor Axes</h4> <p style="text-align: justify;">H&atilde;y xem một số v&iacute; dụ dưới đ&acirc;y để hiểu r&otilde; hơn:</p> <pre class="language-python"><code>&gt; dd = [ [1,2,3], [4,5,6], [7,8,9] ]</code></pre> <p style="text-align: justify;">Mỗi phần tử dọc theo axis đầu ti&ecirc;n, l&agrave; một mảng:</p> <pre class="language-python"><code>&gt; dd[0] [1, 2, 3] &gt; dd[1] [4, 5, 6] &gt; dd[2] [7, 8, 9]</code></pre> <p style="text-align: justify;">Mỗi phần tử dọc theo axis thứ hai, l&agrave; một số:</p> <pre class="language-python"><code>&gt; dd[0][0] 1 &gt; dd[1][0] 4 &gt; dd[2][0] 7 &gt; dd[0][1] 2 &gt; dd[1][1] 5 &gt; dd[2][1] 8 &gt; dd[0][2] 3 &gt; dd[1][2] 6 &gt; dd[2][2] 9</code></pre> <p style="text-align: justify;">Lưu &yacute; rằng, với tensor c&aacute;c phần tử của axis cuối c&ugrave;ng lu&ocirc;n l&agrave; số.&nbsp;Mọi axis kh&aacute;c sẽ chứa c&aacute;c mảng n chiều.</p> <p style="text-align: justify;">Rank&nbsp;của một tensor cho ch&uacute;ng ta biết một tensor c&oacute; bao nhi&ecirc;u axis&nbsp;v&agrave; độ d&agrave;i của những axis n&agrave;y dẫn ch&uacute;ng ta đến một kh&aacute;i niệm rất quan trọng được gọi l&agrave; shape của tensor.</p> <h3 style="text-align: justify;">Shape Của Một Tensor</h3> <p style="text-align: justify;">Shape của tensor được x&aacute;c định bởi độ d&agrave;i của mỗi axis,&nbsp;v&igrave; vậy nếu ch&uacute;ng ta biết shape của tensor cho trước,&nbsp;th&igrave; ch&uacute;ng ta biết chiều d&agrave;i của mỗi axis v&agrave; điều n&agrave;y cho ch&uacute;ng ta biết c&oacute; bao nhi&ecirc;u index dọc theo mỗi axis.</p> <pre>The shape of a tensor gives us the length of each axis of the tensor.</pre> <p style="text-align: justify;">H&atilde;y xem v&iacute; dụ sau:</p> <pre class="language-python"><code>&gt; dd = [ [1,2,3], [4,5,6], [7,8,9] ]</code></pre> <p style="text-align: justify;">Để l&agrave;m việc với shape của tensor n&agrave;y, ch&uacute;ng ta sẽ tạo một&nbsp;<em>torch.Tensor</em> như sau:</p> <pre class="language-python"><code>&gt; t = torch.tensor(dd) &gt; t tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) &gt; type(t) torch.Tensor</code></pre> <p style="text-align: justify;">B&acirc;y giờ, ch&uacute;ng ta c&oacute; một đối tượng torch.Tensor, v&agrave; v&igrave; vậy ch&uacute;ng ta c&oacute; thể y&ecirc;u cầu xem shape của tensor:</p> <pre class="language-python"><code>&gt; t.shape torch.Size([3,3])</code></pre> <p style="text-align: justify;">Điều n&agrave;y cho ph&eacute;p ch&uacute;ng ta thấy shape của tensor l&agrave; <em>3 x 3. </em>Lưu &yacute; rằng, trong PyTorch, size v&agrave; shape của tensor giống nhau.</p> <p style="text-align: justify;">Shape <em>3 x 3</em> cho ch&uacute;ng ta biết rằng mỗi axis của hai tensor hạng n&agrave;y c&oacute; độ d&agrave;i l&agrave; 3, nghĩa l&agrave; ch&uacute;ng ta c&oacute; sẵn ba chỉ số dọc theo mỗi axis.&nbsp;B&acirc;y giờ ch&uacute;ng ta h&atilde;y xem tại sao shape của tensor lại quan trọng như vậy.</p> <h4 class="sub-section-heading" style="text-align: justify;">Reshaping (Định H&igrave;nh) Lại Một Tensor</h4> <p style="text-align: justify;">Trước khi ch&uacute;ng ta xem x&eacute;t việc reshape lại c&aacute;c tensors, h&atilde;y nhớ lại c&aacute;ch ch&uacute;ng ta reshape lại danh s&aacute;ch c&aacute;c thuật ngữ m&agrave; ch&uacute;ng ta đ&atilde; bắt đầu trước đ&oacute;:</p> <p style="text-align: justify;">Shape&nbsp;<em>6 x 1</em></p> <ul style="text-align: justify;"> <li>number</li> <li>scalar</li> <li>array</li> <li>vector</li> <li>2d-array</li> <li>matrix</li> </ul> <p style="text-align: justify;">Shape&nbsp;<em>2 x 3</em></p> <ul style="text-align: justify;"> <li>number, array, 2d-array</li> <li>scalar, vector, matrix</li> </ul> <p style="text-align: justify;">Shape&nbsp;<em>3 x 2</em></p> <ul style="text-align: justify;"> <li>number, scalar</li> <li>array, vector</li> <li>2d-array, matrix</li> </ul> <p style="text-align: justify;">Mỗi nh&oacute;m thuật ngữ n&agrave;y chỉ đại diện cho c&ugrave;ng một dữ liệu cơ bản với c&aacute;c shape kh&aacute;c nhau.&nbsp;Đ&acirc;y chỉ l&agrave; một v&iacute; dụ nhỏ để th&uacute;c đẩy &yacute; tưởng&nbsp;reshaping.</p> <p style="text-align: justify;">H&atilde;y xem v&iacute; dụ sau:</p> <pre class="language-python"><code>&gt; t = torch.tensor(dd) &gt; t tensor([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ])</code></pre> <p style="text-align: justify;">torch.Tensor&nbsp;n&agrave;y l&agrave; một tensor cấp 2 với shape [3,3] hoặc 3 x 3.</p> <p style="text-align: justify;">B&acirc;y giờ, giả sử ch&uacute;ng ta cần reshape lại t để c&oacute; shape [1,9].</p> <pre class="language-python"><code>&gt; t.reshape(1,9) tensor([[1, 2, 3, 4, 5, 6, 7, 8, 9]]) &gt; t.reshape(1,9).shape torch.Size([1, 9])</code></pre> <p style="text-align: justify;">B&acirc;y giờ, một điều cần lưu &yacute; về việc reshape lại l&agrave; t&iacute;ch của c&aacute;c gi&aacute; trị th&agrave;nh phần trong shape phải bằng tổng số phần tử trong tensor. V&iacute; dụ:</p> <ul style="text-align: justify;"> <li>3 * 3 = 9</li> <li>1 * 9 = 9</li> </ul> <p style="text-align: justify;">Điều n&agrave;y l&agrave;m cho n&oacute; c&oacute; đủ vị tr&iacute; b&ecirc;n trong cấu tr&uacute;c dữ liệu tensor để chứa tất cả c&aacute;c phần tử dữ liệu ban đầu sau khi reshape lại.</p> <pre><code>Reshaping changes the shape but not the underlying data elements. </code></pre> <h3 style="text-align: justify;">Kết Luận</h3> <p style="text-align: justify;">B&acirc;y giờ ch&uacute;ng ta đ&atilde; hiểu r&otilde; về c&aacute;c Tensor, c&aacute;c thuật ngữ m&agrave; ch&uacute;ng ta cần quan t&acirc;m nhất trong Deep learning l&agrave;&nbsp;Rank, Axes V&agrave; Shape. Hi vọng bạn th&iacute;ch b&agrave;i viết n&agrave;y.</p> <p style="text-align: justify;">Hẹn gặp lại bạn trong c&aacute;c b&agrave;i viết tiếp theo!</p> <p style="text-align: justify;">&nbsp;</p> <hr /> <p style="text-align: center;"><em><strong>Fanpage Facebook:</strong>&nbsp;<a href="https://www.facebook.com/tek4.vn/">TEK4.VN</a></em>&nbsp;</p> <p style="text-align: center;"><em><strong>Tham gia cộng đồng để chia sẻ, trao đổi v&agrave; thảo luận:</strong>&nbsp;<a href="https://www.facebook.com/groups/tek4.vn/">TEK4.VN - Học Lập Tr&igrave;nh Miễn Ph&iacute;</a></em></p>