tek4

Năm Bước Vòng Đời Của Mô Hình Học Sâu – Keras Cơ Bản

by - September. 21, 2021
Học
Kiến thức
Machine Learning
<p>Ch&agrave;o mừng c&aacute;c bạn quay trở lại với loạt b&agrave;i về&nbsp;<a href="https://tek4.vn/keras-co-ban-bat-dau-hoc-sau-voi-tf-keras/" target="_blank" rel="noopener">Keras Cơ Bản</a>&nbsp;của<a href="https://tek4.vn/" target="_blank" rel="noopener">&nbsp;tek4.vn</a>. Trong b&agrave;i viết n&agrave;y ch&uacute;ng ta sẽ c&ugrave;ng nhau kh&aacute;m ph&aacute; v&ograve;ng đời của một m&ocirc; h&igrave;nh học s&acirc;u v&agrave; hai API tf.keras sử dụng để định nghĩa m&ocirc; h&igrave;nh. Bắt đầu th&ocirc;i!</p> <p>Xem th&ecirc;m b&agrave;i viết trước:&nbsp;<a href="https://tek4.vn/cach-cai-dat-tensorflow-keras-co-ban/" target="_blank" rel="noopener">C&aacute;ch c&agrave;i đặt TensorFlow</a></p> <p><img style="width: 678px; display: block; margin-left: auto; margin-right: auto;" src="http://tek4vn.2soft.top/public_files/43-png" alt="43" height="354" /></p> <p style="text-align: justify;">Một m&ocirc; h&igrave;nh học s&acirc;u c&oacute; v&ograve;ng đời v&agrave; kiến ​​thức rất đơn giản n&agrave;y cung cấp xương sống cho cả việc lập m&ocirc; h&igrave;nh tập dữ liệu v&agrave; hiểu API tf.keras.</p> <p style="text-align: justify;">Năm bước trong v&ograve;ng đời của m&ocirc; h&igrave;nh học s&acirc;u như sau:</p> <ol style="text-align: justify;"> <li>Định nghĩa m&ocirc; h&igrave;nh.</li> <li>Bi&ecirc;n dịch m&ocirc; h&igrave;nh.</li> <li>Fit m&ocirc; h&igrave;nh.</li> <li>Đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh.</li> <li>Đưa ra dự đo&aacute;n.</li> </ol> <p style="text-align: justify;">Ch&uacute;ng ta h&atilde;y xem x&eacute;t kỹ hơn lần lượt từng bước.</p> <h3 id="ftoc-heading-1" class="ftwp-heading" style="text-align: justify;">Define the Model (Định nghĩa m&ocirc; h&igrave;nh)</h3> <p style="text-align: justify;">Việc định nghĩa m&ocirc; h&igrave;nh y&ecirc;u cầu trước ti&ecirc;n cần phải chọn loại m&ocirc; h&igrave;nh m&agrave; bạn cần, sau đ&oacute; chọn kiến tr&uacute;c hoặc cấu tr&uacute;c mạng.</p> <p>Từ g&oacute;c độ API, điều n&agrave;y li&ecirc;n quan đến việc x&aacute;c định c&aacute;c layers của m&ocirc; h&igrave;nh, định cấu h&igrave;nh mỗi layer với một số node v&agrave; h&agrave;m k&iacute;ch hoạt, kết nối c&aacute;c layers với nhau th&agrave;nh một m&ocirc; h&igrave;nh gắn kết.</p> <p>M&ocirc; h&igrave;nh c&oacute; thể được x&aacute;c định bằng Sequential API hoặc Functional API v&agrave; ch&uacute;ng ta sẽ xem x&eacute;t điều n&agrave;y trong phần tiếp theo.</p> <pre class="language-python"><code>... # define the model model = ...</code></pre> <h3 id="ftoc-heading-2" class="ftwp-heading" style="text-align: justify;">Compile the Model (Bi&ecirc;n dịch m&ocirc; h&igrave;nh)</h3> <p style="text-align: justify;">Việc bi&ecirc;n dịch m&ocirc; h&igrave;nh y&ecirc;u cầu trước ti&ecirc;n bạn phải chọn một h&agrave;m mất m&aacute;t m&agrave; bạn muốn tối ưu h&oacute;a, chẳng hạn như&nbsp;<a href="https://en.wikipedia.org/wiki/Mean_squared_error" target="_blank" rel="noopener">mean squared error</a>&nbsp;hoặc&nbsp;<a href="https://en.wikipedia.org/wiki/Cross_entropy#:~:text=In%20information%20theory%2C%20the%20cross,distribution%20%2C%20rather%20than%20the%20true" target="_blank" rel="noopener">cross-entropy</a>.</p> <p style="text-align: justify;">N&oacute; cũng y&ecirc;u cầu bạn chọn một thuật to&aacute;n để thực hiện quy tr&igrave;nh tối ưu h&oacute;a, thường l&agrave; stochastic gradient descent hoặc một biến thể hiện đại, chẳng hạn như Adam. N&oacute; cũng c&oacute; thể y&ecirc;u cầu bạn chọn bất kỳ số liệu hiệu suất n&agrave;o để theo d&otilde;i trong qu&aacute; tr&igrave;nh đ&agrave;o tạo m&ocirc; h&igrave;nh.</p> <p style="text-align: justify;">Từ g&oacute;c độ API, điều n&agrave;y li&ecirc;n quan đến việc gọi một h&agrave;m để bi&ecirc;n dịch m&ocirc; h&igrave;nh với cấu h&igrave;nh đ&atilde; chọn, cấu h&igrave;nh n&agrave;y sẽ chuẩn bị cấu tr&uacute;c dữ liệu th&iacute;ch hợp v&agrave; cần thiết để sử dụng sao cho hiệu quả m&ocirc; h&igrave;nh m&agrave; bạn đ&atilde; x&aacute;c định.</p> <p style="text-align: justify;">Tr&igrave;nh tối ưu h&oacute;a c&oacute; thể được chỉ định dưới dạng một chuỗi cho một lớp tr&igrave;nh tối ưu h&oacute;a đ&atilde; biết, v&iacute; dụ: &lsquo;Sgd&lsquo; cho stochastic gradient descent hoặc bạn c&oacute; thể định cấu h&igrave;nh một phi&ecirc;n bản của lớp tr&igrave;nh tối ưu h&oacute;a v&agrave; sử dụng n&oacute;.</p> <p style="text-align: justify;">Để biết danh s&aacute;ch c&aacute;c tr&igrave;nh tối ưu h&oacute;a được hỗ trợ, h&atilde;y xem phần n&agrave;y:</p> <ul> <li style="text-align: justify;"><a href="https://www.tensorflow.org/api_docs/python/tf/keras/optimizers">tf.keras Optimizers</a></li> </ul> <pre class="language-python"><code>... # compile the model opt = SGD(learning_rate=0.01, momentum=0.9) model.compile(optimizer=opt, loss='binary_crossentropy')</code></pre> <p>Ba h&agrave;m mất m&aacute;t phổ biến nhất l&agrave;:</p> <ul> <li>&lsquo;<em>binary_crossentropy</em>&lsquo;&nbsp; để ph&acirc;n loại nhị ph&acirc;n.</li> <li>&lsquo;<em>sparse_categorical_crossentropy</em>&lsquo; để ph&acirc;n loại đa lớp.</li> <li>&lsquo;<em>mse</em>&lsquo; (mean squared error) (lỗi b&igrave;nh phương trung b&igrave;nh) cho hồi quy.</li> </ul> <pre class="language-python"><code>... # compile the model model.compile(optimizer='sgd', loss='mse')</code></pre> <p>Để biết danh s&aacute;ch c&aacute;c h&agrave;m mất m&aacute;t được hỗ trợ, h&atilde;y xem:</p> <ul> <li><a href="https://www.tensorflow.org/api_docs/python/tf/keras/losses">tf.keras Loss Functions</a></li> </ul> <p>Metrics được định nghĩa l&agrave; danh s&aacute;ch c&aacute;c chuỗi cho c&aacute;c metric functions&nbsp;đ&atilde; biết hoặc danh s&aacute;ch c&aacute;c h&agrave;m cần gọi để đ&aacute;nh gi&aacute; c&aacute;c dự đo&aacute;n.</p> <p>Để biết danh s&aacute;ch c&aacute;c metric được hỗ trợ, h&atilde;y xem:</p> <ul> <li><a href="https://www.tensorflow.org/api_docs/python/tf/keras/metrics">tf.keras Metrics</a></li> </ul> <pre class="language-python"><code>... # compile the model model.compile(optimizer='sgd', loss='binary_crossentropy', metrics=['accuracy'])</code></pre> <h3 id="ftoc-heading-3" class="ftwp-heading" style="text-align: justify;">Fit the model</h3> <p style="text-align: justify;">Việc ph&ugrave; hợp với m&ocirc; h&igrave;nh y&ecirc;u cầu trước ti&ecirc;n bạn phải chọn cấu h&igrave;nh đ&agrave;o tạo, chẳng hạn như số epochs (số v&ograve;ng lặp qua tập dữ liệu đ&agrave;o tạo) v&agrave; batch size (số lượng mẫu trong một epoch được sử dụng để ước t&iacute;nh lỗi m&ocirc; h&igrave;nh).</p> <p style="text-align: justify;">Huấn luyện &aacute;p dụng thuật to&aacute;n tối ưu h&oacute;a để giảm thiểu h&agrave;m mất m&aacute;t đ&atilde; chọn v&agrave; cập nhật m&ocirc; h&igrave;nh bằng c&aacute;ch sử dụng thuật to&aacute;n lỗi lan truyền ngược.</p> <p style="text-align: justify;">Việc fit m&ocirc; h&igrave;nh l&agrave; phần chậm của to&agrave;n bộ qu&aacute; tr&igrave;nh v&agrave; c&oacute; thể mất v&agrave;i gi&acirc;y đến v&agrave;i giờ đến v&agrave;i ng&agrave;y, t&ugrave;y thuộc v&agrave;o độ phức tạp của m&ocirc; h&igrave;nh, phần cứng bạn đang sử dụng v&agrave; k&iacute;ch thước của tập dữ liệu đ&agrave;o tạo.</p> <p style="text-align: justify;">Từ g&oacute;c độ API, điều n&agrave;y li&ecirc;n quan đến việc gọi một h&agrave;m để thực hiện qu&aacute; tr&igrave;nh đ&agrave;o tạo. H&agrave;m n&agrave;y sẽ chặn (kh&ocirc;ng trả về) cho đến khi qu&aacute; tr&igrave;nh huấn luyện kết th&uacute;c.</p> <pre class="language-python"><code>... # fit the model model.fit(X, y, epochs=100, batch_size=32)</code></pre> <h3 id="ftoc-heading-4" class="ftwp-heading">Evaluate the Model (Đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh)</h3> <p style="text-align: justify;">Đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh y&ecirc;u cầu trước ti&ecirc;n bạn phải chọn một tập dữ liệu lưu giữ được sử dụng để đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh. Đ&acirc;y l&agrave; dữ liệu kh&ocirc;ng được sử dụng trong qu&aacute; tr&igrave;nh đ&agrave;o tạo để ch&uacute;ng ta c&oacute; thể c&oacute; được ước t&iacute;nh kh&aacute;ch quan về hiệu suất của m&ocirc; h&igrave;nh khi đưa ra dự đo&aacute;n tr&ecirc;n dữ liệu mới.</p> <p style="text-align: justify;">Tốc độ đ&aacute;nh gi&aacute; m&ocirc; h&igrave;nh tỷ lệ thuận với lượng dữ liệu bạn muốn sử dụng để đ&aacute;nh gi&aacute;, mặc d&ugrave; n&oacute; nhanh hơn nhiều so với việc đ&agrave;o tạo v&igrave; m&ocirc; h&igrave;nh kh&ocirc;ng bị thay đổi.</p> <p style="text-align: justify;">Từ quan điểm API, điều n&agrave;y li&ecirc;n quan đến việc gọi một h&agrave;m với tập dữ liệu giữ lại v&agrave; nhận được lỗi v&agrave; c&oacute; thể l&agrave; c&aacute;c số liệu kh&aacute;c c&oacute; thể được b&aacute;o c&aacute;o.</p> <pre class="language-python"><code>... # evaluate the model loss = model.evaluate(X, y, verbose=0)</code></pre> <h3 id="ftoc-heading-5" class="ftwp-heading" style="text-align: justify;">Make a Prediction (Đưa ra dự đo&aacute;n)</h3> <p style="text-align: justify;">Đưa ra dự đo&aacute;n l&agrave; bước cuối c&ugrave;ng trong v&ograve;ng đời. N&oacute; y&ecirc;u cầu bạn phải c&oacute; dữ liệu mới cần phải c&oacute; dự đo&aacute;n.</p> <p style="text-align: justify;">Từ g&oacute;c độ API, bạn chỉ cần gọi một h&agrave;m để đưa ra dự đo&aacute;n về lớp nh&atilde;n, x&aacute;c suất hoặc gi&aacute; trị số: bất cứ điều g&igrave; bạn thiết kế m&ocirc; h&igrave;nh của m&igrave;nh để dự đo&aacute;n.</p> <p style="text-align: justify;">Bạn c&oacute; thể muốn lưu m&ocirc; h&igrave;nh v&agrave; load lại n&oacute; sau đ&oacute; để đưa ra dự đo&aacute;n. Bạn cũng c&oacute; thể chọn để ph&ugrave; hợp với một m&ocirc; h&igrave;nh tr&ecirc;n tất cả c&aacute;c dữ liệu c&oacute; sẵn trước khi bắt đầu sử dụng.</p> <p style="text-align: justify;">B&acirc;y giờ ch&uacute;ng ta đ&atilde; quen thuộc với v&ograve;ng đời của m&ocirc; h&igrave;nh, h&atilde;y c&ugrave;ng xem x&eacute;t hai c&aacute;ch ch&iacute;nh để sử dụng API tf.keras để x&acirc;y dựng m&ocirc; h&igrave;nh: sequential v&agrave; functional.</p> <pre class="language-python"><code>... # make a prediction yhat = model.predict(X)</code></pre> <p>&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>