{"id":34870,"date":"2024-08-14T10:20:21","date_gmt":"2024-08-14T03:20:21","guid":{"rendered":"http:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/how-to-move-your-machine-learning-model-to-production\/"},"modified":"2024-08-14T10:20:21","modified_gmt":"2024-08-14T03:20:21","slug":"how-to-move-your-machine-learning-model-to-production","status":"publish","type":"post","link":"https:\/\/jupitek.maudemo.vip\/index.php\/2024\/08\/14\/how-to-move-your-machine-learning-model-to-production\/","title":{"rendered":"Tri\u1ec3n khai m\u00f4 h\u00ecnh Machine Learning v\u00e0o Prodcution"},"content":{"rendered":"<p>Ph\u00e1t tri\u1ec3n, \u0111\u00e0o t\u1ea1o v\u00e0 \u0111i\u1ec1u ch\u1ec9nh m\u00f4 h\u00ecnh h\u1ecdc s\u00e2u cho m\u1ed9t v\u1ea5n \u0111\u1ec1 c\u1ee5 th\u1ec3, ch\u1eb3ng h\u1ea1n nh\u01b0 x\u1eed l\u00fd ng\u00f4n ng\u1eef t\u1ef1 nhi\u00ean (NLP) ho\u1eb7c nh\u1eadn d\u1ea1ng h\u00ecnh \u1ea3nh, \u0111\u00f2i h\u1ecfi th\u1eddi gian v\u00e0 t\u00e0i nguy\u00ean. N\u00f3 c\u0169ng th\u01b0\u1eddng li\u00ean quan \u0111\u1ebfn vi\u1ec7c s\u1eed d\u1ee5ng b\u1ed9 x\u1eed l\u00fd m\u1ea1nh m\u1ebd \u0111\u1ec3 \u0111\u00e0o t\u1ea1o m\u00f4 h\u00ecnh tr\u00ean c\u00e1c t\u1eadp d\u1eef li\u1ec7u l\u1edbn. Tuy nhi\u00ean, khi m\u00f4 h\u00ecnh ho\u1ea1t \u0111\u1ed9ng t\u1ed1t, vi\u1ec7c s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 t\u1ea1o d\u1ef1 \u0111o\u00e1n tr\u00ean d\u1eef li\u1ec7u m\u1edbi s\u1ebd \u0111\u01a1n gi\u1ea3n h\u01a1n nhi\u1ec1u v\u00e0 \u00edt t\u1ed1n k\u00e9m v\u1ec1 m\u1eb7t t\u00ednh to\u00e1n h\u01a1n. Kh\u00f3 kh\u0103n duy nh\u1ea5t l\u00e0 di chuy\u1ec3n m\u00f4 h\u00ecnh t\u1eeb m\u00f4i tr\u01b0\u1eddng ph\u00e1t tri\u1ec3n c\u1ee7a n\u00f3 v\u00e0o \u1ee9ng d\u1ee5ng s\u1ea3n xu\u1ea5t.<\/p>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd ch\u1ec9 cho b\u1ea1n c\u00e1ch t\u1ea1o m\u1ed9t API Flask \u0111\u01a1n gi\u1ea3n s\u1eed d\u1ee5ng m\u00e1y h\u1ecdc \u0111\u1ec3 nh\u1eadn d\u1ea1ng ch\u1eef s\u1ed1 vi\u1ebft tay. API s\u1ebd s\u1eed d\u1ee5ng m\u1ed9t m\u00f4 h\u00ecnh h\u1ecdc s\u00e2u \u0111\u01a1n gi\u1ea3n \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u00ean t\u1eadp d\u1eef li\u1ec7u MNIST n\u1ed5i ti\u1ebfng.<\/p>\n<h2 id=\"before-you-begin\">Tr\u01b0\u1edbc khi b\u1ea1n b\u1eaft \u0111\u1ea7u<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#before-you-begin\"><\/a><\/h2>\n<ol>\n<li>N\u1ebfu b\u1ea1n ch\u01b0a th\u1ef1c hi\u1ec7n, h\u00e3y t\u1ea1o m\u1ed9t t\u00e0i kho\u1ea3n Linode v\u00e0 Compute Instance. Xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/platform\/get-started\/\">B\u1eaft \u0111\u1ea7u v\u1edbi Linode<\/a>&nbsp;v\u00e0&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/create\/\">T\u1ea1o Compute Instance<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i .<\/li>\n<li>L\u00e0m theo h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/products\/compute\/compute-instances\/guides\/set-up-and-secure\/\">Thi\u1ebft l\u1eadp v\u00e0 B\u1ea3o m\u1eadt Phi\u00ean b\u1ea3n Compute<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ec3 c\u1eadp nh\u1eadt h\u1ec7 th\u1ed1ng c\u1ee7a b\u1ea1n. B\u1ea1n c\u0169ng c\u00f3 th\u1ec3 mu\u1ed1n \u0111\u1eb7t m\u00fai gi\u1edd, c\u1ea5u h\u00ecnh t\u00ean m\u00e1y ch\u1ee7, t\u1ea1o t\u00e0i kho\u1ea3n ng\u01b0\u1eddi d\u00f9ng gi\u1edbi h\u1ea1n v\u00e0 t\u0103ng c\u01b0\u1eddng quy\u1ec1n truy c\u1eadp SSH.<\/li>\n<\/ol>\n<p>H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1eed d\u1ee5ng Ubuntu 16.04 trong c\u00e1c v\u00ed d\u1ee5. S\u1eeda \u0111\u1ed5i c\u00e1c l\u1ec7nh khi c\u1ea7n thi\u1ebft cho b\u1ea3n ph\u00e2n ph\u1ed1i c\u1ee7a b\u1ea1n. C\u00e1c t\u1eadp l\u1ec7nh trong h\u01b0\u1edbng d\u1eabn n\u00e0y \u0111\u01b0\u1ee3c vi\u1ebft b\u1eb1ng Python 3, nh\u01b0ng c\u0169ng c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng tr\u00ean Python 2.<\/p>\n<h2 id=\"set-up-a-python-virtual-environment\">Thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng \u1ea3o Python<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#set-up-a-python-virtual-environment\"><\/a><\/h2>\n<p>B\u1ea1n s\u1ebd s\u1eed d\u1ee5ng Python \u0111\u1ec3 t\u1ea1o m\u00f4 h\u00ecnh v\u00e0 tri\u1ec3n khai m\u00f4 h\u00ecnh \u0111\u00f3 v\u00e0o Flask API. T\u1ed1t nh\u1ea5t l\u00e0 n\u00ean thi\u1ebft l\u1eadp m\u00f4i tr\u01b0\u1eddng \u1ea3o cho t\u1eebng m\u1ee5c \u0111\u00edch, \u0111\u1ec3 b\u1ea5t k\u1ef3 thay \u0111\u1ed5i n\u00e0o b\u1ea1n th\u1ef1c hi\u1ec7n \u0111\u1ed1i v\u1edbi c\u1ea5u h\u00ecnh Python c\u1ee7a m\u00ecnh s\u1ebd kh\u00f4ng \u1ea3nh h\u01b0\u1edfng \u0111\u1ebfn ph\u1ea7n c\u00f2n l\u1ea1i c\u1ee7a h\u1ec7 th\u1ed1ng.<\/p>\n<ol>\n<li>T\u1ea3i xu\u1ed1ng v\u00e0 c\u00e0i \u0111\u1eb7t Miniconda, phi\u00ean b\u1ea3n nh\u1eb9 c\u1ee7a Anaconda. L\u00e0m theo h\u01b0\u1edbng d\u1eabn trong terminal v\u00e0 cho ph\u00e9p Anaconda th\u00eam v\u1ecb tr\u00ed PATH v\u00e0o&nbsp;<code>.bashrc<\/code>:\n<ul>\n<li>wget https:\/\/repo.continuum.io\/miniconda\/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh source .bashrc<\/li>\n<\/ul>\n<\/li>\n<li>T\u1ea1o v\u00e0 k\u00edch ho\u1ea1t m\u00f4i tr\u01b0\u1eddng \u1ea3o Python m\u1edbi:\n<ul>\n<li>conda create -n deeplearning python <\/li>\n<li>source activate deeplearning<\/li>\n<li>N\u1ebfu c\u00e1c l\u1ec7nh n\u00e0y th\u00e0nh c\u00f4ng, d\u1ea5u nh\u1eafc l\u1ec7nh \u0111\u1ea7u cu\u1ed1i c\u1ee7a b\u1ea1n s\u1ebd \u0111\u01b0\u1ee3c m\u1edf \u0111\u1ea7u b\u1eb1ng&nbsp;<code>(deeplearning)<\/code>.<\/li>\n<\/ul>\n<\/li>\n<li>C\u00e0i \u0111\u1eb7t c\u00e1c ph\u1ea7n ph\u1ee5 thu\u1ed9c b\u00ean trong m\u00f4i tr\u01b0\u1eddng \u1ea3o:\n<ul>\n<li><code>conda install keras tensorflow h5py pillow flask numpy<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>N\u1ebfu b\u1ea1n mu\u1ed1n th\u1eed nghi\u1ec7m m\u00f4 h\u00ecnh n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n s\u1eed d\u1ee5ng s\u1ed5 ghi ch\u00e9p Jupyter. Xem h\u01b0\u1edbng d\u1eabn&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/install-a-jupyter-notebook-server-on-a-linode-behind-an-apache-reverse-proxy\/\">C\u00e0i \u0111\u1eb7t m\u00e1y ch\u1ee7 s\u1ed5 ghi ch\u00e9p Jupyter<\/a>&nbsp;c\u1ee7a ch\u00fang t\u00f4i \u0111\u1ec3 bi\u1ebft th\u00eam chi ti\u1ebft.<\/p>\n<h2 id=\"prepare-a-model\">Chu\u1ea9n b\u1ecb m\u1ed9t m\u00f4 h\u00ecnh<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#prepare-a-model\"><\/a><\/h2>\n<p>Vi\u1ec7c \u0111\u00e0o t\u1ea1o c\u00e1c m\u00f4 h\u00ecnh ph\u1ee9c t\u1ea1p tr\u00ean c\u00e1c t\u1eadp d\u1eef li\u1ec7u l\u1edbn th\u01b0\u1eddng \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n tr\u00ean c\u00e1c m\u00e1y chuy\u00ean d\u1ee5ng c\u00f3 GPU (B\u1ed9 x\u1eed l\u00fd \u0111\u1ed3 h\u1ecda) m\u1ea1nh m\u1ebd. \u0110\u1ec3 t\u1eadp trung v\u00e0o qu\u00e1 tr\u00ecnh tri\u1ec3n khai, h\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd nhanh ch\u00f3ng x\u00e2y d\u1ef1ng m\u1ed9t m\u00f4 h\u00ecnh \u0111\u01a1n gi\u1ea3n tr\u00ean m\u1ed9t t\u1eadp d\u1eef li\u1ec7u c\u00f3 th\u1ec3 qu\u1ea3n l\u00fd \u0111\u01b0\u1ee3c, \u0111\u1ec3 c\u00f3 th\u1ec3 \u0111\u00e0o t\u1ea1o nhanh ch\u00f3ng ngay c\u1ea3 tr\u00ean m\u00e1y t\u00ednh x\u00e1ch tay ho\u1eb7c Linode c\u01a1 b\u1ea3n.<\/p>\n<h3 id=\"mnist-database\">C\u01a1 s\u1edf d\u1eef li\u1ec7u MNIST<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#mnist-database\"><\/a><\/h3>\n<p>\u0110\u00e0o t\u1ea1o m\u00e1y t\u00ednh \u0111\u1ec3 nh\u1eadn d\u1ea1ng s\u1ed1 vi\u1ebft tay l\u00e0 m\u1ed9t nhi\u1ec7m v\u1ee5 quan tr\u1ecdng trong giai \u0111o\u1ea1n \u0111\u1ea7u c\u1ee7a h\u1ecdc m\u00e1y. Lo\u1ea1i ph\u00e2n lo\u1ea1i n\u00e0y \u0111\u01b0\u1ee3c nhi\u1ec1u t\u1ed5 ch\u1ee9c s\u1eed d\u1ee5ng, bao g\u1ed3m B\u01b0u \u0111i\u1ec7n Hoa K\u1ef3, \u0111\u1ec3 t\u1ef1 \u0111\u1ed9ng h\u00f3a vi\u1ec7c nh\u1eadp v\u00e0 x\u1eed l\u00fd th\u00f4ng tin. M\u1ed9t t\u1eadp d\u1eef li\u1ec7u n\u1ed5i ti\u1ebfng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng cho nhi\u1ec7m v\u1ee5 n\u00e0y l\u00e0 c\u01a1 s\u1edf d\u1eef li\u1ec7u MNIST, ch\u1ee9a 70.000 h\u00ecnh \u1ea3nh ch\u1eef s\u1ed1 vi\u1ebft tay (\u0111\u1ec3 so s\u00e1nh, c\u01a1 s\u1edf d\u1eef li\u1ec7u ImageNet, th\u01b0\u1eddng \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong c\u00e1c \u1ee9ng d\u1ee5ng h\u1ecdc m\u00e1y, c\u00f3 h\u01a1n 10 tri\u1ec7u h\u00ecnh \u1ea3nh). M\u1ed7i h\u00ecnh \u1ea3nh 28&#215;28 pixel bao g\u1ed3m m\u1ed9t ch\u1eef s\u1ed1 duy nh\u1ea5t \u0111\u00e3 \u0111\u01b0\u1ee3c x\u1eed l\u00fd tr\u01b0\u1edbc v\u00e0 d\u00e1n nh\u00e3n. \u0110\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 MNIST, h\u00e3y xem trang&nbsp;<a href=\"http:\/\/yann.lecun.com\/exdb\/mnist\/\" target=\"_blank\" rel=\"noreferrer noopener\">web ch\u00ednh th\u1ee9c<\/a>&nbsp;.<\/p>\n<p>Nhi\u1ec1u m\u00f4 h\u00ecnh kh\u00e1c nhau, t\u1eeb c\u00e1c b\u1ed9 ph\u00e2n lo\u1ea1i tuy\u1ebfn t\u00ednh \u0111\u01a1n gi\u1ea3n \u0111\u1ebfn c\u00e1c m\u1ea1ng n\u01a1-ron ph\u1ee9c t\u1ea1p, \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u00ean MNIST. Hi\u1ec7n t\u1ea1i, c\u00e1c m\u00f4 h\u00ecnh t\u1ed1t nh\u1ea5t c\u00f3 th\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c t\u1ef7&nbsp;<a href=\"https:\/\/en.wikipedia.org\/wiki\/MNIST_database\" target=\"_blank\" rel=\"noreferrer noopener\">l\u1ec7 l\u1ed7i ch\u1ec9 0,21%<\/a>&nbsp;. H\u01b0\u1edbng d\u1eabn n\u00e0y s\u1ebd s\u1eed d\u1ee5ng m\u1ed9t CNN (M\u1ea1ng n\u01a1-ron t\u00edch ch\u1eadp) \u0111\u01a1n gi\u1ea3n c\u00f3 th\u1ec3 \u0111\u1ea1t \u0111\u01b0\u1ee3c \u0111\u1ed9 ch\u00ednh x\u00e1c kho\u1ea3ng 97%.<\/p>\n<h3 id=\"create-a-deep-learning-model-with-keras\">T\u1ea1o m\u00f4 h\u00ecnh h\u1ecdc s\u00e2u v\u1edbi Keras<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#create-a-deep-learning-model-with-keras\"><\/a><\/h3>\n<p>Keras l\u00e0 m\u1ed9t th\u01b0 vi\u1ec7n h\u1ecdc s\u00e2u d\u00e0nh cho Python. N\u00f3 cung c\u1ea5p m\u1ed9t giao di\u1ec7n h\u01b0\u1edbng \u0111\u1ed1i t\u01b0\u1ee3ng c\u00f3 th\u1ec3 ho\u1ea1t \u0111\u1ed9ng v\u1edbi nhi\u1ec1u khu\u00f4n kh\u1ed5 h\u1ecdc s\u00e2u kh\u00e1c nhau, bao g\u1ed3m Theano v\u00e0 Tensorflow.<\/p>\n<p>V\u00ec vi\u1ec7c ph\u00e1t tri\u1ec3n v\u00e0 \u0111\u00e0o t\u1ea1o m\u00f4 h\u00ecnh h\u1ecdc s\u00e2u n\u1eb1m ngo\u00e0i ph\u1ea1m vi c\u1ee7a h\u01b0\u1edbng d\u1eabn n\u00e0y, n\u00ean m\u00e3 b\u00ean d\u01b0\u1edbi \u0111\u01b0\u1ee3c cung c\u1ea5p m\u00e0 kh\u00f4ng c\u00f3 l\u1eddi gi\u1ea3i th\u00edch. M\u00f4 h\u00ecnh l\u00e0 phi\u00ean b\u1ea3n \u0111\u01a1n gi\u1ea3n h\u00f3a c\u1ee7a v\u00ed d\u1ee5 t\u1eeb&nbsp;<a href=\"https:\/\/elitedatascience.com\/keras-tutorial-deep-learning-in-python\" target=\"_blank\" rel=\"noreferrer noopener\">h\u01b0\u1edbng d\u1eabn tuy\u1ec7t v\u1eddi c\u1ee7a Elite Data Science<\/a>&nbsp;. N\u1ebfu b\u1ea1n kh\u00f4ng c\u00f3 ki\u1ebfn \u200b\u200bth\u1ee9c n\u1ec1n v\u1ec1 h\u1ecdc s\u00e2u v\u00e0 mu\u1ed1n t\u00ecm hi\u1ec3u th\u00eam, b\u1ea1n c\u00f3 th\u1ec3 ho\u00e0n th\u00e0nh h\u01b0\u1edbng d\u1eabn \u0111\u00f3 r\u1ed3i chuy\u1ec3n \u0111\u1ebfn ph\u1ea7n&nbsp;<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#flask-api\">Flask API<\/a>&nbsp;c\u1ee7a h\u01b0\u1edbng d\u1eabn n\u00e0y.<\/p>\n<p class=\"has-background\" style=\"background-color:#74f78c33\">Ghi ch\u00fa : M\u00f4 h\u00ecnh n\u00e0y \u0111\u1ee7 \u0111\u01a1n gi\u1ea3n v\u00e0 t\u1eadp d\u1eef li\u1ec7u \u0111\u1ee7 nh\u1ecf \u0111\u1ec3 c\u00f3 th\u1ec3 ch\u1ea1y t\u1eadp l\u1ec7nh tr\u00ean Linode ho\u1eb7c tr\u00ean m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n. Tuy nhi\u00ean, s\u1eed d\u1ee5ng m\u00e1y t\u00ednh kh\u00f4ng c\u00f3 GPU v\u1eabn m\u1ea5t \u00edt nh\u1ea5t m\u01b0\u1eddi ph\u00fat. N\u1ebfu b\u1ea1n mu\u1ed1n b\u1ecf qua b\u01b0\u1edbc n\u00e0y, c\u00f3 th\u1ec3 t\u1ea3i xu\u1ed1ng m\u00f4 h\u00ecnh \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u01b0\u1edbc b\u1eb1ng c\u00e1ch ch\u1ea1y l\u1ec7nh <code>wget https:\/\/github.com\/linode\/docs-scripts\/raw\/master\/hosted_scripts\/my_model.h5<\/code><\/p>\n<p>C\u00e1c phi\u00ean b\u1ea3n c\u0169 h\u01a1n c\u1ee7a Keras y\u00eau c\u1ea7u x\u00f3a tr\u1ecdng s\u1ed1 t\u1ed1i \u01b0u h\u00f3a trong m\u00f4 h\u00ecnh \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u01b0\u1edbc. N\u1ebfu m\u00f4 h\u00ecnh \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u01b0\u1edbc \u0111\u01b0\u1ee3c t\u1ea3i xu\u1ed1ng t\u1eeb GitHub, t\u1eadp l\u1ec7nh b\u00ean d\u01b0\u1edbi s\u1ebd ki\u1ec3m tra v\u00e0 x\u00f3a tr\u1ecdng s\u1ed1 t\u1ed1i \u01b0u h\u00f3a.<\/p>\n<pre class=\"wp-block-code\"><code>import h5py\nwith h5py.File('my_model.h5', 'r+') as f:\nif 'optimizer_weights' in f.keys():\ndel f&#91;'optimizer_weights']\nf.close()<\/code><\/pre>\n<p>1.T\u1ea1o th\u01b0 m\u1ee5c cho m\u00f4 h\u00ecnh:<\/p>\n<pre class=\"wp-block-code\"><code>mkdir ~\/models &amp;&amp; cd ~\/models\n<\/code><\/pre>\n<p>2.T\u1ea1o m\u1ed9t t\u1eadp l\u1ec7nh Python \u0111\u1ec3 x\u00e2y d\u1ef1ng v\u00e0 \u0111\u00e0o t\u1ea1o m\u00f4 h\u00ecnh c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>from keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Activation, Flatten\nfrom keras.layers import Convolution2D, MaxPooling2D\nfrom keras.utils import np_utils\nfrom keras.datasets import mnist\n\n(X_train, y_train), (X_test, y_test) = mnist.load_data()\nX_train = X_train.reshape(X_train.shape&#91;0],1,28,28)\nX_test  = X_test.reshape(X_test.shape&#91;0],1,28,28)\nX_train = X_train.astype('float32')\nX_test = X_test.astype('float32')\nX_train \/= 255\nX_test \/= 255\n\nY_train = np_utils.to_categorical(y_train, 10)\nY_test = np_utils.to_categorical(y_test, 10)\n\nmodel = Sequential()\n\nmodel.add(Convolution2D(32,(3,3),activation='relu',input_shape=(1,28,28),dim_ordering='th'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.25))\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(10, activation='softmax'))\nmodel.compile(loss='categorical_crossentropy',\n              optimizer='adam',\n              metrics=&#91;'accuracy'])\n\nmodel.fit(X_train, Y_train,\n          batch_size=32, nb_epoch=5, verbose=1)\n\nmodel.save('my_model.h5')<\/code><\/pre>\n<p>3. Ch\u1ea1y t\u1eadp l\u1ec7nh:<\/p>\n<pre class=\"wp-block-code\"><code>python .\/mnist_model.py\n<\/code><\/pre>\n<p>C\u00f3 th\u1ec3 c\u00f3 m\u1ed9t th\u00f4ng b\u00e1o c\u1ea3nh b\u00e1o nh\u01b0 hi\u1ec3n th\u1ecb b\u00ean d\u01b0\u1edbi khi c\u00e0i \u0111\u1eb7t pip ho\u1eb7c conda, \u0111i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 c\u00e0i \u0111\u1eb7t t\u1eeb ngu\u1ed3n c\u00f3 th\u1ec3 mang l\u1ea1i hi\u1ec7u su\u1ea5t v\u01b0\u1ee3t tr\u1ed9i.<\/p>\n<pre class=\"wp-block-code\"><code>The TensorFlow library wasn't compiled to use SSE4.1 instructions, but these are available on your machine and could speed up CPU computations.\n<\/code><\/pre>\n<p>N\u1ebfu t\u1eadp l\u1ec7nh th\u1ef1c thi th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd th\u1ea5y&nbsp;<code>my_model.h5<\/code>t\u1ec7p trong&nbsp;<code>models<\/code>th\u01b0 m\u1ee5c.&nbsp;<code>model.save()<\/code>L\u1ec7nh trong Keras cho ph\u00e9p b\u1ea1n l\u01b0u c\u1ea3 ki\u1ebfn \u200b\u200btr\u00fac m\u00f4 h\u00ecnh v\u00e0 tr\u1ecdng s\u1ed1 \u0111\u00e3 \u0111\u00e0o t\u1ea1o.<\/p>\n<h2 id=\"flask-api\">API Flask<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#flask-api\"><\/a><\/h2>\n<p>Sau khi m\u00f4 h\u00ecnh \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o, vi\u1ec7c s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 t\u1ea1o d\u1ef1 \u0111o\u00e1n s\u1ebd \u0111\u01a1n gi\u1ea3n h\u01a1n nhi\u1ec1u. Trong ph\u1ea7n n\u00e0y, b\u1ea1n s\u1ebd x\u00e2y d\u1ef1ng m\u1ed9t API Python \u0111\u01a1n gi\u1ea3n v\u1edbi Flask. API s\u1ebd c\u00f3 m\u1ed9t \u0111i\u1ec3m cu\u1ed1i duy nh\u1ea5t: n\u00f3 s\u1ebd ch\u1ea5p nh\u1eadn c\u00e1c y\u00eau c\u1ea7u POST c\u00f3 \u0111\u00ednh k\u00e8m h\u00ecnh \u1ea3nh, sau \u0111\u00f3 s\u1eed d\u1ee5ng m\u00f4 h\u00ecnh b\u1ea1n \u0111\u00e3 l\u01b0u trong ph\u1ea7n tr\u01b0\u1edbc \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh ch\u1eef s\u1ed1 vi\u1ebft tay trong h\u00ecnh \u1ea3nh.<\/p>\n<p>1.T\u1ea1o th\u01b0 m\u1ee5c cho Flask API:<\/p>\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/var\/www\/flaskapi\/flaskapi &amp;&amp; cd \/var\/www\/flaskapi\/flaskapi\n<\/code><\/pre>\n<p>2.Sao ch\u00e9p m\u00f4 h\u00ecnh \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e0o t\u1ea1o tr\u01b0\u1edbc v\u00e0o th\u01b0 m\u1ee5c g\u1ed1c c\u1ee7a \u1ee9ng d\u1ee5ng Flask:<\/p>\n<pre class=\"wp-block-code\"><code>sudo cp ~\/models\/my_model.h5 \/var\/www\/flaskapi\/flaskapi\n<\/code><\/pre>\n<p>3.T\u1ea1o&nbsp;<code>\/var\/www\/flaskapi\/flaskapi\/__init__.py<\/code>trong tr\u00ecnh so\u1ea1n th\u1ea3o v\u0103n b\u1ea3n v\u00e0 th\u00eam n\u1ed9i dung sau:<\/p>\n<pre class=\"wp-block-code\"><code>from flask import Flask, jsonify, request\nimport numpy as np\nimport PIL\nfrom PIL import Image\nfrom keras.models import load_model\n\napp = Flask(__name__)\n\nmodel = load_model('\/var\/www\/flaskapi\/flaskapi\/my_model.h5')\n\n@app.route('\/predict', methods=&#91;\"POST\"])\ndef predict_image():\n        # Preprocess the image so that it matches the training input\n        image = request.files&#91;'file']\n        image = Image.open(image)\n        image = np.asarray(image.resize((28,28)))\n        image = image.reshape(1,1,28,28)\n\n        # Use the loaded model to generate a prediction.\n        pred = model.predict(image)\n\n        # Prepare and send the response.\n        digit = np.argmax(pred)\n        prediction = {'digit':int(digit)}\n        return jsonify(prediction)\n\nif __name__ == \"__main__\":\n        app.run()<\/code><\/pre>\n<p>L\u1ea7n n\u00e0y, m\u00f4-\u0111un duy nh\u1ea5t b\u1ea1n c\u1ea7n nh\u1eadp t\u1eeb Keras l\u00e0&nbsp;<code>load_model<\/code>, m\u00f4-\u0111un n\u00e0y \u0111\u1ecdc&nbsp;<code>my_model.h5<\/code>v\u00e0 t\u1ea3i m\u00f4 h\u00ecnh v\u00e0 tr\u1ecdng s\u1ed1. Sau khi m\u00f4 h\u00ecnh \u0111\u01b0\u1ee3c t\u1ea3i, h\u00e0m&nbsp;<code>predict()<\/code>s\u1ebd t\u1ea1o ra m\u1ed9t t\u1eadp h\u1ee3p c\u00e1c x\u00e1c su\u1ea5t cho m\u1ed7i s\u1ed1 t\u1eeb 0-9, cho bi\u1ebft kh\u1ea3 n\u0103ng ch\u1eef s\u1ed1 trong h\u00ecnh \u1ea3nh kh\u1edbp v\u1edbi t\u1eebng s\u1ed1. H\u00e0m&nbsp;<code>argmax<\/code>t\u1eeb th\u01b0 vi\u1ec7n Numpy tr\u1ea3 v\u1ec1 s\u1ed1 c\u00f3 x\u00e1c su\u1ea5t cao nh\u1ea5t: s\u1ed1 m\u00e0 m\u00f4 h\u00ecnh cho l\u00e0 c\u00f3 kh\u1ea3 n\u0103ng kh\u1edbp nh\u1ea5t.<\/p>\n<p>\u0110\u1ecbnh d\u1ea1ng c\u1ee7a c\u00e1c \u0111\u1ea7u v\u00e0o cho m\u00f4 h\u00ecnh ph\u1ea3i gi\u1ed1ng h\u1ec7t nh\u01b0 h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng trong qu\u00e1 tr\u00ecnh \u0111\u00e0o t\u1ea1o. H\u00ecnh \u1ea3nh \u0111\u00e0o t\u1ea1o l\u00e0 h\u00ecnh \u1ea3nh thang \u0111\u1ed9 x\u00e1m 28&#215;28 pixel, \u0111\u01b0\u1ee3c bi\u1ec3u di\u1ec5n d\u01b0\u1edbi d\u1ea1ng m\u1ed9t m\u1ea3ng c\u00e1c s\u1ed1 th\u1ef1c c\u00f3 h\u00ecnh d\u1ea1ng (1,28,28) (h\u00ecnh \u1ea3nh m\u00e0u s\u1ebd l\u00e0 (3,28,28)). \u0110i\u1ec1u n\u00e0y c\u00f3 ngh\u0129a l\u00e0 b\u1ea5t k\u1ef3 h\u00ecnh \u1ea3nh n\u00e0o b\u1ea1n g\u1eedi cho m\u00f4 h\u00ecnh \u0111\u1ec1u ph\u1ea3i \u0111\u01b0\u1ee3c thay \u0111\u1ed5i k\u00edch th\u01b0\u1edbc theo h\u00ecnh d\u1ea1ng ch\u00ednh x\u00e1c n\u00e0y. Qu\u00e1 tr\u00ecnh x\u1eed l\u00fd tr\u01b0\u1edbc n\u00e0y c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c th\u1ef1c hi\u1ec7n \u1edf ph\u00eda m\u00e1y kh\u00e1ch ho\u1eb7c ph\u00eda m\u00e1y ch\u1ee7, nh\u01b0ng \u0111\u1ec3 \u0111\u01a1n gi\u1ea3n, API v\u00ed d\u1ee5 \u1edf tr\u00ean s\u1ebd x\u1eed l\u00fd qu\u00e1 tr\u00ecnh x\u1eed l\u00fd.<\/p>\n<h2 id=\"install-mod_wsgi\">C\u00e0i \u0111\u1eb7t mod_wsgi<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#install-mod_wsgi\"><\/a><\/h2>\n<p>C\u00e1c m\u00f4-\u0111un Apache th\u01b0\u1eddng \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t c\u00f9ng v\u1edbi h\u1ec7 th\u1ed1ng c\u00e0i \u0111\u1eb7t Apache. Tuy nhi\u00ean,&nbsp;<code>mod_wsgi<\/code>c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c c\u00e0i \u0111\u1eb7t trong Python \u0111\u1ec3 s\u1eed d\u1ee5ng m\u00f4i tr\u01b0\u1eddng \u1ea3o ph\u00f9 h\u1ee3p.<\/p>\n<p>1.C\u00e0i \u0111\u1eb7t Apache v\u00e0 c\u00e1c ti\u00eau \u0111\u1ec1 ph\u00e1t tri\u1ec3n:<\/p>\n<pre class=\"wp-block-code\"><code>sudo apt install apache2-dev apache2\n<\/code><\/pre>\n<p>2.C\u00e0i \u0111\u1eb7t&nbsp;<code>mod_wsgi<\/code>d\u01b0\u1edbi d\u1ea1ng m\u00f4-\u0111un Python cho Apache:<\/p>\n<pre class=\"wp-block-code\"><code>wget https:\/\/pypi.python.org\/packages\/aa\/43\/f851abaad631aee69206e29cebf9f8bf0ddb9c22dbd6e583f1f8f44e6d43\/mod_wsgi-4.5.20.tar.gz\ntar -xvf mod_wsgi-4.5.20.tar.gz\ncd mod_wsgi-4.5.20\npython setup.py install<\/code><\/pre>\n<p>3.S\u1eed d\u1ee5ng&nbsp;<code>mod_wsgi-express<\/code>\u0111\u1ec3 t\u00ecm \u0111\u01b0\u1eddng d\u1eabn c\u00e0i \u0111\u1eb7t:<\/p>\n<pre class=\"wp-block-code\"><code>mod_wsgi-express module-config\n<\/code><\/pre>\n<p>\u0110\u1ea7u ra s\u1ebd t\u01b0\u01a1ng t\u1ef1 nh\u01b0 sau:<\/p>\n<pre class=\"wp-block-code\"><code>LoadModule wsgi_module \"\/home\/linode\/miniconda3\/envs\/deeplearning\/lib\/python3.6\/site-packages\/mod_wsgi-4.5.20-py3.6-linux-x86_64.egg\/mod_wsgi\/server\/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so\"\nWSGIPythonHome \"\/home\/linode\/miniconda3\/envs\/deeplearning\"<\/code><\/pre>\n<p>4.T\u1ea1o m\u1ed9t&nbsp;<code>wsgi.load<\/code>t\u1ec7p trong th\u01b0 m\u1ee5c Apache&nbsp;<code>mods-available<\/code>. Sao ch\u00e9p&nbsp;<code>LoadModule<\/code>ch\u1ec9 th\u1ecb \u1edf tr\u00ean v\u00e0 d\u00e1n v\u00e0o t\u1ec7p:<\/p>\n<pre class=\"wp-block-code\"><code>LoadModule wsgi_module \"\/home\/linode\/miniconda3\/envs\/deeplearning\/lib\/python3.6\/site-packages\/mod_wsgi-4.5.20-py3.6-linux-x86_64.egg\/mod_wsgi\/server\/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so\"\n<\/code><\/pre>\n<p>5.K\u00edch ho\u1ea1t b\u1ea3n mod:<\/p>\n<pre class=\"wp-block-code\"><code>a2enmod wsgi\n<\/code><\/pre>\n<h2 id=\"set-up-virtual-hosting-for-flask-api\">Thi\u1ebft l\u1eadp l\u01b0u tr\u1eef \u1ea3o cho Flask API<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#set-up-virtual-hosting-for-flask-api\"><\/a><\/h2>\n<p>1.T\u1ea1o m\u1ed9t&nbsp;<code>flaskapi.wsgi<\/code>t\u1ec7p c\u00f3 c\u00e0i \u0111\u1eb7t cho \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n:<\/p>\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/python\nimport sys\nsys.path.insert(0,\"\/var\/www\/flaskapi\/\")\n\nfrom flaskapi import app as application<\/code><\/pre>\n<p>2.C\u1ea5u h\u00ecnh m\u00e1y ch\u1ee7 \u1ea3o cho \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n. T\u1ea1o&nbsp;<code>flaskapi.conf<\/code>trong th\u01b0 m\u1ee5c Apache&nbsp;<code>sites-available<\/code>v\u00e0 th\u00eam n\u1ed9i dung sau, thay th\u1ebf&nbsp;<code>example.com<\/code>b\u1eb1ng \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a Linode. \u0110\u1ed1i v\u1edbi&nbsp;<code>WSGIDaemonProcess<\/code>ch\u1ec9 th\u1ecb, h\u00e3y \u0111\u1eb7t \u0111\u01b0\u1eddng d\u1eabn trang ch\u1ee7 Python th\u00e0nh \u0111\u1ea7u ra c\u1ee7a&nbsp;<code>mod_wsgi-express module-config<\/code>b\u00ean d\u01b0\u1edbi&nbsp;<code>WSGIPythonHome<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>&lt;Directory \/var\/www\/flaskapi\/flaskapi&gt;\n  Require all granted\n&lt;\/Directory&gt;\n&lt;VirtualHost *:80&gt;\n  ServerName example.com\n  ServerAdmin admin@example.com\n  WSGIDaemonProcess flaskapi python-home=\/home\/linode\/miniconda3\/envs\/deeplearning\n  WSGIScriptAlias \/ \/var\/www\/flaskapi\/flaskapi\/flaskapi.wsgi\n  ErrorLog \/var\/www\/html\/example.com\/logs\/error.log\n  CustomLog \/var\/www\/html\/example.com\/logs\/access.log combined\n&lt;\/VirtualHost&gt;<\/code><\/pre>\n<p>3.T\u1ea1o m\u1ed9t&nbsp;<code>logs<\/code>th\u01b0 m\u1ee5c:<\/p>\n<pre class=\"wp-block-code\"><code>sudo mkdir -p \/var\/www\/html\/example.com\/logs<\/code><\/pre>\n<p>4.K\u00edch ho\u1ea1t trang web m\u1edbi v\u00e0 kh\u1edfi \u0111\u1ed9ng l\u1ea1i Apache:<\/p>\n<pre class=\"wp-block-code\"><code>sudo a2dissite 000-default.conf\nsudo a2ensite flaskapi.conf\nsudo systemctl restart apache2<\/code><\/pre>\n<h2 id=\"test-the-api\">Ki\u1ec3m tra API<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#test-the-api\"><\/a><\/h2>\n<p>\u0110i\u1ec3m cu\u1ed1i API c\u1ee7a b\u1ea1n hi\u1ec7n \u0111\u00e3 s\u1eb5n s\u00e0ng \u0111\u1ec3 ch\u1ea5p nh\u1eadn c\u00e1c y\u00eau c\u1ea7u POST c\u00f3 \u0111\u00ednh k\u00e8m h\u00ecnh \u1ea3nh. V\u1ec1 l\u00fd thuy\u1ebft, API s\u1ebd c\u00f3 th\u1ec3 x\u00e1c \u0111\u1ecbnh b\u1ea5t k\u1ef3 h\u00ecnh \u1ea3nh n\u00e0o c\u1ee7a m\u1ed9t ch\u1eef s\u1ed1 vi\u1ebft tay ri\u00eang bi\u1ec7t. Tuy nhi\u00ean, \u0111\u1ec3 c\u00f3 \u0111\u01b0\u1ee3c c\u00e1c d\u1ef1 \u0111o\u00e1n ch\u00ednh x\u00e1c, c\u00e1c b\u01b0\u1edbc ti\u1ec1n x\u1eed l\u00fd m\u00e0 c\u00e1c nh\u00e0 nghi\u00ean c\u1ee9u MNIST s\u1eed d\u1ee5ng ph\u1ea3i \u0111\u01b0\u1ee3c sao ch\u00e9p tr\u00ean m\u1ecdi h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn m\u00f4 h\u00ecnh. \u0110i\u1ec1u n\u00e0y bao g\u1ed3m t\u00ednh to\u00e1n t\u00e2m m\u1eadt \u0111\u1ed9 \u0111i\u1ec3m \u1ea3nh v\u00e0 s\u1eed d\u1ee5ng n\u00f3 \u0111\u1ec3 c\u0103n gi\u1eefa ch\u1eef s\u1ed1 trong h\u00ecnh \u1ea3nh, c\u0169ng nh\u01b0 \u00e1p d\u1ee5ng kh\u1eed r\u0103ng c\u01b0a. \u0110\u1ec3 ki\u1ec3m tra nhanh API, b\u1ea1n c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng&nbsp;<code>curl<\/code>\u0111\u1ec3 g\u1eedi m\u1ed9t h\u00ecnh \u1ea3nh t\u1eeb b\u1ed9 ki\u1ec3m tra MNIST.<\/p>\n<p>1.Nh\u1ea5p chu\u1ed9t ph\u1ea3i v\u00e0 t\u1ea3i h\u00ecnh \u1ea3nh b\u00ean d\u01b0\u1edbi xu\u1ed1ng m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n:<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/7.png\" alt=\"MNIST7\" title=\"MNIST7\"\/><\/figure>\n<p>2.T\u1eeb m\u00e1y c\u1ee5c b\u1ed9 c\u1ee7a b\u1ea1n, s\u1eed d\u1ee5ng&nbsp;<code>curl<\/code>POST h\u00ecnh \u1ea3nh l\u00ean API c\u1ee7a b\u1ea1n. Thay th\u1ebf \u0111\u1ecba ch\u1ec9 IP b\u1eb1ng \u0111\u1ecba ch\u1ec9 IP c\u00f4ng khai c\u1ee7a Linode v\u00e0 cung c\u1ea5p \u0111\u01b0\u1eddng d\u1eabn tuy\u1ec7t \u0111\u1ed1i \u0111\u1ebfn h\u00ecnh \u1ea3nh \u0111\u00e3 t\u1ea3i xu\u1ed1ng thay cho&nbsp;<code>\/path\/to\/7.png<\/code>:<\/p>\n<pre class=\"wp-block-code\"><code>curl -F 'file=@\/path\/to\/7.png' 192.0.2.0\/predict\n<\/code><\/pre>\n<p>N\u1ebfu th\u00e0nh c\u00f4ng, b\u1ea1n s\u1ebd nh\u1eadn \u0111\u01b0\u1ee3c ph\u1ea3n h\u1ed3i JSON x\u00e1c \u0111\u1ecbnh ch\u00ednh x\u00e1c ch\u1eef s\u1ed1 trong h\u00ecnh \u1ea3nh:<\/p>\n<pre class=\"wp-block-code\"><code>{ 'digit' : 7 }\n<\/code><\/pre>\n<p>Y\u00eau c\u1ea7u \u0111\u1ea7u ti\u00ean c\u00f3 th\u1ec3 m\u1ea5t m\u1ed9t kho\u1ea3ng th\u1eddi gian v\u00ec&nbsp;<code>mod_wsgi<\/code>s\u1eed d\u1ee5ng t\u00ednh n\u0103ng t\u1ea3i ch\u1eadm c\u1ee7a \u1ee9ng d\u1ee5ng Flask.<\/p>\n<h2 id=\"next-steps\">C\u00e1c b\u01b0\u1edbc ti\u1ebfp theo<a href=\"https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/#next-steps\"><\/a><\/h2>\n<p>H\u1ea7u h\u1ebft c\u00e1c gi\u1ea3i ph\u00e1p h\u1ecdc m\u00e1y s\u1ea3n xu\u1ea5t \u0111\u1ec1u li\u00ean quan \u0111\u1ebfn m\u1ed9t \u0111\u01b0\u1eddng \u1ed1ng d\u00e0i h\u01a1n so v\u1edbi h\u01b0\u1edbng d\u1eabn n\u00e0y. V\u00ed d\u1ee5, b\u1ea1n c\u00f3 th\u1ec3 th\u00eam m\u1ed9t \u0111i\u1ec3m cu\u1ed1i kh\u00e1c v\u1edbi b\u1ed9 ph\u00e2n lo\u1ea1i h\u1ecdc s\u00e2u \u0111\u1ec3 x\u00e1c \u0111\u1ecbnh c\u00e1c ch\u1eef s\u1ed1 trong m\u1ed9t h\u00ecnh \u1ea3nh l\u1edbn h\u01a1n. M\u1ed7i ch\u1eef s\u1ed1 \u0111\u01b0\u1ee3c ph\u00e1t hi\u1ec7n sau \u0111\u00f3 s\u1ebd \u0111\u01b0\u1ee3c chuy\u1ec3n \u0111\u1ebfn&nbsp;<code>\/predict<\/code>\u0111i\u1ec3m cu\u1ed1i \u0111\u1ec3 \u1ee9ng d\u1ee5ng c\u1ee7a b\u1ea1n c\u00f3 th\u1ec3 di\u1ec5n gi\u1ea3i m\u1ed9t lo\u1ea1t c\u00e1c ch\u1eef s\u1ed1 vi\u1ebft tay, ch\u1eb3ng h\u1ea1n nh\u01b0 s\u1ed1 \u0111i\u1ec7n tho\u1ea1i.<\/p>\n<p>API \u0111\u01b0\u1ee3c t\u1ea1o ra trong h\u01b0\u1edbng d\u1eabn n\u00e0y c\u0169ng thi\u1ebfu nhi\u1ec1u t\u00ednh n\u0103ng m\u00e0 m\u1ed9t \u1ee9ng d\u1ee5ng th\u1ef1c t\u1ebf c\u1ea7n c\u00f3, bao g\u1ed3m x\u1eed l\u00fd l\u1ed7i v\u00e0 x\u1eed l\u00fd c\u00e1c y\u00eau c\u1ea7u h\u00ecnh \u1ea3nh s\u1ed1 l\u01b0\u1ee3ng l\u1edbn. \u0110\u1ec3 d\u1ecbch v\u1ee5 h\u1eefu \u00edch h\u01a1n, n\u00ean \u00e1p d\u1ee5ng to\u00e0n b\u1ed9 ti\u1ec1n x\u1eed l\u00fd \u0111\u01b0\u1ee3c MNIST s\u1eed d\u1ee5ng cho t\u1eebng h\u00ecnh \u1ea3nh.<\/p>\n<p>Ngo\u00e0i ra, h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c g\u1eedi \u0111\u1ebfn API c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c s\u1eed d\u1ee5ng l\u00e0m ngu\u1ed3n d\u1eef li\u1ec7u \u0111\u1ec3 \u0111\u00e0o t\u1ea1o v\u00e0 tinh ch\u1ec9nh m\u00f4 h\u00ecnh c\u1ee7a b\u1ea1n th\u00eam n\u1eefa. Trong tr\u01b0\u1eddng h\u1ee3p n\u00e0y, b\u1ea1n c\u00f3 th\u1ec3 c\u1ea5u h\u00ecnh API \u0111\u1ec3 sao ch\u00e9p t\u1eebng h\u00ecnh \u1ea3nh \u0111\u01b0\u1ee3c g\u1eedi, c\u00f9ng v\u1edbi d\u1ef1 \u0111o\u00e1n c\u1ee7a m\u00f4 h\u00ecnh, v\u00e0o c\u01a1 s\u1edf d\u1eef li\u1ec7u \u0111\u1ec3 ph\u00e2n t\u00edch sau. Xem c\u00e1c li\u00ean k\u1ebft trong&nbsp;<strong>Th\u00f4ng tin th\u00eam<\/strong>&nbsp;n\u1ebfu b\u1ea1n quan t\u00e2m \u0111\u1ebfn c\u00e1c ch\u1ee7 \u0111\u1ec1 n\u00e0y.<\/p>\n<h2 id=\"more-information\">Th\u00f4ng tin th\u00eam<\/h2>\n<p>B\u1ea1n c\u00f3 th\u1ec3 mu\u1ed1n tham kh\u1ea3o c\u00e1c ngu\u1ed3n sau \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin v\u1ec1 ch\u1ee7 \u0111\u1ec1 n\u00e0y. M\u1eb7c d\u00f9 ch\u00fang t\u00f4i cung c\u1ea5p v\u1edbi hy v\u1ecdng r\u1eb1ng ch\u00fang s\u1ebd h\u1eefu \u00edch, nh\u01b0ng xin l\u01b0u \u00fd r\u1eb1ng ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 \u0111\u1ea3m b\u1ea3o t\u00ednh ch\u00ednh x\u00e1c ho\u1eb7c t\u00ednh k\u1ecbp th\u1eddi c\u1ee7a c\u00e1c t\u00e0i li\u1ec7u \u0111\u01b0\u1ee3c l\u01b0u tr\u1eef b\u00ean ngo\u00e0i.<\/p>\n<ul>\n<li><a href=\"https:\/\/conda.io\/miniconda.html\" target=\"_blank\" rel=\"noreferrer noopener\">Con nh\u1ecf<\/a><\/li>\n<li><a href=\"https:\/\/keras.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">T\u00e0i li\u1ec7u Keras<\/a><\/li>\n<li><a href=\"http:\/\/course.fast.ai\/\" target=\"_blank\" rel=\"noreferrer noopener\">Kh\u00f3a h\u1ecdc h\u1ecdc s\u00e2u AI nhanh<\/a><\/li>\n<li><a href=\"https:\/\/www.tensorflow.org\/tutorials\/\" target=\"_blank\" rel=\"noreferrer noopener\">H\u01b0\u1edbng d\u1eabn TensorFlow<\/a><\/li>\n<\/ul>\n<p>Ngu\u1ed3n : https:\/\/www.linode.com\/docs\/guides\/how-to-move-machine-learning-model-to-production\/<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ph\u00e1t tri\u1ec3n, \u0111\u00e0o t\u1ea1o v\u00e0 \u0111i\u1ec1u ch\u1ec9nh m\u00f4 h\u00ecnh h\u1ecdc s\u00e2u cho m\u1ed9t v\u1ea5n \u0111\u1ec1 c\u1ee5 th\u1ec3, ch\u1eb3ng h\u1ea1n nh\u01b0 x\u1eed l\u00fd ng\u00f4n ng\u1eef t\u1ef1 nhi\u00ean (NLP) ho\u1eb7c nh\u1eadn d\u1ea1ng h\u00ecnh \u1ea3nh, \u0111\u00f2i h\u1ecfi th\u1eddi gian v\u00e0 t\u00e0i nguy\u00ean. N\u00f3 c\u0169ng th\u01b0\u1eddng li\u00ean quan \u0111\u1ebfn vi\u1ec7c s\u1eed d\u1ee5ng b\u1ed9 x\u1eed l\u00fd m\u1ea1nh m\u1ebd \u0111\u1ec3 \u0111\u00e0o<\/p>\n","protected":false},"author":1,"featured_media":35491,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[101],"tags":[],"class_list":["post-34870","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-big-data"],"_links":{"self":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/comments?post=34870"}],"version-history":[{"count":0,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/posts\/34870\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media\/35491"}],"wp:attachment":[{"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/media?parent=34870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/categories?post=34870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jupitek.maudemo.vip\/index.php\/wp-json\/wp\/v2\/tags?post=34870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}