{"id":13747,"date":"2024-01-03T00:15:10","date_gmt":"2024-01-02T20:45:10","guid":{"rendered":"https:\/\/rasanegar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/"},"modified":"2024-01-03T00:15:10","modified_gmt":"2024-01-02T20:45:10","slug":"%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras","status":"publish","type":"post","link":"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/","title":{"rendered":"\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc TensorFlow\/Keras"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0633\u0631\u0641\u0635\u0644\u0647\u0627\u06cc \u0645\u0637\u0644\u0628<\/p>\n<\/div><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%85%d8%b9%d8%b1%d9%81%db%8c\" >\u0645\u0639\u0631\u0641\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%da%a9%d9%84%d8%a7%d8%b3_callback_%d9%88_%d8%b1%d9%88%d8%b4_%d9%87%d8%a7%db%8c_%d8%a2%d9%86\" >\u06a9\u0644\u0627\u0633 Callback \u0648 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0622\u0646<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a2%d9%85%d9%88%d8%b2%d8%b4%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\" >\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0622\u0645\u0648\u0632\u0634\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a7%d8%b1%d8%b2%db%8c%d8%a7%d8%a8%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\" >\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%be%db%8c%d8%b4%e2%80%8c%d8%a8%db%8c%d9%86%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c_%d8%a8%d8%b1%da%af%d8%b4%d8%aa_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3\" >\u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062a\u0645\u0627\u0633<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d8%a8%d8%a7_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_lambacallback\" >\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 LambaCallback<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a2%d9%85%d9%88%d8%b2%d8%b4_%d8%aa%d8%b5%d9%88%db%8c%d8%b1%d8%b3%d8%a7%d8%b2%db%8c_%d9%85%d8%af%d9%84\" >\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0628\u0631\u0627\u06cc \u0622\u0645\u0648\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631\u0633\u0627\u0632\u06cc \u0645\u062f\u0644<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/rasanegaar.com\/blog\/%d8%b1%d8%a7%d9%87%d9%86%d9%85%d8%a7%db%8c-%d9%86%d9%88%d8%b4%d8%aa%d9%86-%d8%aa%d9%85%d8%a7%d8%b3-%d9%87%d8%a7%db%8c-%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c-tensorflow-keras\/#%d9%86%d8%aa%db%8c%d8%ac%d9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span><p> <br \/>\n<\/p>\n<div><noscript><\/noscript><\/p>\n<h2 id=\"introduction\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%b9%d8%b1%d9%81%db%8c\"><\/span>\u0645\u0639\u0631\u0641\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0645\u062f\u0644 Keras \u0634\u0645\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0631\u0641\u062a\u0627\u0631 \u062e\u0627\u0635\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0647\u0631 \u062f\u0648\u0631\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.  \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u0647 \u0647\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Callbacks \u0627\u0633\u062a.<\/p>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c Callback \u0647\u0627 \u062a\u0648\u0627\u0628\u0639\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0648\u0642\u0648\u0639 \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u0646\u062f \u0648 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0628\u0647 \u062a\u0648\u0627\u0628\u0639 \u062f\u06cc\u06af\u0631 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u0646\u062f.  \u062f\u0631 \u0645\u0648\u0631\u062f Keras\u060c \u0622\u0646\u0647\u0627 \u0627\u0628\u0632\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0631\u062f\u0646 \u0631\u0641\u062a\u0627\u0631 \u0645\u062f\u0644 \u0634\u0645\u0627 \u0647\u0633\u062a\u0646\u062f &#8211; \u062e\u0648\u0627\u0647 \u062f\u0631 \u062d\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u0627\u0633\u062a\u0646\u062a\u0627\u062c.  \u0628\u0631\u062e\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645\u060c \u062a\u062f\u0627\u0648\u0645 \u0645\u062f\u0644\u060c \u062a\u0648\u0642\u0641 \u0632\u0648\u062f\u0647\u0646\u06af\u0627\u0645 \u06cc\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0631\u062e \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc.  \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0627\u0631\u0633\u0627\u0644 \u0644\u06cc\u0633\u062a\u06cc \u0627\u0632 Callbacks \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u0634\u0648\u062f <code>keras.Model.fit()<\/code>\u060c<code>keras.Model.evaluate()<\/code> \u06cc\u0627 <code>keras.Model.predict()<\/code>.<\/p>\n<p>\u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0648\u0627\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u062a\u062f\u0627\u0648\u0644 \u0628\u0631\u0627\u06cc \u067e\u0627\u0633\u062e\u06af\u0648\u06cc\u06cc \u0628\u0647 \u062a\u0645\u0627\u0633 \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632: \u0627\u0635\u0644\u0627\u062d \u0646\u0631\u062e \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc\u060c \u062b\u0628\u062a \u06af\u0632\u0627\u0631\u0634\u060c \u0646\u0638\u0627\u0631\u062a \u0648 \u062a\u0648\u0642\u0641 \u0632\u0648\u062f\u0647\u0646\u06af\u0627\u0645 \u0622\u0645\u0648\u0632\u0634.  Keras \u062f\u0627\u0631\u0627\u06cc \u062a\u0639\u062f\u0627\u062f\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646 \u062f\u0627\u062e\u0644\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062a\u0641\u0635\u06cc\u0644 \u0645\u06cc \u0628\u0627\u0634\u062f <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/keras.io\/api\/callbacks\/\"><br \/>\u062f\u0631 \u0645\u0633\u062a\u0646\u062f\u0627\u062a<\/a>.<\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0628\u0631\u062e\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u062e\u0627\u0635 \u062a\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0633\u0641\u0627\u0631\u0634\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u0646\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0627\u062c\u0631\u0627\u06cc \u06af\u0631\u0645 \u06a9\u0631\u062f\u0646 \u0646\u0631\u062e \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0628\u0627 \u0648\u0627\u067e\u0627\u0634\u06cc \u06a9\u0633\u06cc\u0646\u0648\u0633 \u067e\u0633 \u0627\u0632 \u06cc\u06a9 \u062f\u0648\u0631\u0647 \u0646\u06af\u0647\u062f\u0627\u0631\u06cc \u062f\u0631 \u062d\u0627\u0644 \u062d\u0627\u0636\u0631 \u062f\u0627\u062e\u0644\u06cc \u0646\u06cc\u0633\u062a\u060c \u0627\u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06af\u0633\u062a\u0631\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u0645\u0648\u0631\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0642\u0631\u0627\u0631 \u0645\u06cc\u200c\u06af\u06cc\u0631\u062f.<\/p>\n<h2 id=\"callbackclassanditsmethods\"><span class=\"ez-toc-section\" id=\"%da%a9%d9%84%d8%a7%d8%b3_callback_%d9%88_%d8%b1%d9%88%d8%b4_%d9%87%d8%a7%db%8c_%d8%a2%d9%86\"><\/span>\u06a9\u0644\u0627\u0633 Callback \u0648 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0622\u0646<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Keras \u06cc\u06a9 \u06a9\u0644\u0627\u0633 callback \u062e\u0627\u0635 \u062f\u0627\u0631\u062f\u060c <code>keras.callbacks.Callback<\/code>\u060c \u0628\u0627 \u0631\u0648\u0634 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u062f\u0631 \u062d\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u062a\u0633\u062a \u0648 \u0627\u0633\u062a\u0646\u0628\u0627\u0637 \u0646\u0627\u0645 \u0628\u0631\u062f \u0631\u0648\u06cc \u0633\u0637\u062d \u062c\u0647\u0627\u0646\u06cc\u060c \u062f\u0633\u062a\u0647 \u0627\u06cc \u06cc\u0627 \u062f\u0648\u0631\u0647 \u0627\u06cc.  \u0628\u0647 \u0645\u0646\u0638\u0648\u0631. \u0648\u0627\u0633\u0647 \u0627\u06cc\u0646\u06a9\u0647. \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 <em>\u0627\u06cc\u062c\u0627\u062f \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<\/em>\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0632\u06cc\u0631 \u06a9\u0644\u0627\u0633 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u06cc\u0646 \u0645\u062a\u062f\u0647\u0627 \u0631\u0627 \u0644\u063a\u0648 \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0627\u06cc\u0646 <code>keras.callbacks.Callback<\/code> \u06a9\u0644\u0627\u0633 \u0633\u0647 \u0646\u0648\u0639 \u0645\u062a\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ul>\n<li>\u0631\u0648\u0634 \u0647\u0627\u06cc \u062c\u0647\u0627\u0646\u06cc: \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u06cc\u0627 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f <code>fit()<\/code>\u060c <code>evaluate()<\/code> \u0648 <code>predict()<\/code>.<\/li>\n<li>\u0631\u0648\u0634 \u0647\u0627\u06cc \u0633\u0637\u062d \u062f\u0633\u062a\u0647 \u0627\u06cc: \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u06cc\u0627 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u067e\u0631\u062f\u0627\u0632\u0634 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/li>\n<li>\u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0633\u0637\u062d \u062f\u0648\u0631\u0647: \u062f\u0631 \u0627\u0628\u062a\u062f\u0627 \u06cc\u0627 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0646\u0627\u0645\u06cc\u062f\u0647 \u0645\u06cc\u200c\u0634\u0648\u0646\u062f.<\/li>\n<\/ul>\n<div class=\"alert alert-note\">\n<div class=\"flex\">\n<div class=\"flex-shrink-0 mr-3\"><\/div>\n<div class=\"w-full\">\n<p><strong>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<\/strong> \u0647\u0631 \u0631\u0648\u0634 \u0628\u0647 a \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u062f <code>dict<\/code> \u062a\u0645\u0627\u0633 \u06af\u0631\u0641\u062a <code>logs<\/code>.  \u06a9\u0644\u06cc\u062f\u0647\u0627 \u0648 \u0645\u0642\u0627\u062f\u06cc\u0631 <code>logs<\/code> \u0632\u0645\u06cc\u0646\u0647 \u0627\u06cc \u0647\u0633\u062a\u0646\u062f &#8211; \u0622\u0646\u0647\u0627 \u0628\u0633\u062a\u06af\u06cc \u062f\u0627\u0631\u0646\u062f \u0631\u0648\u06cc \u0631\u0648\u06cc\u062f\u0627\u062f\u06cc \u06a9\u0647 \u0645\u062a\u062f \u0631\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.  \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0627\u06cc\u0646\u060c \u0645\u0627 \u0628\u0647 \u0645\u062f\u0644 \u062f\u0627\u062e\u0644 \u0647\u0631 \u0645\u062a\u062f \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0645\u0633\u06cc\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645 <code>self.model<\/code> \u0635\u0641\u062a.<\/p>\n<\/p><\/div><\/div><\/div>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0633\u0647 \u0646\u0645\u0648\u0646\u0647 \u062a\u0645\u0627\u0633 \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645 &#8211; \u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u060c \u06cc\u06a9\u06cc \u0628\u0631\u0627\u06cc \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0648 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc.  \u0647\u0631 \u06a9\u062f\u0627\u0645 \u062e\u0648\u0627\u0647\u062f \u0634\u062f print \u062f\u0631 \u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u0645\u062f\u0644 \u0645\u0627 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f \u0648 \u0628\u0647 \u0686\u0647 \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645.  \u0627\u06cc\u0646 \u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u0627\u06cc\u0646\u06a9\u0647 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u062f\u0631 \u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u0627\u0646\u062c\u0627\u0645 \u062f\u0627\u062f \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06cc\u06a9 \u0645\u062f\u0644 \u0627\u0633\u0628\u0627\u0628 \u0628\u0627\u0632\u06cc \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">import<\/span> tensorflow <span class=\"hljs-keyword\">as<\/span> tf\n<span class=\"hljs-keyword\">from<\/span> tensorflow <span class=\"hljs-keyword\">import<\/span> keras\n<span class=\"hljs-keyword\">import<\/span> numpy <span class=\"hljs-keyword\">as<\/span> np\n\nmodel = keras.Sequential()\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">10<\/span>, input_dim = <span class=\"hljs-number\">1<\/span>, activation=<span class=\"hljs-string\">'relu'<\/span>))\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">10<\/span>, activation=<span class=\"hljs-string\">'relu'<\/span>))\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">1<\/span>))\nmodel.<span class=\"hljs-built_in\">compile<\/span>(\n    optimizer=keras.optimizers.RMSprop(learning_rate=<span class=\"hljs-number\">0.1<\/span>),\n    loss = <span class=\"hljs-string\">\"mean_squared_error\"<\/span>,\n    metrics = (<span class=\"hljs-string\">\"mean_absolute_error\"<\/span>)\n)\n\nx = np.random.uniform(low = <span class=\"hljs-number\">0<\/span>, high = <span class=\"hljs-number\">10<\/span>, size = <span class=\"hljs-number\">1000<\/span>)\ny = x**<span class=\"hljs-number\">2<\/span>\nx_train, x_test = (x(:<span class=\"hljs-number\">900<\/span>),x(<span class=\"hljs-number\">900<\/span>:))\ny_train, y_test = (y(:<span class=\"hljs-number\">900<\/span>),y(<span class=\"hljs-number\">900<\/span>:))\n<\/code><\/pre>\n<h3 id=\"customtrainingcallback\"><span class=\"ez-toc-section\" id=\"%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a2%d9%85%d9%88%d8%b2%d8%b4%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\"><\/span>\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0622\u0645\u0648\u0632\u0634\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u0648\u0644\u06cc\u0646 \u062a\u0645\u0627\u0633 \u0645\u0627 \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u062d\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u0648\u062f.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0632\u06cc\u0631 \u06a9\u0644\u0627\u0633 <code>Callback<\/code> \u06a9\u0644\u0627\u0633:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TrainingCallback<\/span>(<span class=\"hljs-params\">keras.callbacks.Callback<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.tabulation = {<span class=\"hljs-string\">\"train\"<\/span>:<span class=\"hljs-string\">\"\"<\/span>, <span class=\"hljs-string\">'batch'<\/span>: <span class=\"hljs-string\">\" \"<\/span>*<span class=\"hljs-number\">8<\/span>, <span class=\"hljs-string\">'epoch'<\/span>:<span class=\"hljs-string\">\" \"<\/span>*<span class=\"hljs-number\">4<\/span>}\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_begin<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'train'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Training!\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_batch_begin<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_batch_end<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>End of Batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_epoch_begin<\/span>(<span class=\"hljs-params\">self, epoch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'epoch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Epoch <span class=\"hljs-subst\">{epoch}<\/span> of training\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_epoch_end<\/span>(<span class=\"hljs-params\">self, epoch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'epoch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>End of Epoch <span class=\"hljs-subst\">{epoch}<\/span> of training\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_end<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'train'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Finishing training!\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n<\/code><\/pre>\n<p>\u0627\u06af\u0631 \u0647\u0631 \u06cc\u06a9 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0648\u0634\u200c\u0647\u0627 \u0644\u063a\u0648 \u0646\u0634\u0648\u062f &#8211; \u0631\u0641\u062a\u0627\u0631 \u067e\u06cc\u0634\u200c\u0641\u0631\u0636 \u0645\u0627\u0646\u0646\u062f \u0642\u0628\u0644 \u0627\u062f\u0627\u0645\u0647 \u0645\u06cc\u200c\u06cc\u0627\u0628\u062f.  \u062f\u0631 \u0645\u062b\u0627\u0644 \u0645\u0627 &#8211; \u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc print \u06af\u0632\u0627\u0631\u0634 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u0648 \u0633\u0637\u062d\u06cc \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0641\u0631\u0627\u062e\u0648\u0627\u0646 \u0627\u0639\u0645\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f\u060c \u0628\u0627 \u062a\u0648\u0631\u0641\u062a\u06af\u06cc \u0645\u0646\u0627\u0633\u0628.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u062e\u0631\u0648\u062c\u06cc \u0647\u0627 \u0628\u06cc\u0646\u062f\u0627\u0632\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\">model.fit(\n    x_train,\n    y_train,\n    batch_size=<span class=\"hljs-number\">500<\/span>,\n    epochs=<span class=\"hljs-number\">2<\/span>,\n    verbose=<span class=\"hljs-number\">0<\/span>,\n    callbacks=(TrainingCallback()),\n)\n<\/code><\/pre>\n<pre><code class=\"hljs\">Training!\navailable logs: {}\n    Epoch 0 of training\n    available logs: {}\n        Batch 0\n        available logs: {}\n        End of Batch 0\n        available logs: {'loss': 2172.373291015625, 'mean_absolute_error': 34.79669952392578}\n        Batch 1\n        available logs: {}\n        End of Batch 1\n        available logs: {'loss': 2030.1309814453125, 'mean_absolute_error': 33.30256271362305}\n    End of Epoch 0 of training\n    available logs: {'loss': 2030.1309814453125, 'mean_absolute_error': 33.30256271362305}\n    Epoch 1 of training\n    available logs: {}\n        Batch 0\n        available logs: {}\n        End of Batch 0\n        available logs: {'loss': 1746.2772216796875, 'mean_absolute_error': 30.268001556396484}\n        Batch 1\n        available logs: {}\n        End of Batch 1\n        available logs: {'loss': 1467.36376953125, 'mean_absolute_error': 27.10252571105957}\n    End of Epoch 1 of training\n    available logs: {'loss': 1467.36376953125, 'mean_absolute_error': 27.10252571105957}\nFinishing training!\navailable logs: {'loss': 1467.36376953125, 'mean_absolute_error': 27.10252571105957}\n\n&lt;keras.callbacks.History at 0x7f8bce314c10&gt;\n<\/code><\/pre>\n<p>\u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u062f\u0631 \u0647\u0631 \u0645\u0631\u062d\u0644\u0647 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0645\u062f\u0644 \u062f\u0631 \u062d\u0627\u0644 \u0627\u0646\u062c\u0627\u0645 \u0686\u0647 \u06a9\u0627\u0631\u06cc \u0627\u0633\u062a \u0648 \u0628\u0647 \u06a9\u062f\u0627\u0645 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645.  \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0647\u0631 \u062f\u0633\u062a\u0647 \u0648 \u062f\u0648\u0631\u0647\u060c \u0645\u0627 \u0628\u0647 \u062a\u0627\u0628\u0639 \u0636\u0631\u0631 \u062f\u0631\u0648\u0646 \u0646\u0645\u0648\u0646\u0647 \u0648 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u0645\u062f\u0644 \u062e\u0648\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645.<\/p>\n<h3 id=\"customevaluationcallback\"><span class=\"ez-toc-section\" id=\"%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a7%d8%b1%d8%b2%db%8c%d8%a7%d8%a8%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c\"><\/span>\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0622\u0646 \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u0645 <code>Model.evaluate()<\/code> \u0631\u0648\u0634.  \u0645\u06cc \u0628\u06cc\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u0628\u0647 \u062a\u0627\u0628\u0639 \u0636\u0631\u0631 \u0648 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u0622\u0646 \u0632\u0645\u0627\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645 \u0648 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0628\u0647 \u062a\u0644\u0641\u0627\u062a \u0648 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u06a9\u0644\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TestingCallback<\/span>(<span class=\"hljs-params\">keras.callbacks.Callback<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n          self.tabulation = {<span class=\"hljs-string\">\"test\"<\/span>:<span class=\"hljs-string\">\"\"<\/span>, <span class=\"hljs-string\">'batch'<\/span>: <span class=\"hljs-string\">\" \"<\/span>*<span class=\"hljs-number\">8<\/span>}\n      \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_test_begin<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'test'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f'<span class=\"hljs-subst\">{tab}<\/span>Evaluating!'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f'<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_test_end<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'test'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f'<span class=\"hljs-subst\">{tab}<\/span>Finishing evaluation!'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f'<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>'<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_test_batch_begin<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_test_batch_end<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>End of batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n<\/code><\/pre>\n<pre><code class=\"hljs\">res = model.evaluate(\n    x_test, y_test, batch_size=<span class=\"hljs-number\">100<\/span>, verbose=<span class=\"hljs-number\">0<\/span>, callbacks=(TestingCallback())\n)\n<\/code><\/pre>\n<pre><code class=\"hljs\">Evaluating!\navailable logs: {}\n        Batch 0\n        available logs: {}\n        End of batch 0\n        available logs: {'loss': 382.2723083496094, 'mean_absolute_error': 14.069927215576172}\nFinishing evaluation!\navailable logs: {'loss': 382.2723083496094, 'mean_absolute_error': 14.069927215576172}\n<\/code><\/pre>\n<h3 id=\"custompredictioncallback\"><span class=\"ez-toc-section\" id=\"%d9%be%db%8c%d8%b4%e2%80%8c%d8%a8%db%8c%d9%86%db%8c_%d8%b3%d9%81%d8%a7%d8%b1%d8%b4%db%8c_%d8%a8%d8%b1%da%af%d8%b4%d8%aa_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3\"><\/span>\u067e\u06cc\u0634\u200c\u0628\u06cc\u0646\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0628\u0631\u06af\u0634\u062a \u0628\u0647 \u062a\u0645\u0627\u0633<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u062f <code>Model.predict()<\/code> \u0631\u0648\u0634.  \u062a\u0648\u062c\u0647 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646 \u0647\u0631 \u062f\u0633\u062a\u0647 \u0645\u0627 \u0628\u0647 \u062e\u0631\u0648\u062c\u06cc \u0647\u0627\u06cc \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0634\u062f\u0647 \u0645\u062f\u0644 \u062e\u0648\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u062f\u0627\u0631\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">PredictionCallback<\/span>(<span class=\"hljs-params\">keras.callbacks.Callback<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>\n        self.tabulation = {<span class=\"hljs-string\">\"prediction\"<\/span>:<span class=\"hljs-string\">\"\"<\/span>, <span class=\"hljs-string\">'batch'<\/span>: <span class=\"hljs-string\">\" \"<\/span>*<span class=\"hljs-number\">8<\/span>}\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_predict_begin<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'prediction'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>Predicting!\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_predict_end<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'prediction'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>End of Prediction!\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_predict_batch_begin<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs: <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_predict_batch_end<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        tab = self.tabulation(<span class=\"hljs-string\">'batch'<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>End of batch <span class=\"hljs-subst\">{batch}<\/span>\"<\/span>)\n        <span class=\"hljs-built_in\">print<\/span>(<span class=\"hljs-string\">f\"<span class=\"hljs-subst\">{tab}<\/span>available logs:\\n <span class=\"hljs-subst\">{logs}<\/span>\"<\/span>)\n<\/code><\/pre>\n<pre><code class=\"hljs\">res = model.predict(x_test(:<span class=\"hljs-number\">10<\/span>),\n                    verbose = <span class=\"hljs-number\">0<\/span>, \n                    callbacks=(PredictionCallback()))\n<\/code><\/pre>\n<pre><code class=\"hljs\">Predicting!\navailable logs: {}\n        batch 0\n        available logs: {}\n        End of batch 0\n        available logs:\n {'outputs': array((( 7.743822),\n       (27.748264),\n       (33.082104),\n       (26.530678),\n       (27.939169),\n       (18.414223),\n       (42.610645),\n       (36.69335 ),\n       (13.096557),\n       (37.120853)), dtype=float32)}\nEnd of Prediction!\navailable logs: {}\n<\/code><\/pre>\n<p>\u0628\u0627 \u0627\u06cc\u0646\u0647\u0627 &#8211; \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0641\u062a\u0627\u0631 \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0646\u0638\u0627\u0631\u062a \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u06cc\u0627 \u0641\u0631\u0622\u06cc\u0646\u062f\u0647\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u060c \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u0627\u0633\u062a\u0646\u062a\u0627\u062c \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u062f.  \u06cc\u06a9 \u062c\u0627\u06cc\u06af\u0632\u06cc\u0646 \u0628\u0631\u0627\u06cc \u0637\u0628\u0642\u0647 \u0628\u0646\u062f\u06cc \u0641\u0631\u0639\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>LambdaCallback<\/code>.<\/p>\n<h2 id=\"usinglambacallback\"><span class=\"ez-toc-section\" id=\"%d8%a8%d8%a7_%d8%a7%d8%b3%d8%aa%d9%81%d8%a7%d8%af%d9%87_%d8%a7%d8%b2_lambacallback\"><\/span>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 LambaCallback<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u06a9\u0627\u0644 \u0628\u06a9 \u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u062f\u0631 Keras \u0627\u0633\u062a <code>LambdaCallback<\/code> \u06a9\u0644\u0627\u0633  \u0627\u06cc\u0646 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u062a\u0627\u0628\u0639\u06cc \u0631\u0627 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f \u06a9\u0647 \u0631\u0648\u0634 \u0631\u0641\u062a\u0627\u0631 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u0646 \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f!  \u0628\u0647 \u06cc\u06a9 \u0645\u0639\u0646\u0627\u060c \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0627\u0632 \u0647\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u062f\u0644\u062e\u0648\u0627\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06a9\u0644\u0627\u0633 \u062f\u0627\u0631\u0627\u06cc \u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0627\u062e\u062a\u06cc\u0627\u0631\u06cc \u0627\u0633\u062a:<br \/>&#8211;<code>on_epoch_begin<\/code><\/p>\n<ul>\n<li><code>on_epoch_end<\/code><\/li>\n<li><code>on_batch_begin<\/code><\/li>\n<li><code>on_batch_end<\/code><\/li>\n<li><code>on_train_begin<\/code><\/li>\n<li><code>on_train_end<\/code><\/li>\n<\/ul>\n<p>\u0647\u0631 \u067e\u0627\u0631\u0627\u0645\u062a\u0631 \u0645\u06cc \u067e\u0630\u06cc\u0631\u062f <em>\u06cc\u06a9 \u062a\u0627\u0628\u0639<\/em> \u06a9\u0647 \u062f\u0631 \u0631\u0648\u06cc\u062f\u0627\u062f \u0645\u062f\u0644 \u0645\u0631\u0628\u0648\u0637\u0647 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u067e\u0633 \u0627\u0632 \u067e\u0627\u06cc\u0627\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u06cc\u06a9 \u062a\u0645\u0627\u0633 \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0631\u0642\u0631\u0627\u0631 \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">import<\/span> smtplib\n<span class=\"hljs-keyword\">from<\/span> email.message <span class=\"hljs-keyword\">import<\/span> EmailMessage\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">send_email<\/span>(<span class=\"hljs-params\">logs<\/span>):<\/span> \n    msg = EmailMessage()\n    content = <span class=\"hljs-string\">f\"\"\"The model has finished training.\"\"\"<\/span>\n    <span class=\"hljs-keyword\">for<\/span> key, value <span class=\"hljs-keyword\">in<\/span> logs.items():\n      content = content + <span class=\"hljs-string\">f\"\\n<span class=\"hljs-subst\">{key}<\/span>:<span class=\"hljs-subst\">{value:<span class=\"hljs-number\">.2<\/span>f}<\/span>\"<\/span>\n    msg.set_content(content)\n    msg(<span class=\"hljs-string\">'Subject'<\/span>) = <span class=\"hljs-string\">f'Training report'<\/span>\n    msg(<span class=\"hljs-string\">'From'<\/span>) = <span class=\"hljs-string\">'(email\u00a0protected)'<\/span>\n    msg(<span class=\"hljs-string\">'To'<\/span>) = <span class=\"hljs-string\">'receiver-email'<\/span>\n\n    s = smtplib.SMTP(<span class=\"hljs-string\">'smtp.gmail.com'<\/span>, <span class=\"hljs-number\">587<\/span>)\n    s.starttls()\n    s.login(<span class=\"hljs-string\">\"(email\u00a0protected)\"<\/span>, <span class=\"hljs-string\">\"your-gmail-app-password\"<\/span>)\n    s.send_message(msg)\n    s.quit()\n\nlambda_send_email = <span class=\"hljs-keyword\">lambda<\/span> logs : send_email(logs)\n\nemail_callback = keras.callbacks.LambdaCallback(on_train_end = lambda_send_email)\n\nmodel.fit(\n    x_train,\n    y_train,\n    batch_size=<span class=\"hljs-number\">100<\/span>,\n    epochs=<span class=\"hljs-number\">1<\/span>,\n    verbose=<span class=\"hljs-number\">0<\/span>,\n    callbacks=(email_callback),\n)\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u062a\u0645\u0627\u0633 \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code> LambdaCallback<\/code>\u060c \u0641\u0642\u0637 \u0628\u0627\u06cc\u062f \u062a\u0627\u0628\u0639\u06cc \u0631\u0627 \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0634\u0648\u062f \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645\u060c \u0622\u0646 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a a \u0628\u067e\u06cc\u0686\u0627\u0646\u06cc\u0645 <code>lambda<\/code> \u062a\u0627\u0628\u0639 \u0648 \u0627\u0631\u0633\u0627\u0644 \u0622\u0646 \u0628\u0647<br \/><code>LambdaCallback<\/code>  \u06a9\u0644\u0627\u0633 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u067e\u0627\u0631\u0627\u0645\u062a\u0631<\/p>\n<h2 id=\"acallbackforvisualizingmodeltraining\"><span class=\"ez-toc-section\" id=\"%d9%be%d8%a7%d8%b3%d8%ae_%d8%a8%d9%87_%d8%aa%d9%85%d8%a7%d8%b3_%d8%a8%d8%b1%d8%a7%db%8c_%d8%a2%d9%85%d9%88%d8%b2%d8%b4_%d8%aa%d8%b5%d9%88%db%8c%d8%b1%d8%b3%d8%a7%d8%b2%db%8c_%d9%85%d8%af%d9%84\"><\/span>\u067e\u0627\u0633\u062e \u0628\u0647 \u062a\u0645\u0627\u0633 \u0628\u0631\u0627\u06cc \u0622\u0645\u0648\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631\u0633\u0627\u0632\u06cc \u0645\u062f\u0644<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634\u060c \u0645\u062b\u0627\u0644\u06cc \u0627\u0632 \u06cc\u06a9 callback \u0633\u0641\u0627\u0631\u0634\u06cc \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u06cc\u0645 \u06a9\u0647 \u0628\u0627\u0639\u062b \u0645\u06cc \u0634\u0648\u062f \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646\u06cc \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062f\u0644 \u0645\u0627 \u062f\u0631 \u0637\u0648\u0644 \u0622\u0645\u0648\u0632\u0634 \u0628\u0647\u0628\u0648\u062f \u06cc\u0627\u0628\u062f.  \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0645\u0642\u0627\u062f\u06cc\u0631 \u0644\u0627\u06af \u0647\u0627 \u0631\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0647\u0631 \u062f\u0633\u062a\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u0633\u067e\u0633 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u062d\u0644\u0642\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646 \u06cc\u06a9 \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 <code>matplotlib<\/code>.<\/p>\n<p>\u0628\u0647 \u0645\u0646\u0638\u0648\u0631 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062a\u062c\u0633\u0645\u060c \u062a\u0644\u0641\u0627\u062a \u0648 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u062f\u0631 \u0645\u0642\u06cc\u0627\u0633 \u06af\u0632\u0627\u0631\u0634 \u0631\u0633\u0645 \u0645\u06cc \u0634\u0648\u0646\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">import<\/span> matplotlib.pyplot <span class=\"hljs-keyword\">as<\/span> plt\n<span class=\"hljs-keyword\">import<\/span> numpy <span class=\"hljs-keyword\">as<\/span> np\n<span class=\"hljs-keyword\">from<\/span> matplotlib.animation <span class=\"hljs-keyword\">import<\/span> FuncAnimation\n<span class=\"hljs-keyword\">from<\/span> IPython <span class=\"hljs-keyword\">import<\/span> display\n\n<span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">TrainingAnimationCallback<\/span>(<span class=\"hljs-params\">keras.callbacks.Callback<\/span>):<\/span>\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">__init__<\/span>(<span class=\"hljs-params\">self, duration = <span class=\"hljs-number\">40<\/span>, fps = <span class=\"hljs-number\">1000<\/span>\/<span class=\"hljs-number\">25<\/span><\/span>):<\/span>\n        self.duration = duration\n        self.fps = fps\n        self.logs_history = ()\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">set_plot<\/span>(<span class=\"hljs-params\">self<\/span>):<\/span>   \n        self.figure = plt.figure()\n        \n        plt.xticks(\n            <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">0<\/span>,self.params(<span class=\"hljs-string\">'steps'<\/span>)*self.params(<span class=\"hljs-string\">'epochs'<\/span>), self.params(<span class=\"hljs-string\">'steps'<\/span>)),\n            <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">0<\/span>,self.params(<span class=\"hljs-string\">'epochs'<\/span>)))\n        plt.xlabel(<span class=\"hljs-string\">'Epoch'<\/span>)\n        plt.ylabel(<span class=\"hljs-string\">'Loss &amp; Metrics ($Log_{10}$ scale)'<\/span>)\n\n        self.plot = {}\n        <span class=\"hljs-keyword\">for<\/span> metric <span class=\"hljs-keyword\">in<\/span> self.model.metrics_names:\n          self.plot(metric), = plt.plot((),(), label = metric)\n          \n        max_y = (<span class=\"hljs-built_in\">max<\/span>(log.values()) <span class=\"hljs-keyword\">for<\/span> log <span class=\"hljs-keyword\">in<\/span> self.logs_history)\n        \n        self.title = plt.title(<span class=\"hljs-string\">f'batches:0'<\/span>)\n        plt.xlim(<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-built_in\">len<\/span>(self.logs_history)) \n        plt.ylim(<span class=\"hljs-number\">0<\/span>,<span class=\"hljs-built_in\">max<\/span>(max_y))\n\n           \n        plt.legend(loc=<span class=\"hljs-string\">'upper right'<\/span>)\n  \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">animation_function<\/span>(<span class=\"hljs-params\">self,frame<\/span>):<\/span>\n        batch = frame % self.params(<span class=\"hljs-string\">'steps'<\/span>)\n        self.title.set_text(<span class=\"hljs-string\">f'batch:<span class=\"hljs-subst\">{batch}<\/span>'<\/span>)\n        x = <span class=\"hljs-built_in\">list<\/span>(<span class=\"hljs-built_in\">range<\/span>(frame))\n        \n        <span class=\"hljs-keyword\">for<\/span> metric <span class=\"hljs-keyword\">in<\/span> self.model.metrics_names:\n            y = (log(metric) <span class=\"hljs-keyword\">for<\/span> log <span class=\"hljs-keyword\">in<\/span> self.logs_history(:frame))\n            self.plot(metric).set_data(x,y)\n        \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_batch_end<\/span>(<span class=\"hljs-params\">self, batch, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        logarithm_transform = <span class=\"hljs-keyword\">lambda<\/span> item: (item(<span class=\"hljs-number\">0<\/span>), np.log(item(<span class=\"hljs-number\">1<\/span>)))\n        logs = <span class=\"hljs-built_in\">dict<\/span>(<span class=\"hljs-built_in\">map<\/span>(logarithm_transform,logs.items()))\n        self.logs_history.append(logs)\n       \n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">on_train_end<\/span>(<span class=\"hljs-params\">self, logs=<span class=\"hljs-literal\">None<\/span><\/span>):<\/span>\n        self.set_plot()\n        num_frames = <span class=\"hljs-built_in\">int<\/span>(self.duration*self.fps)\n        num_batches = self.params(<span class=\"hljs-string\">'steps'<\/span>)*self.params(<span class=\"hljs-string\">'epochs'<\/span>)\n        selected_batches = <span class=\"hljs-built_in\">range<\/span>(<span class=\"hljs-number\">0<\/span>, num_batches , num_batches\/\/num_frames )\n        interval = <span class=\"hljs-number\">1000<\/span>*(<span class=\"hljs-number\">1<\/span>\/self.fps)\n        anim_created = FuncAnimation(self.figure, \n                                     self.animation_function,\n                                     frames=selected_batches,\n                                     interval=interval)\n        video = anim_created.to_html5_video()\n        \n        html = display.HTML(video)\n        display.display(html)\n        plt.close()\n<\/code><\/pre>\n<p>\u0645\u0627 \u0627\u0632 \u0647\u0645\u0627\u0646 \u0645\u062f\u0644 \u0642\u0628\u0644\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u0645\u0627 \u0628\u0627 \u0646\u0645\u0648\u0646\u0647 \u0647\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u06cc \u0628\u06cc\u0634\u062a\u0631:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">import<\/span> tensorflow <span class=\"hljs-keyword\">as<\/span> tf\n<span class=\"hljs-keyword\">from<\/span> tensorflow <span class=\"hljs-keyword\">import<\/span> keras\n<span class=\"hljs-keyword\">import<\/span> numpy <span class=\"hljs-keyword\">as<\/span> np\n\nmodel = keras.Sequential()\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">10<\/span>, input_dim = <span class=\"hljs-number\">1<\/span>, activation=<span class=\"hljs-string\">'relu'<\/span>))\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">10<\/span>, activation=<span class=\"hljs-string\">'relu'<\/span>))\nmodel.add(keras.layers.Dense(<span class=\"hljs-number\">1<\/span>))\nmodel.<span class=\"hljs-built_in\">compile<\/span>(\n    optimizer=keras.optimizers.RMSprop(learning_rate=<span class=\"hljs-number\">0.1<\/span>),\n    loss = <span class=\"hljs-string\">\"mean_squared_error\"<\/span>,\n    metrics = (<span class=\"hljs-string\">\"mean_absolute_error\"<\/span>)\n)\n\n<span class=\"hljs-function\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title\">create_sample<\/span>(<span class=\"hljs-params\">sample_size, train_test_proportion = <span class=\"hljs-number\">0.9<\/span><\/span>):<\/span>\n    x = np.random.uniform(low = <span class=\"hljs-number\">0<\/span>, high = <span class=\"hljs-number\">10<\/span>, size = sample_size)\n    y = x**<span class=\"hljs-number\">2<\/span>\n    train_test_split = <span class=\"hljs-built_in\">int<\/span>(sample_size*train_test_proportion)\n    x_train, x_test = (x(:train_test_split),x(train_test_split:))\n    y_train, y_test = (y(:train_test_split),y(train_test_split:))\n    <span class=\"hljs-keyword\">return<\/span> (x_train,x_test,y_train,y_test)\n\nx_train,x_test,y_train,y_test = create_sample(<span class=\"hljs-number\">35200<\/span>)\n\n\nmodel.fit(\n    x_train,\n    y_train,\n    batch_size=<span class=\"hljs-number\">32<\/span>,\n    epochs=<span class=\"hljs-number\">2<\/span>,\n    verbose=<span class=\"hljs-number\">0<\/span>,\n    callbacks=(TrainingAnimationCallback()),\n)\n<\/code><\/pre>\n<p>\u062e\u0631\u0648\u062c\u06cc \u0645\u0627 \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646\u06cc \u0627\u0632 \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u0648 \u062a\u0627\u0628\u0639 \u0636\u0631\u0631 \u0627\u0633\u062a \u06a9\u0647 \u062f\u0631 \u0637\u06cc \u0622\u0645\u0648\u0632\u0634 \u062a\u063a\u06cc\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u0646\u062f process:<\/p>\n<p><center><br \/>\n<video controls=\"\" autoplay=\"\"><source src=\"https:\/\/s3.stackabuse.com\/media\/articles\/guide-to-writing-custom-tensorflow-keras-callbacks-1.mp4\" type=\"video\/mp4\"><\/source><\/p>\n<p>  \u0645\u0631\u0648\u0631\u06af\u0631 \u0634\u0645\u0627 \u0627\u0632 \u0648\u06cc\u062f\u06cc\u0648\u06cc HTML \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0646\u0645\u06cc \u06a9\u0646\u062f.<\/video><br \/>\n<\/center><\/p>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\"><\/span>\u0646\u062a\u06cc\u062c\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0631\u0627\u0647\u0646\u0645\u0627\u060c \u0646\u06af\u0627\u0647\u06cc \u0628\u0647 \u0627\u062c\u0631\u0627\u06cc callback \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u062f\u0631 Keras \u0627\u0646\u062f\u0627\u062e\u062a\u0647 \u0627\u06cc\u0645.<br \/>\u062f\u0648 \u06af\u0632\u06cc\u0646\u0647 \u0628\u0631\u0627\u06cc \u0627\u062c\u0631\u0627\u06cc \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f &#8211; \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0632\u06cc\u0631 \u06a9\u0644\u0627\u0633 \u0628\u0646\u062f\u06cc <code>keras.callbacks.Callback<\/code> \u06a9\u0644\u0627\u0633 \u06cc\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632  <code>keras.callbacks.LambdaCallback<\/code> \u06a9\u0644\u0627\u0633<\/p>\n<p>\u0645\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0639\u0645\u0644\u06cc \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0631\u0627 \u062f\u06cc\u062f\u0647 \u0627\u06cc\u0645 <code>LambdaCallback<\/code>\u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u06cc\u06a9 \u0627\u06cc\u0645\u06cc\u0644 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u062d\u0644\u0642\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc\u060c \u0648 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0632\u06cc\u0631 \u0631\u062f\u0647 \u0628\u0646\u062f\u06cc <code>Callback<\/code> \u06a9\u0644\u0627\u0633\u06cc \u06a9\u0647 \u06cc\u06a9 \u0627\u0646\u06cc\u0645\u06cc\u0634\u0646 \u0627\u0632 \u062d\u0644\u0642\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0627\u06af\u0631\u0686\u0647 Keras \u062f\u0627\u0631\u0627\u06cc \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u062a\u0645\u0627\u0633\u200c\u0647\u0627\u06cc \u062f\u0627\u062e\u0644\u06cc \u0627\u0633\u062a\u060c \u0627\u0645\u0627 \u062f\u0627\u0646\u0633\u062a\u0646 \u0631\u0648\u0634 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 callback \u0633\u0641\u0627\u0631\u0634\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u062e\u0627\u0635\u200c\u062a\u0631 \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u062f.<\/p>\n<\/div>\n<p><script>\n                        !function(f,b,e,v,n,t,s)\n                        {if(f.fbq)return;n=f.fbq=function(){n.callMethod?\n                        n.callMethod.apply(n,arguments):n.queue.push(arguments)};\n                        if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';\n                        n.queue=();t=b.createElement(e);t.async=!0;\n                        t.src=v;s=b.getElementsByTagName(e)(0);\n                        s.parentNode.insertBefore(t,s)}(window, document,'script',\n                        'https:\/\/connect.facebook.net\/en_US\/fbevents.js');\n                        fbq('init', '525232124909042');\n                        fbq('track', 'PageView');\n                    <\/script>    (\u0628\u0631\u0686\u0633\u0628\u200c\u0647\u0627 \u0628\u0647 \u062a\u0631\u062c\u0645\u0647)# python<br \/>\n<br \/><br \/>\n<br \/>\u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u062f\u0631 1403-01-03 00:15:03<br \/>\n<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;center&quot;,&quot;id&quot;:&quot;13747&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628&quot;,&quot;legend&quot;:&quot;0\\\/5 (0 \u0631\u0627\u06cc)&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u0631\u0627\u0647\u0646\u0645\u0627\u06cc \u0646\u0648\u0634\u062a\u0646 \u062a\u0645\u0627\u0633 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc TensorFlow\\\/Keras&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ({count} \u0631\u0627\u06cc)&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            <span class=\"kksr-muted\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 6<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span>\u0645\u0639\u0631\u0641\u06cc \u0641\u0631\u0636 \u06a9\u0646\u06cc\u062f \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0645\u062f\u0644 Keras \u0634\u0645\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06cc\u0627 \u067e\u06cc\u0634 \u0628\u06cc\u0646\u06cc \u0631\u0641\u062a\u0627\u0631 \u062e\u0627\u0635\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f. \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u062e\u0648\u0627\u0647\u06cc\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u0647\u0631 \u062f\u0648\u0631\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f. \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0627\u0647 \u0647\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Callbacks \u0627\u0633\u062a. \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0644\u06cc\u060c Callback \u0647\u0627 \u062a\u0648\u0627\u0628\u0639\u06cc \u0647\u0633\u062a\u0646\u062f \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0648\u0642\u0648\u0639 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":9162,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1743,620],"tags":[],"class_list":["post-13747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python","category-programming"],"acf":[],"_links":{"self":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/13747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/comments?post=13747"}],"version-history":[{"count":0,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/13747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media\/9162"}],"wp:attachment":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media?parent=13747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/categories?post=13747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/tags?post=13747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}