{"id":430637,"date":"2024-08-29T09:03:25","date_gmt":"2024-08-29T09:03:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=430637"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=430637","title":{"rendered":"<span>\u041a\u0430\u043a Google \u043f\u043e\u0431\u0435\u0434\u0438\u043b Skynet \u0438\u043b\u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0449\u0443\u0449\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0437\u0430\u0433\u043e\u0432\u043e\u0440. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/837102\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0438\u0441\u0430\u043b<\/a>, \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0410 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0438 \u2013 \u044d\u0442\u043e \u0442\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0410 \u0435\u0449\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 TensorFlow \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e! \u041d\u0443 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u043e\u043d\u0443\u0441\u0430: \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e NPU, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4f0\/d61\/bb1\/4f0d61bb1675275b219b01c574946708.png\" alt=\"\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\" title=\"\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e\" width=\"1402\" height=\"121\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4f0\/d61\/bb1\/4f0d61bb1675275b219b01c574946708.png\"\/><\/p>\n<div><figcaption>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, Hexagon \u2013 \u044d\u0442\u043e Neural Processing Unit \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043d\u0430 \u0431\u0430\u0437\u0435 Snapdragon. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0434\u043b\u044f Android 15! \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u043d\u0430\u0439\u0434\u0443\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0436\u0435\u043b\u0435\u0437\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0435\u0449\u0435). \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e\u043c\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0437\u0430\u0431\u044c\u044e\u0442. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0435 \u0442\u0435\u043e\u0440\u0438\u0438:<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0441\u0442\u0430\u043b\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043c\u0435\u0433\u0430-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 \u0413\u0443\u0433\u043b\u0430, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0441\u0432\u043e\u044e \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f Android \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 (\u043c\u043e\u044f \u0441\u0443\u0434\u043e\u043a\u0443 \u0443\u043c\u0435\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043f\u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438). \u0422\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0435 Huawei \u0431\u0435\u0437 GAPS&#8217;\u043e\u0432. \u0410 \u0435\u0449\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0448\u044c \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0448\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043b\u0435\u0441\u0431\u0438\u044f\u043d\u043e\u043a \u0438 \u0442\u0440\u0430\u043d\u0441\u0433\u0435\u043d\u0434\u0435\u0440\u043e\u0432 \u0432 \u0432\u044b\u0434\u0430\u0447\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0410 \u0442\u043e \u043c\u0430\u043b\u043e \u043b\u0438 \u0447\u0442\u043e \u044e\u0437\u0435\u0440\u044b \u043d\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e\u0442. \u041d\u0435, \u0432\u043e\u0442 \u0432\u0430\u043c \u0442\u043e\u043b\u0435\u0440\u0430\u043d\u0442\u0430\u044f \u0438 \u0438\u043d\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043e\u0440\u0438\u044f \u043d\u043e\u043c\u0435\u0440 2 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435. \u0414\u0436\u043e\u043d \u0438 \u0421\u0430\u0440\u0430 \u041a\u043e\u043d\u043d\u043e\u0440 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u0440\u0438\u0439 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c Skynet \u2013 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u043e\u0433\u043e \u0443\u0431\u0438\u0432\u0430\u0442\u044c. \u041e\u043d\u0438 \u043f\u043e\u0434\u043a\u0438\u043d\u0443\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e Google, \u043f\u043e\u043d\u0430\u0434\u0435\u044f\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0418\u0418 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0432\u044b\u043d\u043e\u0441\u0438\u043c\u043e\u0439 (\u043a\u0430\u043a \u044d\u0442\u0438 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437), \u0447\u0442\u043e \u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u043d\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0444\u0438\u0442 \u2013 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0422800 (\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0438\u0441\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442, \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0447\u0438\u043c) \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f, \u0438 \u043f\u043b\u0430\u043d\u0435\u0442\u0430 \u0431\u044b\u043b\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0430 \u0443\u0436\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u0440\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n<p>\u041c\u043d\u0435 \u0434\u0435\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u043a\u0443\u0434\u0430, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u0438 \u0432\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0435\u0441\u0442\u044c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/810939\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0435 \u00ab\u0418\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e\u00bb.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/812401\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a> \u0438 \u043c\u044b\u0441\u043b\u0438 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u041c\u044b\u0441\u043b\u0438, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/836458\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 Python.<\/p>\n<\/li>\n<li>\n<p> <a href=\"https:\/\/habr.com\/ru\/articles\/837102\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c &#8212;  \u0441 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u043c-\u0445\u0435\u043b\u043f\u0435\u0440\u043e\u043c \u0438\u0437 Android Studio.<\/p>\n<\/li>\n<\/ul>\n<p> \u0410 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0435\u0435 \u043d\u043e\u0432\u044b\u043c \u0442\u0440\u044e\u043a\u0430\u043c. \u041c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0430\u0437, \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435,  \u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a Python&#8217;\u0443.<\/p>\n<h2>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 TensorFlow 2.8<\/h2>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 TensorFlow \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0430 \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0434\u0430\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Colab \u043f\u043e <a href=\"https:\/\/www.tensorflow.org\/lite\/examples\/on_device_training\/overview\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 TensorFlow. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435, \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2.8. \u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 PyCharm, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0430\u0443\u043d\u0433\u0440\u0435\u0439\u0434\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e TF \u0432 \u0441\u0430\u043c\u043e\u043c Google Colab. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code class=\"python\">!pip install tensorflow==2.8.0<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 Colab \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0434. \u042f \u0442\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u0435\u0441\u0441\u0438\u0438 \u044f \u0437\u0430\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u043f\u043e\u043b\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>Downloading tensorflow-2.8.0-cp310-cp310-manylinux2010_x86_64.whl (497.6 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 497.6\/497.6 MB 3.1 MB\/s eta 0:00:00 Downloading tf_estimator_nightly-2.8.0.dev2021122109-py2.py3-none-any.whl (462 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 462.5\/462.5 kB 18.1 MB\/s eta 0:00:00 Downloading keras-2.8.0-py2.py3-none-any.whl (1.4 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 1.4\/1.4 MB 29.8 MB\/s eta 0:00:00 Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 42.6\/42.6 kB 2.7 MB\/s eta 0:00:00 Downloading tensorboard-2.8.0-py3-none-any.whl (5.8 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 5.8\/5.8 MB 52.1 MB\/s eta 0:00:00 Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB) Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 4.9\/4.9 MB 48.1 MB\/s eta 0:00:00 Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 781.3\/781.3 kB 31.2 MB\/s eta 0:00:00<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438<\/h2>\n<p>\u041a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 TensorFlow Lite \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0430\u0437. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0435\u043b\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u041c\u044b \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0433\u043b\u0430 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432\u0435\u0441\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u0438\u0437\u0432\u043d\u0435 \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 TensorFlow Lite.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c TensorFlow \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 (<strong>train<\/strong>),<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (<strong>infer<\/strong>). \u0423\u0431\u0435\u0440\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430 \u0431\u044b\u043b\u0430 (1, 4) &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u044f\u0434, 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0435\u043c (None, 4) &#8212; \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u044f\u0434\u043e\u0432 \u043f\u043e 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u043e\u0432 (<strong>save<\/strong>), \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435,<br \/> \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432 (restore) \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432 (<strong>restore<\/strong>) \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">class Model(tf.Module):      def __init__(self):         super().__init__()         self.model = tf.keras.Sequential([             tf.keras.layers.Dense(64, activation='relu'),             tf.keras.layers.Dense(64, activation='relu'),             tf.keras.layers.Dense(1)         ])          self.model.compile(loss=tf.keras.losses.MeanAbsoluteError(),                            optimizer=tf.keras.optimizers.Adam(0.001),                            run_eagerly=True)      @tf.function(input_signature=[         tf.TensorSpec([None, 4], tf.float32),         tf.TensorSpec([None, ], tf.float32),     ])     def train(self, x, y):         with tf.GradientTape() as tape:             prediction = self.model(x)             loss = self.model.loss(y, prediction)         gradients = tape.gradient(loss, self.model.trainable_variables)         self.model.optimizer.apply_gradients(             zip(gradients, self.model.trainable_variables))         result = {\"loss\": loss}         return result      @tf.function(input_signature=[         tf.TensorSpec([None, 4], tf.float32),     ])     def infer(self, x):         return self.model(x)      @tf.function(input_signature=[tf.TensorSpec(shape=[], dtype=tf.string)])     def save(self, checkpoint_path):         tensor_names = [weight.name for weight in self.model.weights]         tensors_to_save = [weight.read_value() for weight in self.model.weights]         tf.raw_ops.Save(             filename=checkpoint_path, tensor_names=tensor_names,             data=tensors_to_save, name='save')         return {             \"checkpoint_path\": checkpoint_path         }       @tf.function(input_signature=[tf.TensorSpec(shape=[], dtype=tf.string)])     def restore(self, checkpoint_path):         restored_tensors = {}         for var in self.model.weights:             restored = tf.raw_ops.Restore(                 file_pattern=checkpoint_path, tensor_name=var.name, dt=var.dtype,                 name='restore')             var.assign(restored)             restored_tensors[var.name] = restored         return restored_tensors      def get_version(self):         return \"1.0\"<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u0447\u0435\u0437 \u0441\u043b\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c: \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u043e\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0442\u0438? \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u0443\u0440\u0441\u043e\u0432. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043d\u044b\u0435. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0435\u043b\u0435\u0439? \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<pre><code class=\"python\">import keras layer = keras.layers.Normalization(axis=-1) X = df[['id', 'cur_rating', 'n_repeat', 's_lapsed']] y = df['result'] layer.adapt(X) print(f\"\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c: \\n{layer.adapt_mean.numpy()}\") print(f\"\u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c: \\n{layer.adapt_variance.numpy()}\") print(\"\u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u0438\u0437 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f, \u0438\u043d\u0430\u0447\u0435 \u0432\u0430\u0441 \u0436\u0434\u0443\u0442 \u0447\u0430\u0441\u044b \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a :)\") X_norm = layer(X).numpy() print(f\"\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \\n{X_norm}\")<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c:  [1.3949933e+03 1.4210526e+01 3.5873375e+00 3.0993320e+06] \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c:  [1.1811639e+06 1.2539240e+00 1.4706143e+01 4.6547405e+12] \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:  [[-1.2826425   0.7050209  -0.6746891   1.5294912 ]  [-1.2817223   0.7050209  -0.6746891   0.24558088]  [-1.2808022   0.7050209  -0.6746891   0.24507335]  ...  [ 2.5515018  -0.18800573  0.36837405 -0.8482623 ]  [ 2.559783   -0.18800573  0.62913984 -0.8701883 ]  [ 2.560703   -0.18800573  1.672203   -0.87582266]]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0434\u0435\u043b\u0438<\/h2>\n<p>\u0414\u0435\u043b\u0438\u043c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0438 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c epochs (\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043d\u0430\u0434\u043e: \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u043e\u0440\u0440\u0435\u043b\u044f\u0446\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432\u044b\u0441\u043e\u043a\u0430 \u0438 \u0441\u0435\u0442\u044c \u0441\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e, \u0430 \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u043c \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0434\u0435\u043b\u0438) \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435.<\/p>\n<pre><code class=\"python\">NUM_EPOCH = 100 m = Model() losses = np.zeros(NUM_EPOCH) epochs = np.arange(1, NUM_EPOCH + 1, 1) for i in range(NUM_EPOCH):     result = m.train(x_train, y_train)     losses[i] = result['loss'] plt.plot(epochs, losses, label='\u041f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435') plt.ylim([0, max(plt.ylim())]) plt.xlabel('Epoch') plt.ylabel('Loss') plt.legend();<\/code><\/pre>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8e2\/5af\/a46\/8e25afa462879a96fd9483a671d84802.png\" alt=\"\u0432\u0440\u043e\u0434\u0435 \u043d\u043e\u0440\u043c\" title=\"\u0432\u0440\u043e\u0434\u0435 \u043d\u043e\u0440\u043c\" width=\"567\" height=\"432\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e2\/5af\/a46\/8e25afa462879a96fd9483a671d84802.png\"\/><\/p>\n<div><figcaption>\u0432\u0440\u043e\u0434\u0435 \u043d\u043e\u0440\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e save \u043d\u0430\u0448\u0435\u0439 \u043d\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438. \u041c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 <strong>TensorFlow \u0421heckpoint<\/strong>. Checkpoint \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u043f\u0443\u0441\u0442\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0441\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0438\u043b\u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0441 \u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430, \u0433\u0434\u0435 \u043c\u044b \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0438\u0441\u044c \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<pre><code class=\"python\">m.save('model.ckpt') {'checkpoint_path': &lt;tf.Tensor: shape=(), dtype=string, numpy=b'model.ckpt'&gt;}<\/code><\/pre>\n<h2>\u041a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 TensorFlow Lite<\/h2>\n<p>\u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043c\u043e\u0434\u0435\u043b\u044c TensorFlow \u0438 \u043f\u0440\u043e\u0432\u0435\u043b\u0438 \u0435\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u0414\u0430\u043b\u0435\u0435 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 TF Lite c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c TensorFlow Lite \u043d\u0430 Android: <strong>train<\/strong>, <strong>infer<\/strong>, <strong>save<\/strong>, <strong>restore<\/strong>. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 &#8212; \u0435\u0441\u043b\u0438 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u0442\u043e\u0434\u044b, \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u0447\u043a\u0438 @tf.function, \u0442\u043e \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043c\u043e\u0434\u0435\u043b\u044c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, def get_version()). \u0412\u0441\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u044b TensorFlow. <\/p>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 &#8212; \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043c \u0432 \u0442\u0435\u043b\u0435\u0444\u043e\u043d.<\/p>\n<pre><code class=\"python\">SAVED_MODEL_DIR = \"saved_model\" #m = Model() \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0431\u0435\u0437 \u0432\u0435\u0441\u043e\u0432  tf.saved_model.save(     m,     SAVED_MODEL_DIR,     signatures={         'train':             m.train.get_concrete_function(),         'infer':             m.infer.get_concrete_function(),         'save':             m.save.get_concrete_function(),         'restore':             m.restore.get_concrete_function(),     })  # Convert the model converter = tf.lite.TFLiteConverter.from_saved_model(SAVED_MODEL_DIR) converter.target_spec.supported_ops = [     tf.lite.OpsSet.TFLITE_BUILTINS,  # enable TensorFlow Lite ops.     tf.lite.OpsSet.SELECT_TF_OPS  # enable TensorFlow ops. ] converter.experimental_enable_resource_variables = True tflite_model = converter.convert() with open('ruLearnModel.tflite', 'wb') as f:     f.write(tflite_model)<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u043e\u0434\u043d\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0432 \u0434\u0432\u0443\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0438\u0437 \u044f\u0447\u0435\u0439\u043a\u0438, \u0433\u0434\u0435 \u043c\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e \u2013 \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438). \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0441\u0442\u044c.<\/p>\n<pre><code class=\"python\">test_data = np.array([[-1.2826425, 0.7050209, -0.6746891, 1.5294912],                       [2.559783, -0.18800573,  0.62913984, -0.8701883 ],                       [ 2.560703,   -0.18800573,  1.672203,   -0.87582266],                       [-1.2808022, 0.7050209,  -0.6746891, 0.24507335]],dtype='float32') y_lite = infer(x=test_data) print(f\"\u0432 TF Lite \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438: \\n {list(y_lite.values())[0]}\") y_original = m.infer(x=test_data) print(f\"\u0432 TF \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438: \\n {y_original.numpy()}\")<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\u0432 TF Lite \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438:   [[1.0156401 ]  [1.0106058 ]  [0.92316914]  [1.0001839 ]] \u0432 TF \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438:   [[1.0156401 ]  [1.0106058 ]  [0.92316914]  [1.0001839 ]]<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u043e\u0431\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0434\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u041c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0432 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438 \ud83d\ude42<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/839346\/\"> https:\/\/habr.com\/ru\/articles\/839346\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u043e \u043c\u0435\u0440\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u044f \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0432 \u0442\u0435\u043c\u0443 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445, \u044f \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0449\u0443\u0449\u0430\u043b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0437\u0430\u0433\u043e\u0432\u043e\u0440. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/837102\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0438\u0441\u0430\u043b<\/a>, \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0438 \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u0447\u0435\u0437\u0430\u0442\u044c \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434. \u0410 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0438 \u2013 \u044d\u0442\u043e \u0442\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u043e \u0435\u0441\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u044e\u0442 \u043b\u044e\u0434\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0434\u0430\u0442\u0430\u0441\u0435\u0442\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0448\u0430\u0433 \u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439. \u0410 \u0435\u0449\u0435, \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 TensorFlow \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0438 \u0438 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u0443\u0436\u0435 \u0434\u0430\u0432\u043d\u043e! \u041d\u0443 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0431\u043e\u043d\u0443\u0441\u0430: \u043f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0441\u043a\u043e\u0440\u043e NPU, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043b\u044f \u043d\u0430\u0441 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0431\u0435\u0441\u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e<\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044f \u043f\u043e\u043d\u0438\u043c\u0430\u044e, Hexagon \u2013 \u044d\u0442\u043e Neural Processing Unit \u0432 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u043d\u0430 \u0431\u0430\u0437\u0435 Snapdragon. \u041f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0434\u043b\u044f Android 15! \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043e\u043a \u043d\u0430\u0439\u0434\u0443\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c API \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0436\u0435\u043b\u0435\u0437\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0439 (\u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u0437\u043d\u0430\u044e \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0435\u0449\u0435). \u0410 \u0432\u043e\u0442 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u044b \u043f\u043e\u043c\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438 \u0437\u0430\u0431\u044c\u044e\u0442. \u0412 \u0441\u0432\u044f\u0437\u0438 \u0441 \u044d\u0442\u0438\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b \u0434\u0432\u0435 \u0442\u0435\u043e\u0440\u0438\u0438:<\/p>\n<ol>\n<li>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u0446\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u044e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043c\u043e\u0434\u0435\u043b\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0445 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0441\u0442\u0430\u043b\u043e \u0435\u0449\u0435 \u043e\u0434\u043d\u0438\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u043c\u0435\u0433\u0430-\u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439 \u0442\u0438\u043f\u0430 \u0413\u0443\u0433\u043b\u0430, \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u0435 \u0446\u0438\u0444\u0440 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u0432 \u0441\u0432\u043e\u044e \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f Android \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434 (\u043c\u043e\u044f \u0441\u0443\u0434\u043e\u043a\u0443 \u0443\u043c\u0435\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0438\u0433\u0440\u0443 \u043f\u043e \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438). \u0422\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u043f\u043b\u0430\u043d\u0448\u0435\u0442\u0435 Huawei \u0431\u0435\u0437 GAPS&#8217;\u043e\u0432. \u0410 \u0435\u0449\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0448\u044c \u043c\u043e\u0434\u0435\u043b\u0438, \u0442\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0448\u044c \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u043b\u0435\u0441\u0431\u0438\u044f\u043d\u043e\u043a \u0438 \u0442\u0440\u0430\u043d\u0441\u0433\u0435\u043d\u0434\u0435\u0440\u043e\u0432 \u0432 \u0432\u044b\u0434\u0430\u0447\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0410 \u0442\u043e \u043c\u0430\u043b\u043e \u043b\u0438 \u0447\u0442\u043e \u044e\u0437\u0435\u0440\u044b \u043d\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u044e\u0442. \u041d\u0435, \u0432\u043e\u0442 \u0432\u0430\u043c \u0442\u043e\u043b\u0435\u0440\u0430\u043d\u0442\u0430\u044f \u0438 \u0438\u043d\u043a\u043b\u044e\u0437\u0438\u0432\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435, \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043e\u0440\u0438\u044f \u043d\u043e\u043c\u0435\u0440 2 \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0431\u043e\u043b\u044c\u0448\u0435. \u0414\u0436\u043e\u043d \u0438 \u0421\u0430\u0440\u0430 \u041a\u043e\u043d\u043d\u043e\u0440 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u0440\u0438\u0439 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u043f\u043e\u0431\u0435\u0434\u0438\u0442\u044c Skynet \u2013 \u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u043e\u0433\u043e \u0443\u0431\u0438\u0432\u0430\u0442\u044c. \u041e\u043d\u0438 \u043f\u043e\u0434\u043a\u0438\u043d\u0443\u043b\u0438 \u0431\u0430\u0437\u043e\u0432\u0443\u044e \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442\u0430 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e Google, \u043f\u043e\u043d\u0430\u0434\u0435\u044f\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u0435\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0418\u0418 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0432\u044b\u043d\u043e\u0441\u0438\u043c\u043e\u0439 (\u043a\u0430\u043a \u044d\u0442\u0438 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Google \u0443\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0440\u0430\u0437), \u0447\u0442\u043e \u0442\u0435\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u0433\u043d\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0444\u0438\u0442 \u2013 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0442\u043e\u0440 \u0422800 (\u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0438\u0441\u043a\u0443\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u043b\u043b\u0435\u043a\u0442, \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0447\u0438\u043c) \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f, \u0438 \u043f\u043b\u0430\u043d\u0435\u0442\u0430 \u0431\u044b\u043b\u0430 \u0441\u043f\u0430\u0441\u0435\u043d\u0430 \u0443\u0436\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u0440\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438<\/h2>\n<p>\u041c\u043d\u0435 \u0434\u0435\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u043a\u0443\u0434\u0430, \u044f \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e \u0441\u0432\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0433\u043e\u0434\u0430 \u0438 \u0432\u0441\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u0435\u0441\u0442\u044c \u043d\u0430 \u0425\u0430\u0431\u0440\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/810939\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u043e\u043f\u0438\u0441\u0430\u043d\u043e, \u043a\u0430\u043a \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u043e\u043d\u043a\u0443\u0440\u0441\u0435 \u00ab\u0418\u043d\u0436\u0435\u043d\u0435\u0440\u044b \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e\u00bb.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/812401\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430<\/a> \u0438 \u043c\u044b\u0441\u043b\u0438 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435. \u041c\u044b\u0441\u043b\u0438, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/836458\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 Python.<\/p>\n<\/li>\n<li>\n<p> <a href=\"https:\/\/habr.com\/ru\/articles\/837102\/\" rel=\"noopener noreferrer nofollow\">\u0417\u0434\u0435\u0441\u044c<\/a> \u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c &#8212;  \u0441 \u0433\u043e\u0442\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u043c-\u0445\u0435\u043b\u043f\u0435\u0440\u043e\u043c \u0438\u0437 Android Studio.<\/p>\n<\/li>\n<\/ul>\n<p> \u0410 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0443\u0447\u0438\u0442\u044c \u0435\u0435 \u043d\u043e\u0432\u044b\u043c \u0442\u0440\u044e\u043a\u0430\u043c. \u041c\u043e\u0434\u0435\u043b\u044c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0430\u0437, \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435,  \u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a Python&#8217;\u0443.<\/p>\n<h2>\u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439: \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 TensorFlow 2.8<\/h2>\n<p>\u041d\u0430 \u0441\u0430\u0439\u0442\u0435 TensorFlow \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0435\u0441\u0442\u044c \u043e\u0431\u0443\u0447\u0430\u043b\u043a\u0430 \u0434\u043b\u044f \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0434\u0430\u0436\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 Colab \u043f\u043e <a href=\"https:\/\/www.tensorflow.org\/lite\/examples\/on_device_training\/overview\" rel=\"noopener noreferrer nofollow\">\u0441\u0441\u044b\u043b\u043a\u0435<\/a>. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 TensorFlow. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f\u0447\u0435\u0439\u043a\u0435, \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 2.8. \u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u044d\u0442\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0438\u0437 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432 PyCharm, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0434\u0430\u0443\u043d\u0433\u0440\u0435\u0439\u0434\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e TF \u0432 \u0441\u0430\u043c\u043e\u043c Google Colab. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code class=\"python\">!pip install tensorflow==2.8.0<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 Colab \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0434. \u042f \u0442\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u0441\u0435\u0441\u0441\u0438\u0438 \u044f \u0437\u0430\u043a\u0430\u0447\u0438\u0432\u0430\u044e \u043f\u043e\u043b\u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u043e\u0432, \u043d\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/p>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>Downloading tensorflow-2.8.0-cp310-cp310-manylinux2010_x86_64.whl (497.6 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 497.6\/497.6 MB 3.1 MB\/s eta 0:00:00 Downloading tf_estimator_nightly-2.8.0.dev2021122109-py2.py3-none-any.whl (462 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 462.5\/462.5 kB 18.1 MB\/s eta 0:00:00 Downloading keras-2.8.0-py2.py3-none-any.whl (1.4 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 1.4\/1.4 MB 29.8 MB\/s eta 0:00:00 Downloading Keras_Preprocessing-1.1.2-py2.py3-none-any.whl (42 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 42.6\/42.6 kB 2.7 MB\/s eta 0:00:00 Downloading tensorboard-2.8.0-py3-none-any.whl (5.8 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 5.8\/5.8 MB 52.1 MB\/s eta 0:00:00 Downloading google_auth_oauthlib-0.4.6-py2.py3-none-any.whl (18 kB) Downloading tensorboard_data_server-0.6.1-py3-none-manylinux2010_x86_64.whl (4.9 MB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 4.9\/4.9 MB 48.1 MB\/s eta 0:00:00 Downloading tensorboard_plugin_wit-1.8.1-py3-none-any.whl (781 kB)    \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 781.3\/781.3 kB 31.2 MB\/s eta 0:00:00<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0428\u0430\u0433 \u0432\u0442\u043e\u0440\u043e\u0439: \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438<\/h2>\n<p>\u041a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u043c\u043e\u0434\u0435\u043b\u044f\u0445 TensorFlow Lite \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430 \u0440\u0430\u0437. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0435\u043b\u0438, \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u041c\u044b \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u043c \u044d\u0442\u0443 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0434\u0435\u043b\u044c \u043c\u043e\u0433\u043b\u0430 \u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u043d\u0430\u043c \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0443, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0432\u0435\u0441\u043e\u0432 \u043c\u043e\u0434\u0435\u043b\u0438. \u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043c\u043e\u0434\u0435\u043b\u044c \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0438\u043c \u0438\u0437\u0432\u043d\u0435 \u043f\u0440\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 \u043c\u043e\u0434\u0435\u043b\u0438 TensorFlow Lite.<\/p>\n<p>\u0421\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043c\u043e\u0434\u0435\u043b\u044c TensorFlow \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<ul>\n<li>\n<p>\u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u043e\u0434\u0435\u043b\u0438 (<strong>train<\/strong>),<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 (<strong>infer<\/strong>). \u0423\u0431\u0435\u0440\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435 \u0435\u0433\u043e \u0444\u043e\u0440\u043c\u0430 \u0431\u044b\u043b\u0430 (1, 4) &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u0440\u044f\u0434, 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0441\u0435\u0439\u0447\u0430\u0441 \u0441\u0434\u0435\u043b\u0430\u0435\u043c (None, 4) &#8212; \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u044f\u0434\u043e\u0432 \u043f\u043e 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. \u041c\u043e\u0434\u0435\u043b\u044c \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430,<\/p>\n<\/li>\n<li>\n<p>\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u043e\u0432 (<strong>save<\/strong>), \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435,<br \/> \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432 (restore) \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f,<\/p>\n<\/li>\n<li>\n<p>\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0445 \u0432\u0435\u0441\u043e\u0432 (<strong>restore<\/strong>) \u0432 \u043c\u043e\u0434\u0435\u043b\u044c \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"python\">class Model(tf.Module):      def __init__(self):         super().__init__()         self.model = tf.keras.Sequential([             tf.keras.layers.Dense(64, activation='relu'),             tf.keras.layers.Dense(64, activation='relu'),             tf.keras.layers.Dense(1)         ])          self.model.compile(loss=tf.keras.losses.MeanAbsoluteError(),                            optimizer=tf.keras.optimizers.Adam(0.001),                            run_eagerly=True)      @tf.function(input_signature=[         tf.TensorSpec([None, 4], tf.float32),         tf.TensorSpec([None, ], tf.float32),     ])     def train(self, x, y):         with tf.GradientTape() as tape:             prediction = self.model(x)             loss = self.model.loss(y, prediction)         gradients = tape.gradient(loss, self.model.trainable_variables)         self.model.optimizer.apply_gradients(             zip(gradients, self.model.trainable_variables))         result = {\"loss\": loss}         return result      @tf.function(input_signature=[         tf.TensorSpec([None, 4], tf.float32),     ])     def infer(self, x):         return self.model(x)      @tf.function(input_signature=[tf.TensorSpec(shape=[], dtype=tf.string)])     def save(self, checkpoint_path):         tensor_names = [weight.name for weight in self.model.weights]         tensors_to_save = [weight.read_value() for weight in self.model.weights]         tf.raw_ops.Save(             filename=checkpoint_path, tensor_names=tensor_names,             data=tensors_to_save, name='save')         return {             \"checkpoint_path\": checkpoint_path         }       @tf.function(input_signature=[tf.TensorSpec(shape=[], dtype=tf.string)])     def restore(self, checkpoint_path):         restored_tensors = {}         for var in self.model.weights:             restored = tf.raw_ops.Restore(                 file_pattern=checkpoint_path, tensor_name=var.name, dt=var.dtype,                 name='restore')             var.assign(restored)             restored_tensors[var.name] = restored         return restored_tensors      def get_version(self):         return \"1.0\"<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0432\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0438\u0437 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u0441\u0447\u0435\u0437 \u0441\u043b\u043e\u0439 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438. \u042f \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u043f\u043e\u0441\u043e\u0431\u0430, \u043a\u0430\u043a \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0435\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c: \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0434\u0430\u0442\u0430\u0441\u0435\u0442 \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0432 \u0441\u043b\u043e\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0442\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u043a\u0430\u043a \u0431\u044b\u0442\u044c \u0441 \u043f\u0435\u0440\u0435\u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0442\u0438? \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0435\u043b\u044c \u043d\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0432 \u043c\u043e\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043a\u0443\u0440\u0441\u043e\u0432. \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043d\u044b\u0435. \u0425\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0435\u043b\u0435\u0439? \u043d\u0435\u0442, \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a, \u043d\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432.<\/p>\n<pre><code class=\"python\">import keras layer = keras.layers.Normalization(axis=-1) X = df[['id', 'cur_rating', 'n_repeat', 's_lapsed']] y = df['result'] layer.adapt(X) print(f\"\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c: \\n{layer.adapt_mean.numpy()}\") print(f\"\u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c: \\n{layer.adapt_variance.numpy()}\") print(\"\u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u0440\u0435\u043d\u044c \u0438\u0437 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f, \u0438\u043d\u0430\u0447\u0435 \u0432\u0430\u0441 \u0436\u0434\u0443\u0442 \u0447\u0430\u0441\u044b \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a :)\") X_norm = layer(X).numpy() print(f\"\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439: \\n{X_norm}\")<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0421\u043a\u0440\u044b\u0442\u044b\u0439 \u0442\u0435\u043a\u0441\u0442<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>\u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c:  [1.3949933e+03 1.4210526e+01 3.5873375e+00 3.0993320e+06] \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c:  [1.1811639e+06 1.2539240e+00 1.4706143e+01 4.6547405e+12] \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439:  [[-1.2826425   0.7050209  -0.6746891   1.5294912 ]  [-1.2817223   0.7050209  -0.6746891   0.24558088]  [-1.2808022   0.7050209  -0.6746891   0.24507335]  ...  [ 2.5515018<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-430637","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430637","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=430637"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/430637\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=430637"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=430637"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=430637"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}