tek4

Giảm Tình Trạng Quá Khớp Trong Huấn Luyện Mô Hình – Keras Cơ Bản

by - September. 26, 2021
Học
Kiến thức
Machine Learning
<p style="text-align: justify;">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 kh&aacute;m ph&aacute; kỹ thuật để cải thiện hiệu suất của m&ocirc; h&igrave;nh học s&acirc;u đ&oacute; l&agrave; giảm t&igrave;nh trạng qu&aacute; khớp trong huấn luyện m&ocirc; h&igrave;nh. Bắt đầu th&ocirc;i!</p> <p style="text-align: justify;">Xem th&ecirc;m b&agrave;i viết trước:&nbsp;<a href="https://tek4.vn/cach-luu-va-load-lai-mot-mo-hinh-hoc-sau-keras-co-ban/" target="_blank" rel="noopener">C&aacute;ch Lưu V&agrave; Load Lại Một M&ocirc; H&igrave;nh Học S&acirc;u</a></p> <p><img style="width: 614px; display: block; margin-left: auto; margin-right: auto;" src="http://tek4vn.2soft.top/public_files/52-png" alt="52" height="321" /></p> <p style="text-align: justify;">Dropout (Bỏ học) l&agrave; một phương ph&aacute;p ch&iacute;nh quy th&ocirc;ng minh gi&uacute;p l&agrave;m giảm t&igrave;nh trạng qu&aacute; khớp (overfitting) với tập dữ liệu đ&agrave;o tạo v&agrave; l&agrave;m cho m&ocirc; h&igrave;nh mạnh mẽ hơn.</p> <p style="text-align: justify;">Điều n&agrave;y đạt được trong qu&aacute; tr&igrave;nh đ&agrave;o tạo, trong đ&oacute; một số kết quả đầu ra của layer ngẫu nhi&ecirc;n bị bỏ qua hoặc &lsquo;<em>bị loại bỏ</em>&nbsp;(<em>dropped out</em>)&rsquo;. Việc n&agrave;y c&oacute; t&aacute;c dụng l&agrave;m cho layer tr&ocirc;ng giống như &ndash; v&agrave; được coi như &ndash; một layer c&oacute; số lượng node v&agrave; kết nối kh&aacute;c với layer trước.</p> <p style="text-align: justify;">Việc dropout c&oacute; t&aacute;c dụng l&agrave;m cho qu&aacute; tr&igrave;nh đ&agrave;o tạo trở n&ecirc;n &lsquo;ồn &agrave;o&rsquo;, buộc c&aacute;c node trong một layer phải đảm nhận &iacute;t nhiều tr&aacute;ch nhiệm về c&aacute;c đầu v&agrave;o.</p> <p style="text-align: justify;">Bạn c&oacute; thể th&ecirc;m dropout v&agrave;o c&aacute;c m&ocirc; h&igrave;nh của m&igrave;nh dưới dạng một layer mới trước layer m&agrave; bạn muốn bỏ kết nối đầu v&agrave;o.</p> <p style="text-align: justify;">Điều n&agrave;y li&ecirc;n quan đến việc th&ecirc;m một layer được gọi l&agrave;&nbsp;<a href="https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout">Dropout()</a>&nbsp;nhận đối số chỉ định x&aacute;c suất m&agrave; mỗi đầu ra từ trước đ&oacute; bị giảm. V&iacute; dụ. 0,4 c&oacute; nghĩa l&agrave; 40 phần trăm đầu v&agrave;o sẽ bị loại bỏ sau mỗi lần cập nhật cho m&ocirc; h&igrave;nh.</p> <p style="text-align: justify;">Bạn c&oacute; thể th&ecirc;m layer Dropout trong c&aacute;c m&ocirc; h&igrave;nh MLP, CNN v&agrave; RNN, mặc d&ugrave; cũng c&oacute; c&aacute;c phi&ecirc;n bản Dropout chuy&ecirc;n biệt để sử dụng với c&aacute;c m&ocirc; h&igrave;nh CNN v&agrave; RNN m&agrave; bạn cũng c&oacute; thể muốn kh&aacute;m ph&aacute;.</p> <p style="text-align: justify;">V&iacute; dụ dưới đ&acirc;y ph&ugrave; hợp với m&ocirc; h&igrave;nh mạng nơ ron nhỏ trong b&agrave;i to&aacute;n ph&acirc;n loại nhị ph&acirc;n tổng hợp.</p> <p style="text-align: justify;">Một layer dropout với 50 phần trăm số lần dropout được ch&egrave;n v&agrave;o giữa layer ẩn đầu ti&ecirc;n v&agrave; layer đầu ra.</p> <pre class="language-python"><code># example of using dropout from sklearn.datasets import make_classification from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.layers import Dropout from matplotlib import pyplot # create the dataset X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) # determine the number of input features n_features = X.shape[1] # define model model = Sequential() model.add(Dense(10, activation='relu', kernel_initializer='he_normal', input_shape=(n_features,))) model.add(Dropout(0.5)) model.add(Dense(1, activation='sigmoid')) # compile the model model.compile(optimizer='adam', loss='binary_crossentropy') # fit the model model.fit(X, y, epochs=100, batch_size=32, verbose=0)</code></pre> <p><a href="https://tek4.vn/tang-toc-huan-luyen-mo-hinh-voi-batch-normalization-keras-co-ban/" target="_blank" rel="noopener">B&agrave;i viết tiếp theo: Tăng tốc huấn luyện với Batch Normalization</a></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>