{"id":64419,"date":"2024-05-30T20:48:46","date_gmt":"2024-05-30T17:18:46","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/beyond-imagination-the-potential-of-ai-in-digital-artistry-1o9k\/"},"modified":"2024-05-30T20:48:46","modified_gmt":"2024-05-30T17:18:46","slug":"beyond-imagination-the-potential-of-ai-in-digital-artistry-1o9k","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/beyond-imagination-the-potential-of-ai-in-digital-artistry-1o9k\/","title":{"rendered":"\u0641\u0631\u0627\u062a\u0631 \u0627\u0632 \u062a\u0635\u0648\u0631: \u067e\u062a\u0627\u0646\u0633\u06cc\u0644 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u062f\u0631 \u0647\u0646\u0631 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644"},"content":{"rendered":"<div data-article-id=\"1870599\" id=\"article-body\">\n<p>\u0633\u0641\u0631\u06cc \u0647\u06cc\u062c\u0627\u0646 \u0627\u0646\u06af\u06cc\u0632 \u0628\u0647 \u0642\u0644\u0645\u0631\u0648 \u0647\u0646\u0631 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u062e\u06cc\u0644 \u0628\u0627 \u0641\u0646\u0627\u0648\u0631\u06cc \u0631\u0648\u0628\u0631\u0648 \u0645\u06cc \u0634\u0648\u062f! <br \/>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0622\u0631\u0632\u0648 \u062f\u0627\u0634\u062a\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0635\u0641\u062d\u0627\u062a \u0631\u0645\u0627\u0646 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u0628\u0647 \u0634\u062e\u0635\u06cc\u062a \u0647\u0627 \u062c\u0627\u0646 \u0628\u062f\u0647\u06cc\u062f \u06cc\u0627 <br \/>\u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u062e\u0627\u0631\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0628\u0647 \u0630\u0647\u0646 \u0645\u062a\u0628\u0627\u062f\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u061f  \u0645\u0639\u0631\u0641\u06cc \u062f\u0646\u06cc\u0627\u06cc \u062e\u06cc\u0631\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0633\u0646\u062a\u0632 \u0645\u062a\u0646 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631\u060c <br \/>\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0633\u0627\u0632\u0646\u062f\u06af\u0627\u0646 \u062c\u0646 \u0628\u0627 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u06a9\u0644\u0645\u0627\u062a \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0634\u0627\u0647\u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc \u062c\u0630\u0627\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f.  \u0628\u0627 \u0627\u0644\u0647\u0627\u0645 \u0627\u0632 \u062a\u0644\u0641\u06cc\u0642 \u0647\u0646\u0631\u060c \u062f\u0627\u0633\u062a\u0627\u0646 \u0633\u0631\u0627\u06cc\u06cc\u060c <br \/>\u0648 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0639\u0645\u06cc\u0642 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u060c \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0646\u0648\u0622\u0648\u0631\u0627\u0646\u0647 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0628\u06cc \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627\u0632\u06cc\u060c \u0647\u0646\u0631\u0645\u0646\u062f\u0627\u0646 \u0648 \u0630\u0647\u0646 \u0647\u0627\u06cc \u062e\u0644\u0627\u0642 \u0628\u0647 \u0637\u0648\u0631 \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0639\u062f\u06cc \u062e\u0648\u062f\u060c \u0627\u0633\u067e\u0631\u06cc\u062a \u0647\u0627\u06cc \u0628\u06cc \u0646\u0642\u0635 \u067e\u06cc\u06a9\u0633\u0644 \u0645\u06cc \u0633\u0627\u0632\u06cc\u062f\u060c \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u067e\u0648\u06cc\u0627 \u0628\u0631\u0627\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0645\u062c\u0627\u0632\u06cc \u0637\u0631\u0627\u062d\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0628\u0644\u0648\u06a9 1: \u062a\u0646\u0638\u06cc\u0645 \u0645\u0631\u062d\u0644\u0647 &#8211; \u0648\u0627\u0631\u062f\u0627\u062a \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<br \/>\u0628\u0647 \u0645\u0627\u062c\u0631\u0627\u062c\u0648\u06cc\u06cc \u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f!  \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639\u060c \u0628\u0627\u06cc\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u062e\u0648\u062f \u0631\u0627 \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u06a9\u0646\u06cc\u0645.  \u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c <br \/>\u0645\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631\u060c \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u062a\u0646\u060c \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0639\u0645\u06cc\u0642\u060c \u062a\u062c\u0633\u0645\u060c \u0648 \u062b\u0628\u062a \u0646\u0627\u0645 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u062a\u0644\u0627\u0634 \u0622\u063a\u0627\u0632 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<p>\u0645\u0634\u0639\u0644 \u0648\u0627\u0631\u062f\u0627\u062a\u06cc<br \/>\u0645\u0627 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<br \/>\u0627\u0632 \u06a9\u0631\u0647 \u0632\u0645\u06cc\u0646<br \/>\u0633\u0641\u0631\u06cc \u0647\u06cc\u062c\u0627\u0646 \u0627\u0646\u06af\u06cc\u0632 \u0628\u0647 \u0642\u0644\u0645\u0631\u0648 \u0647\u0646\u0631 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u062e\u06cc\u0644 \u0628\u0627 \u0641\u0646\u0627\u0648\u0631\u06cc \u0631\u0648\u0628\u0631\u0648 \u0645\u06cc \u0634\u0648\u062f! <br \/>\u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0622\u0631\u0632\u0648 \u062f\u0627\u0634\u062a\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0635\u0641\u062d\u0627\u062a \u0631\u0645\u0627\u0646 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u0628\u0647 \u0634\u062e\u0635\u06cc\u062a \u0647\u0627 \u062c\u0627\u0646 \u0628\u062f\u0647\u06cc\u062f \u06cc\u0627 <br \/>\u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u062e\u0627\u0631\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0628\u0647 \u0630\u0647\u0646 \u0645\u062a\u0628\u0627\u062f\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u061f  \u0645\u0639\u0631\u0641\u06cc \u062f\u0646\u06cc\u0627\u06cc \u062e\u06cc\u0631\u0647 \u06a9\u0646\u0646\u062f\u0647 \u0633\u0646\u062a\u0632 \u0645\u062a\u0646 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631\u060c <br \/>\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0633\u0627\u0632\u0646\u062f\u06af\u0627\u0646 \u062c\u0646 \u0628\u0627 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u06a9\u0644\u0645\u0627\u062a \u0634\u0645\u0627 \u0631\u0627 \u0628\u0647 \u0634\u0627\u0647\u06a9\u0627\u0631\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc \u062c\u0630\u0627\u0628 \u062a\u0628\u062f\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u0646\u062f.  \u0628\u0627 \u0627\u0644\u0647\u0627\u0645 \u0627\u0632 \u062a\u0644\u0641\u06cc\u0642 \u0647\u0646\u0631\u060c \u062f\u0627\u0633\u062a\u0627\u0646 \u0633\u0631\u0627\u06cc\u06cc\u060c <br \/>\u0648 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0639\u0645\u06cc\u0642 \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u060c \u0627\u06cc\u0646 \u0627\u0628\u0632\u0627\u0631 \u0646\u0648\u0622\u0648\u0631\u0627\u0646\u0647 \u0627\u0645\u06a9\u0627\u0646\u0627\u062a \u0628\u06cc \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0628\u0627\u0632\u06cc\u060c \u0647\u0646\u0631\u0645\u0646\u062f\u0627\u0646 \u0648 \u0630\u0647\u0646 \u0647\u0627\u06cc \u062e\u0644\u0627\u0642 \u0628\u0647 \u0637\u0648\u0631 \u06cc\u06a9\u0633\u0627\u0646 \u0628\u0627\u0632 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u062a\u0635\u0648\u0631 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0628\u0631\u0627\u06cc \u0628\u0627\u0632\u06cc \u0645\u0633\u062a\u0642\u0644 \u0628\u0639\u062f\u06cc \u062e\u0648\u062f\u060c \u0627\u0633\u067e\u0631\u06cc\u062a \u0647\u0627\u06cc \u0628\u06cc \u0646\u0642\u0635 \u067e\u06cc\u06a9\u0633\u0644 \u0645\u06cc \u0633\u0627\u0632\u06cc\u062f\u060c \u0622\u0648\u0627\u062a\u0627\u0631\u0647\u0627\u06cc \u067e\u0648\u06cc\u0627 \u0628\u0631\u0627\u06cc \u062f\u0646\u06cc\u0627\u06cc \u0645\u062c\u0627\u0632\u06cc \u0637\u0631\u0627\u062d\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u062f. <\/p>\n<p>\u0628\u0644\u0648\u06a9 1: \u062a\u0646\u0638\u06cc\u0645 \u0645\u0631\u062d\u0644\u0647 &#8211; \u0648\u0627\u0631\u062f\u0627\u062a \u0648 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc<br \/>\u0628\u0647 \u0645\u0627\u062c\u0631\u0627\u062c\u0648\u06cc\u06cc \u062e\u0648\u0634 \u0622\u0645\u062f\u06cc\u062f!  \u0642\u0628\u0644 \u0627\u0632 \u0634\u0631\u0648\u0639\u060c \u0628\u0627\u06cc\u062f \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0642\u0627\u0628\u0644 \u0627\u0639\u062a\u0645\u0627\u062f \u062e\u0648\u062f \u0631\u0627 \u062c\u0645\u0639 \u0622\u0648\u0631\u06cc \u06a9\u0646\u06cc\u0645.  \u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c <br \/>\u0645\u0627 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc \u0644\u0627\u0632\u0645 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631\u060c \u067e\u0631\u062f\u0627\u0632\u0634 \u0645\u062a\u0646\u060c \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0639\u0645\u06cc\u0642\u060c \u062a\u062c\u0633\u0645\u060c \u0648 \u062b\u0628\u062a \u0646\u0627\u0645 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u062a\u0644\u0627\u0634 \u0622\u063a\u0627\u0632 \u0645\u06cc \u0634\u0648\u062f<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\nimport torch\nimport os\nfrom glob import glob\nfrom torch import nn, optim\nfrom torch.utils.data import DataLoader, Dataset\nfrom torchvision import models, transforms\nfrom transformers import VisionEncoderDecoderModel, ViTImageProcessor, AutoModel, AutoTokenizer\nimport numpy as np\nfrom PIL import Image\nimport matplotlib.pyplot as plt\nfrom sklearn.decomposition import PCA\nfrom rich import print as rp\nimport wandb\n\nwandb.init(project=\"spritemaker\", entity=\"goldenkooy\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u062e\u0648\u062f \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0628\u0644\u0648\u06a9 2: \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u0647\u0627 &#8211; \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u062f\u0648 \u06a9\u0644\u0627\u0633 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f: TextEncoder \u0648 ImageEncoder. <br \/>\u0627\u06cc\u0646 \u06a9\u0644\u0627\u0633 \u0647\u0627 \u0648\u0638\u06cc\u0641\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0647\u062f\u0647 \u062e\u0648\u0627\u0647\u0646\u062f \u062f\u0627\u0634\u062a.<\/p>\n<p>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646:<br \/>\u0628\u0627 \u06a9\u0644\u0627\u0633 TextEncoder \u0622\u0634\u0646\u0627 \u0634\u0648\u06cc\u062f \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 BERT \u0627\u0632 \u067e\u06cc\u0634 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0628\u0631\u0627\u06cc \u062a\u0628\u062f\u06cc\u0644 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0645\u062a\u0646\u06cc \u0628\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0647\u0627\u06cc \u0639\u062f\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<br \/>TextEncoder \u0631\u0627 \u0628\u0627 \u0646\u0627\u0645 \u0645\u062f\u0644 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f (\u067e\u06cc\u0634\u200c\u0641\u0631\u0636 bert-base-uncased \u0627\u0633\u062a).<br \/>\u0627\u0632 AutoTokenizer \u0648 AutoModel \u0627\u0632 \u062a\u0631\u0627\u0646\u0633\u0641\u0648\u0631\u0645\u0627\u062a\u0648\u0631\u0647\u0627 \u0628\u0631\u0627\u06cc \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u0645\u062f\u0644 BERT \u0648 \u062a\u0648\u06a9\u0646\u0627\u06cc\u0632\u0631 \u0627\u0632 \u067e\u06cc\u0634 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\u0645\u062f\u0644 \u0631\u0627 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc (.eval()) \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0627\u0632 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0632\u0646 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0645\u0631\u06cc\u0646 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u0645\u062a\u062f encode_text \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0648\u0631\u0648\u062f\u06cc \u0645\u062a\u0646 \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0622\u062e\u0631\u06cc\u0646 \u062d\u0627\u0644\u062a \u067e\u0646\u0647\u0627\u0646 \u0645\u062f\u0644 BERT \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\nclass TextEncoder:\n    def __init__(self, model_name=\"bert-base-uncased\"):\n        self.tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=\".\/models\")\n        self.model = AutoModel.from_pretrained(model_name, cache_dir=\".\/models\")\n        self.model.eval()\n\n    def encode_text(self, text):\n        with torch.no_grad():\n            inputs = self.tokenizer(text, return_tensors=\"pt\", padding=True, truncation=True)\n            outputs = self.model(**inputs)\n        return outputs.last_hidden_state[:, 0, :]\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631<\/p>\n<p>\u0628\u0647 \u06a9\u0644\u0627\u0633 ImageEncoder \u0633\u0644\u0627\u0645 \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 ResNet \u0627\u0632 \u0642\u0628\u0644 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0627\u0632 \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f.<br \/>ImageEncoder \u0631\u0627 \u0628\u062f\u0648\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0627\u0648\u0644\u06cc\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\u06cc\u06a9 \u0645\u062f\u0644 ResNet50 \u0627\u0632 \u067e\u06cc\u0634 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0631\u0627 \u0627\u0632 \u0631\u0648\u06cc \u0645\u0634\u0639\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u062f \u0648 \u0622\u0646 \u0631\u0627 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc (.eval()) \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u062a\u0627 \u0627\u0632 \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0632\u0646 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0645\u0631\u06cc\u0646 \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u0645\u062a\u062f encode_image \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0648\u0631\u0648\u062f\u06cc \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0634\u062f\u0647 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>class ImageEncoder:\n    def __init__(self):\n        self.model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)\n        self.model.eval()\n        self.transform = transforms.Compose([\n            transforms.Resize((224, 224)),\n            transforms.ToTensor(),\n            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n        ])\n\n    def encode_image(self, image_path):\n        image = Image.open(image_path).convert('RGB')\n        image = self.transform(image)\n        image = image.unsqueeze(0)  # Add batch dimension\n        with torch.no_grad():\n            features = self.model(image)\n        return features\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<br \/>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u0647\u0627\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u062f\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0648 \u0645\u062a\u0646 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 3: \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 &#8211; Sprite \u0648 Text<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u06cc\u06a9 \u06a9\u0644\u0627\u0633 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0628\u0647 \u0646\u0627\u0645 SpriteTextDataset \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0648 \u0645\u062a\u0646 \u0645\u0627 \u0631\u0627 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u06a9\u0644\u0627\u0633 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647<\/p>\n<p>\u06a9\u0644\u0627\u0633 SpriteTextDataset \u0631\u0627 \u0628\u0627 \u06cc\u06a9 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631\u060c \u06cc\u06a9 \u0641\u0647\u0631\u0633\u062a \u0645\u062a\u0646\u060c \u06cc\u06a9 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648 \u06cc\u06a9 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u062a\u0645\u0627\u0645 \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0627\u0632 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 glob \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u0645\u0633\u06cc\u0631\u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u062a\u06a9\u0631\u0627\u0631 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0631\u0627 \u0627\u0632 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0645\u062a\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.  \u0647\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0628\u0627 \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0645\u0631\u0628\u0648\u0637\u0647 \u062c\u0641\u062a \u06a9\u0646\u06cc\u062f.<br \/>\u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <strong>\u0644\u0646<\/strong> \u0631\u0648\u0634 \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647.<br \/>\u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f <strong>\u0632\u0645\u0627\u0646 \u0628\u0646\u062f\u06cc \u0634\u062f\u0647<\/strong> \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u06cc\u06a9 \u062a\u0627\u067e\u0644 \u062d\u0627\u0648\u06cc \u0645\u0633\u06cc\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648 \u0645\u062a\u0646 \u06a9\u062f\u06af\u0630\u0627\u0631\u06cc \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u06cc\u06a9 \u0634\u0627\u062e\u0635 \u0645\u0639\u06cc\u0646.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>class SpriteTextDataset(Dataset):\n    def __init__(self, image_dir, text_dir, image_encoder, text_encoder):\n        self.image_encoder = image_encoder\n        self.text_encoder = text_encoder\n        self.data = []\n\n        # Load all image paths\n        image_paths = glob(os.path.join(image_dir, '*.png'))\n\n        # Debug: print the found image paths\n        rp(f\"Found image paths: {image_paths}\")\n\n        # Load descriptions and pair them with images\n        for image_path in image_paths:\n            base_filename = os.path.splitext(os.path.basename(image_path))[0]\n            text_path = os.path.join(text_dir, f\"{base_filename}.txt\")\n            if os.path.exists(text_path):\n                with open(text_path, 'r', encoding='utf-8') as file:\n                    description = file.read().strip()\n                    self.data.append((image_path, description))\n            else:\n                rp(f\"Warning: No description file found for {image_path}\")\n\n        # Debug: print the dataset size\n        rp(f\"Dataset size: {len(self.data)}\")\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        image_path, description = self.data[idx]\n        image_features = self.image_encoder.encode_image(image_path)\n        text_features = self.text_encoder.encode_text(description)\n        return image_features, text_features\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06a9\u0644\u0627\u0633 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u06cc\u06a9 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647 \u0627\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u06a9\u0646\u06cc\u0645. <br \/>\u0627\u06cc\u0646 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u062b\u0631 \u0622\u0645\u0648\u0632\u0634 \u062f\u0647\u06cc\u0645.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 4: \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 &#8211; Sprite \u0648 Text<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u0645\u0627 \u06cc\u06a9 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627 \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647 \u0627\u06cc \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u062f.  \u0627\u06cc\u0646 \u0628\u0647 \u0645\u0627 \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u062b\u0631 \u0622\u0645\u0648\u0632\u0634 \u062f\u0647\u06cc\u0645.<\/p>\n<p>\u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647<\/p>\n<p>\u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647\u060c \u0627\u0646\u062f\u0627\u0632\u0647 \u062f\u0633\u062a\u0647 \u0627\u06cc \u0648 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 \u062e\u0648\u062f \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f.<br \/>\u0648\u06cc\u0698\u06af\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0646\u0645\u0648\u0646\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<br \/>\u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u0646\u062f\u0627\u0632\u0647 \u062f\u0633\u062a\u0647\u060c \u0648\u06cc\u0698\u06af\u06cc batch_size \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<br \/>\u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646\u060c \u0635\u0641\u062a num_workers \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f.<br \/>\u0627\u0632 \u06a9\u0644\u0627\u0633 DataLoader \u0627\u0632 torch.utils.data \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<br \/>\u0648\u06cc\u0698\u06af\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u0647 \u0646\u0645\u0648\u0646\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.<br \/>\u0648\u06cc\u0698\u06af\u06cc batch_size \u0631\u0627 \u0631\u0648\u06cc \u0627\u0646\u062f\u0627\u0632\u0647 \u062f\u0633\u062a\u0647 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.<br \/>\u0635\u0641\u062a num_workers \u0631\u0627 \u0631\u0648\u06cc \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\nclass SpriteTextDataLoader:\n    def __init__(self, dataset, batch_size, num_workers):\n        self.dataset = dataset\n        self.batch_size = batch_size\n        self.num_workers = num_workers\n        self.data_loader = DataLoader(dataset, batch_size=batch_size, num_workers=num_workers)\n\n    def __iter__(self):\n        return iter(self.data_loader)\n\n    def __len__(self):\n        return len(self.data_loader)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Data Loader<\/p>\n<p>\u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06a9\u0644\u0627\u0633 SpriteTextDataLoader \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u060c \u0627\u0646\u062f\u0627\u0632\u0647 \u062f\u0633\u062a\u0647 \u0648 \u062a\u0639\u062f\u0627\u062f \u06a9\u0627\u0631\u06af\u0631\u0627\u0646 \u0645\u0627 \u0627\u0631\u0633\u0627\u0644 \u0634\u0648\u062f.<br \/>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u062a\u06a9\u0631\u0627\u0631<\/strong> \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631 \u0628\u0631 \u0631\u0648\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647 \u0627\u06cc.<br \/>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <strong>\u0644\u0646<\/strong> \u0631\u0648\u0634\u06cc \u0628\u0631\u0627\u06cc \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u062f\u0646 \u062a\u0639\u062f\u0627\u062f \u06a9\u0644 \u062f\u0633\u062a\u0647 \u0647\u0627 \u062f\u0631 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ndata_loader = SpriteTextDataLoader(sprite_text_dataset, batch_size=32, num_workers=4)\nfor batch in data_loader:\n    images, texts = batch\n    # Train our model on the batch\n\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645.  \u0627\u06cc\u0646 \u0647\u0633\u062a\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u062c\u0646 \u0645\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 5: \u0645\u062f\u0644 &#8211; Sprite Maker<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645\u060c \u06a9\u0647 \u0648\u0638\u06cc\u0641\u0647 \u062a\u0648\u0644\u06cc\u062f sprites \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u062e\u0648\u0627\u0647\u062f \u062f\u0627\u0634\u062a.<\/p>\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062f\u0644<\/p>\n<p>\u0645\u062f\u0644 \u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646\u060c \u06cc\u06a9 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648 \u06cc\u06a9 \u062a\u0648\u0644\u06cc\u062f \u06a9\u0646\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0634\u06a9\u06cc\u0644 \u0634\u062f\u0647 \u0627\u0633\u062a.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646 \u0645\u062a\u0646 \u0648\u0631\u0648\u062f\u06cc \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627 \u0631\u0627 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u0631\u0627 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0645\u0648\u0644\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062e\u0631\u0648\u062c\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0631\u0627 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc \u062f\u0647\u062f.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 BERT \u0627\u0632 \u0642\u0628\u0644 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u0645\u062a\u0646 \u0645\u0633\u0626\u0648\u0644 \u062a\u0628\u062f\u06cc\u0644 \u0645\u062a\u0646 \u0648\u0631\u0648\u062f\u06cc \u0628\u0647 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u0645\u062f\u0644 ResNet50 \u0627\u0632 \u0642\u0628\u0644 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0631\u0645\u0632\u06af\u0630\u0627\u0631 \u062a\u0635\u0648\u06cc\u0631 \u0645\u0633\u0626\u0648\u0644 \u062a\u0628\u062f\u06cc\u0644 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0628\u0647 \u062f\u0646\u0628\u0627\u0644\u0647 \u0627\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627 \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f.<br \/>Sprite Generator<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u06cc\u06a9 \u0634\u0628\u06a9\u0647 \u0639\u0635\u0628\u06cc \u0628\u0627 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u06a9\u0627\u0646\u0648\u0644\u0648\u0634\u0646 \u0648 \u06cc\u06a9 \u0644\u0627\u06cc\u0647 \u062f\u06a9\u0627\u0646\u0648\u0644\u0648\u0634\u0646 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0645\u0648\u0644\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062e\u0631\u0648\u062c\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0631\u0627 \u0645\u06cc \u06af\u06cc\u0631\u062f \u0648 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0631\u0627 \u062e\u0631\u0648\u062c\u06cc \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\nclass SpriteMaker(nn.Module):\n    def __init__(self, text_encoder, image_encoder, sprite_generator):\n        super(SpriteMaker, self).__init__()\n        self.text_encoder = text_encoder\n        self.image_encoder = image_encoder\n        self.sprite_generator = sprite_generator\n\n    def forward(self, text, image):\n        text_features = self.text_encoder(text)\n        image_features = self.image_encoder(image)\n        sprite_features = torch.cat((text_features, image_features), dim=1)\n        sprite = self.sprite_generator(sprite_features)\n        return sprite\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645 \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u06cc\u0645.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 6: \u0622\u0645\u0648\u0632\u0634 \u0645\u062f\u0644 &#8211; Sprite Maker<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645\u060c \u0622\u0645\u0648\u0632\u0634 \u0645\u06cc \u062f\u0647\u06cc\u0645.<\/p>\n<p>\u0622\u0645\u0648\u0632\u0634 \u0645\u062f\u0644<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u0631\u0648\u0634 \u0642\u0637\u0627\u0631 \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0622\u0645\u0648\u0632\u0634 \u0622\u0646 \u0628\u0631 \u0631\u0648\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc train \u0645\u062f\u0644 \u0631\u0627 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0622\u0645\u0648\u0632\u0634 \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u06cc\u0645.<br \/>\u0645\u0627 \u06cc\u06a9 \u062a\u0627\u0628\u0639 \u0627\u0632 \u062f\u0633\u062a \u062f\u0627\u062f\u0646 \u0648 \u06cc\u06a9 \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632 \u0628\u0631\u0627\u06cc \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0632\u0646 \u0647\u0627\u06cc \u0645\u062f\u0644 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0645\u0631\u06cc\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>\u0645\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647\u200c\u0627\u06cc \u0631\u0648\u06cc \u0628\u0627\u0631\u06af\u0630\u0627\u0631 \u062f\u0627\u062f\u0647 \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u0648\u0632\u0646 \u0645\u062f\u0644 \u0631\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0639\u0645\u0644\u06a9\u0631\u062f \u0628\u0647\u06cc\u0646\u0647\u200c\u0633\u0627\u0632 \u0648 \u0627\u0632 \u062f\u0633\u062a \u062f\u0627\u062f\u0646 \u0628\u0647\u200c\u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ndef train_model(model, data_loader, optimizer, loss_fn):\n    model.train()\n    total_loss = 0\n    for batch in data_loader:\n        images, texts = batch\n        images = images.to(device)\n        texts = texts.to(device)\n        optimizer.zero_grad()\n        outputs = model(texts, images)\n        loss = loss_fn(outputs, targets)\n        loss.backward()\n        optimizer.step()\n        total_loss += loss.item()\n    print(f\"Training loss: {total_loss \/ len(data_loader)}\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0639\u0631\u06cc\u0641 Loss Function \u0648 Optimizer<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u0645\u06cc\u0627\u0646\u06af\u06cc\u0646 \u0645\u0631\u0628\u0639\u0627\u062a \u062e\u0637\u0627 (MSE) \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u062a\u0627\u0628\u0639 \u0636\u0631\u0631 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0645\u0627 \u0627\u0632 \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632 Adam \u0628\u0631\u0627\u06cc \u0628\u0647 \u0631\u0648\u0632 \u0631\u0633\u0627\u0646\u06cc \u0648\u0632\u0646\u0647 \u0647\u0627\u06cc \u0645\u062f\u0644 \u062f\u0631 \u0637\u0648\u0644 \u062a\u0645\u0631\u06cc\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>loss_fn = nn.MSELoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\nTraining the Model\n\nWe'll train our model for 5 epochs using the train_model function.\nWe'll print the training loss at each epoch.\n\n\n\nfor epoch in range(5):\n    train_model(model, data_loader, optimizer, loss_fn)\n    print(f\"Epoch {epoch+1}, Training loss: {total_loss \/ len(data_loader)}\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0622\u0645\u0648\u0632\u0634 \u062f\u0627\u062f\u0647\u200c\u0627\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 7: \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u062f\u0644 &#8211; Sprite Maker<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062f\u0644 \u0622\u0645\u0648\u0632\u0634 \u062f\u06cc\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u062f\u0644<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u0631\u0648\u0634 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0622\u0646 \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u062a\u0633\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc eval \u0645\u062f\u0644 \u0631\u0627 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u06cc\u0645.<br \/>\u0645\u0627 \u0645\u062c\u0645\u0648\u0639\u0647 \u062a\u0633\u062a \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u0647\u200c\u0627\u06cc \u062a\u06a9\u0631\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u0648 \u062a\u0644\u0641\u0627\u062a \u0648 \u062f\u0642\u062a \u0645\u062f\u0644 \u0631\u0627 \u0645\u062d\u0627\u0633\u0628\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<br \/>\u0645\u0627 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 \u0686\u0627\u067e \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ndef evaluate_model(model, test_loader):\n    model.eval()\n    total_loss = 0\n    correct = 0\n    with torch.no_grad():\n        for batch in test_loader:\n            images, texts = batch\n            images = images.to(device)\n            texts = texts.to(device)\n            outputs = model(texts, images)\n            loss = loss_fn(outputs, targets)\n            total_loss += loss.item()\n            _, predicted = torch.max(outputs, 1)\n            correct += (predicted == targets).sum().item()\n    accuracy = correct \/ len(test_loader.dataset)\n    print(f\"Test Loss: {total_loss \/ len(test_loader)}\")\n    print(f\"Test Accuracy: {accuracy:.2f}\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0633\u062a \u0645\u062f\u0644<\/p>\n<p>\u0645\u0627 \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0631\u0648\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u062a\u0633\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0627\u0628\u0639 value_model \u0622\u0632\u0645\u0627\u06cc\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>\u0645\u0627 \u0627\u0632 \u062f\u0633\u062a \u062f\u0627\u062f\u0646 \u062a\u0633\u062a \u0648 \u062f\u0642\u062a \u0631\u0627 \u062f\u0631 \u06a9\u0646\u0633\u0648\u0644 \u0686\u0627\u067e \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ntest_loss, test_accuracy = evaluate_model(model, test_loader)\nprint(f\"Test Loss: {test_loss:.2f}\")\nprint(f\"Test Accuracy: {test_accuracy:.2f}\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0631\u062f\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0628\u0639\u062f\u06cc \u0628\u0631\u0648\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u0627\u0632 \u0645\u062f\u0644 \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f sprites \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 8: \u062a\u0648\u0644\u06cc\u062f \u062c\u0646 &#8211; Sprite Maker<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9\u060c \u0627\u0632 \u0645\u062f\u0644 \u0622\u0645\u0648\u0632\u0634\u200c\u062f\u06cc\u062f\u0647 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f sprites \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u062a\u0648\u0644\u06cc\u062f \u062c\u0646<\/p>\n<p>\u0645\u0627 \u0627\u0632 \u0631\u0648\u0634 \u0641\u0648\u0631\u0648\u0627\u0631\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u06cc\u06a9 sprite \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc eval \u0645\u062f\u0644 \u0631\u0627 \u0631\u0648\u06cc \u062d\u0627\u0644\u062a \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0642\u0631\u0627\u0631 \u0645\u06cc \u062f\u0647\u06cc\u0645.<br \/>\u0628\u0627 \u0627\u0639\u0645\u0627\u0644 \u0645\u0648\u0644\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062f\u0631 \u062e\u0631\u0648\u062c\u06cc \u0631\u0645\u0632\u06af\u0630\u0627\u0631\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631\u060c \u06cc\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0645\u0627 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ndef generate_sprite(model, text, image):\n    model.eval()\n    text_features = text_encoder(text)\n    image_features = image_encoder(image)\n    sprite_features = torch.cat((text_features, image_features), dim=1)\n    sprite = model.sprite_generator(sprite_features)\n    sprite = sprite.cpu().numpy()\n    sprite = Image.fromarray(sprite)\n    sprite.save(\"generated_sprite.png\")\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u0648\u0644\u06cc\u062f Sprite<\/p>\n<p>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u0627\u0628\u0639gene_sprite \u06cc\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0622\u0631\u06af\u0648\u0645\u0627\u0646 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<br \/>\u0645\u0627 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0631\u0627 \u062f\u0631 \u0641\u0627\u06cc\u0644\u06cc \u0628\u0627 \u0646\u0627\u0645 &#8220;generated_sprite.png&#8221; \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>\ntext = \"Hello, world!\"\nimage = Image.open(\"image.png\")\ngenerate_sprite(model, text, image)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06cc\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0648\u0644\u06cc\u062f \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0647 \u0628\u0644\u0648\u06a9 \u0646\u0647\u0627\u06cc\u06cc \u0628\u0631\u0648\u06cc\u0645\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u062a\u0627\u06cc\u062c \u0648 \u067e\u06cc\u0634\u0631\u0641\u062a\u200c\u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0628\u062d\u062b \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.  \u06af\u0648\u0634 \u0628\u0647 \u0632\u0646\u06af \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 9;  \u0633\u0627\u062e\u062a\u0627\u0631 \u0648 \u06af\u0633\u062a\u0631\u0634 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627 \u0648 \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644 \u0647\u0627 &#8211; \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0622\u0633\u0627\u0646 \u0645\u06cc \u06a9\u0646\u062f!<\/p>\n<p>\u06af\u0633\u062a\u0631\u0634 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0645\u062f\u0644 \u0633\u0646\u062a\u0632 \u0645\u062a\u0646 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 \u0634\u0645\u0627 \u0647\u0631\u06af\u0632 \u0622\u0633\u0627\u0646\u200c\u062a\u0631 \u0646\u0628\u0648\u062f\u0647 \u0627\u0633\u062a! <br \/>\u0628\u0631\u0627\u06cc \u0645\u0639\u0631\u0641\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 sprites \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u06cc\u060c \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u062a\u0635\u0648\u06cc\u0631 \u0628\u0631\u06af\u0647 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 training_data\/spritesheets \u0628\u06a9\u0634\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644\u060c \u0627\u06af\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0627\u0632 \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u0641\u0627\u0646\u062a\u0632\u06cc \u062f\u0627\u0631\u06cc\u062f\u060c \u0646\u0627\u0645 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0686\u06cc\u0632\u06cc \u0645\u0627\u0646\u0646\u062f fantasy_creatures.png \u0628\u06af\u0630\u0627\u0631\u06cc\u062f.<\/p>\n<p>\u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062a\u0646 \u062a\u0648\u0635\u06cc\u0641\u06cc:<br \/>\u062f\u0631 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0633\u0627\u062f\u0647 \u0645\u0627\u060c \u0646\u06cc\u0627\u0632\u06cc \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u062a\u0648\u0636\u06cc\u062d\u0627\u062a \u0645\u062a\u0646 \u0645\u0631\u0628\u0648\u0637\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0646\u06cc\u0633\u062a. <br \/>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0647\u0648\u0634\u0645\u0646\u062f\u0627\u0646\u0647 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u0645\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f!  \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u062c\u0631\u0627\u060c \u06cc\u06a9 \u0645\u062f\u0644 GPT-2 \u06a9\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u062d\u0644\u06cc \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u06a9\u0647 \u062a\u0648\u0633\u0637 \u06cc\u06a9 \u0645\u062f\u0644 \u062f\u06cc\u062f \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0628\u0647\u200c\u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062a\u0646 \u062a\u0648\u0635\u06cc\u0641\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062f\u0631 \u0634\u06cc\u062a \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u06a9\u0646\u062f.<br \/>\u0641\u0631\u06cc\u0645 \u0648\u0631\u06a9 \u0647\u0645\u0647 \u06a9\u0627\u0631\u0647 \u0645\u0627 \u0639\u0644\u0627\u0648\u0647 \u0628\u0631 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0635\u0641\u062d\u0627\u062a \u0627\u0633\u067e\u0631\u06cc\u062a\u060c \u062a\u0635\u0627\u0648\u06cc\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u062f\u0631 \u0641\u0631\u0622\u06cc\u0646\u062f \u0622\u0645\u0648\u0632\u0634 \u06af\u0646\u062c\u0627\u0646\u062f\u0647 \u0627\u0633\u062a.  \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0628\u062f\u0648\u0646 \u0632\u062d\u0645\u062a \u06cc\u06a9 sprite \u0648 <br \/>\u0622\u0646 \u0631\u0627 \u062f\u0631 \u062f\u0648\u0631\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0628\u0639\u062f\u06cc \u062e\u0648\u062f \u0627\u062f\u063a\u0627\u0645 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062a\u0635\u0648\u06cc\u0631 Single Sprite \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<br \/>\u062a\u0635\u0648\u06cc\u0631 sprite \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 training_data\/spritesheets \u0630\u062e\u06cc\u0631\u0647 \u06a9\u0646\u06cc\u062f.  \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0627\u0645 \u0622\u0646 \u0631\u0627 unique_sprite.png \u0628\u06af\u0630\u0627\u0631\u06cc\u062f.<\/p>\n<p>\u0645\u0627\u0646\u0646\u062f \u0635\u0641\u062d\u0627\u062a \u0627\u0633\u067e\u0631\u06cc\u062a\u060c <br \/>\u0645\u062f\u0644 \u0628\u06cc\u0646\u0627\u06cc\u06cc \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0628\u0635\u0631\u06cc \u0631\u0627 \u0627\u0633\u062a\u062e\u0631\u0627\u062c \u0645\u06cc \u06a9\u0646\u062f\u060c <br \/>GPT-2 \u06cc\u06a9 \u0645\u062a\u0646 \u062a\u0648\u0635\u06cc\u0641\u06cc \u0628\u0631\u0627\u06cc sprite \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f. <br \/>\u0641\u0627\u06cc\u0644 \u0645\u062a\u0646\u06cc \u0628\u0627 \u0646\u0627\u0645 unique_sprite.txt\u060c <br \/>\u0633\u067e\u0633 \u062f\u0631 \u067e\u0648\u0634\u0647 texts \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u0638\u0627\u0631\u062a \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u062a\u0646\u0638\u06cc\u0645 \u062f\u0642\u06cc\u0642 \u0645\u062f\u0644\u060c \u0645\u0627 \u0634\u0645\u0627 \u0631\u0627 \u062a\u062d\u062a \u067e\u0648\u0634\u0634 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0647 \u0627\u06cc\u0645 <br \/>\u0627\u062f\u063a\u0627\u0645 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0686\u0627\u0631\u0686\u0648\u0628 Weights &#038; Biases (WandB).<br \/>\u0628\u0627 WandB\u060c \u062f\u0631 \u0637\u0648\u0644 \u0647\u0631 \u062f\u0648\u0631\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc\u060c \u0628\u06cc\u0646\u0634\u200c\u0647\u0627\u06cc \u0628\u06cc\u200c\u062f\u0631\u0646\u06af \u062f\u0631\u0628\u0627\u0631\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0647 \u062f\u0633\u062a \u0645\u06cc\u200c\u0622\u0648\u0631\u06cc\u062f. <br \/>\u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u0622\u0645\u0648\u0632\u0634\u06cc \u0631\u0627 \u0628\u0647 \u0635\u0648\u0631\u062a \u0628\u0635\u0631\u06cc \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc\u200c\u062f\u0647\u062f \u0648 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc\u200c\u062f\u0647\u062f \u067e\u06cc\u0634\u0631\u0641\u062a \u0631\u0627 \u067e\u06cc\u06af\u06cc\u0631\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u062f\u0631 \u0627\u062c\u0631\u0627\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0645\u0642\u0627\u06cc\u0633\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u062a\u0646\u0638\u06cc\u0645 \u0641\u0631\u0627\u067e\u0627\u0631\u0627\u0645\u062a\u0631:<br \/>\u0631\u0627\u0628\u0637 \u0642\u062f\u0631\u062a\u0645\u0646\u062f WandB \u0628\u0647 \u0634\u0645\u0627 \u0627\u06cc\u0646 \u0627\u0645\u06a9\u0627\u0646 \u0631\u0627 \u0645\u06cc \u062f\u0647\u062f \u06a9\u0647 \u0628\u0627 \u0641\u0631\u0627\u067e\u0627\u0631\u0627\u0645\u062a\u0631\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f \u0648 \u062a\u0623\u062b\u06cc\u0631 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0628\u0631 \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062f\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f.  \u0627\u06cc\u0646 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062f\u0647 \u0628\u0647 \u0634\u0645\u0627 \u0627\u0645\u06a9\u0627\u0646 \u0645\u06cc \u062f\u0647\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0637\u0648\u0631 \u06a9\u0627\u0631\u0622\u0645\u062f\u062a\u0631 \u0628\u0647\u06cc\u0646\u0647 \u06a9\u0646\u06cc\u062f \u0648 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0646\u062a\u0627\u06cc\u062c \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0647\u0627\u06cc \u0633\u0646\u062a\u0632 \u0645\u062a\u0646 \u0628\u0647 \u062a\u0635\u0648\u06cc\u0631 \u062e\u0648\u062f \u062a\u0636\u0645\u06cc\u0646 \u06a9\u0646\u06cc\u062f.<br \/>\u0628\u0647 \u0637\u0648\u0631 \u062e\u0644\u0627\u0635\u0647\u060c \u0627\u0641\u0632\u0648\u062f\u0646 \u062a\u0635\u0627\u0648\u06cc\u0631 \u062a\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0634\u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u0622\u0646\u0647\u0627 \u062f\u0631 \u067e\u0648\u0634\u0647 \u0635\u062d\u06cc\u062d \u0627\u0633\u062a.  \u062a\u0648\u0644\u06cc\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0645\u062a\u0646 \u0648 \u0627\u062f\u063a\u0627\u0645 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0628\u0627 WandB \u06a9\u0644 \u06af\u0631\u062f\u0634 \u06a9\u0627\u0631 \u0631\u0627 \u0633\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0628\u06cc\u0646\u0634 \u0627\u0631\u0632\u0634\u0645\u0646\u062f \u0648 \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062a\u0646\u0638\u06cc\u0645 \u062f\u0642\u06cc\u0642 \u0645\u062f\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u0646\u062a\u0627\u06cc\u062c \u0628\u0647\u062a\u0631 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.  \u0627\u06cc\u0646 \u0633\u0641\u0631 \u0647\u06cc\u062c\u0627\u0646 \u0627\u0646\u06af\u06cc\u0632 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f \u0648 \u0634\u0627\u0647\u062f \u0628\u0627\u0634\u06cc\u062f \u06a9\u0647 \u062c\u0646 \u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0634\u0645\u0627 \u0628\u0627 \u0647\u0631 \u062f\u0648\u0631\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u062a\u06a9\u0627\u0645\u0644 \u0645\u06cc \u06cc\u0627\u0628\u0646\u062f!<br \/>\u062d\u0627\u0644\u0627\u060c \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0622\u0645\u0648\u0632\u0634\u06cc \u0631\u0627 \u0631\u0648\u0634\u0646 \u06a9\u0646\u06cc\u062f\u060c \u0628\u0646\u0634\u06cc\u0646\u06cc\u062f\u060c <br \/>\u0648 \u0634\u0627\u0647\u062f \u062a\u0648\u0627\u0646\u0627\u06cc\u06cc \u062c\u062f\u06cc\u062f \u0645\u062f\u0644 \u062e\u0648\u062f \u0628\u0631\u0627\u06cc \u0632\u0646\u062f\u0647 \u06a9\u0631\u062f\u0646 \u0634\u062e\u0635\u06cc\u062a \u0647\u0627\u06cc \u062a\u062e\u06cc\u0644\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0642\u062f\u0631\u062a \u062a\u0648\u0644\u06cc\u062f \u0645\u062a\u0646 \u0645\u0628\u062a\u0646\u06cc \u0628\u0631 \u0647\u0648\u0634 \u0645\u0635\u0646\u0648\u0639\u06cc \u0628\u0627\u0634\u06cc\u062f!<\/p>\n<p>\u0628\u0644\u0648\u06a9 9: \u06a9\u0627\u0631 \u0622\u06cc\u0646\u062f\u0647 &#8211; Sprite Maker<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0628\u0644\u0648\u06a9 \u0646\u0647\u0627\u06cc\u06cc\u060c \u062f\u0631 \u0645\u0648\u0631\u062f \u0646\u062a\u0627\u06cc\u062c \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0648 \u0628\u0647\u0628\u0648\u062f\u0647\u0627\u06cc \u0628\u0627\u0644\u0642\u0648\u0647 \u0628\u062d\u062b \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<br \/>\u0646\u062a\u0627\u06cc\u062c:<br \/>\u0633\u0627\u0632\u0646\u062f\u0647 \u062c\u0646 \u0645\u0627 \u0628\u0627 \u0645\u0648\u0641\u0642\u06cc\u062a \u06cc\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0631\u0627 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u0633\u062a.<br \/>\u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u06cc\u06a9 \u062a\u0635\u0648\u06cc\u0631 256&#215;256 \u067e\u06cc\u06a9\u0633\u0644\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0646\u062f\u0647 \u06cc\u06a9 \u06a9\u0627\u0631\u0627\u06a9\u062a\u0631 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0633\u0627\u062f\u0647 \u0627\u0633\u062a.<br \/>\u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u062f\u0631 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0628\u0647 \u062f\u0642\u062a 90 \u062f\u0631\u0635\u062f \u062f\u0633\u062a \u06cc\u0627\u0641\u062a\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0646\u062a\u06cc\u062c\u0647<br \/>\u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 PyTorch \u0648 Python \u06cc\u06a9 sprite maker \u0628\u0633\u0627\u0632\u06cc\u0645. <br \/>\u0645\u0627 \u06cc\u06a9 \u0633\u0627\u0632\u0646\u062f\u0647 \u062c\u0646 \u0631\u0627 \u0631\u0648\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0622\u0645\u0648\u0632\u0634 \u062f\u0627\u062f\u0647 \u0627\u06cc\u0645 \u0648 \u0639\u0645\u0644\u06a9\u0631\u062f \u0622\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645. <br \/>\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0632 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0628\u0631 \u0627\u0633\u0627\u0633 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u062a\u0646 \u0648 \u062a\u0635\u0648\u06cc\u0631 \u0648\u0631\u0648\u062f\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647\u200c\u0627\u06cc\u0645.<\/p>\n<p>\u0628\u0639\u062f \u0686\u06cc\u061f\u061f<\/p>\n<p>\u0641\u06cc\u0644\u0645\u0646\u0627\u0645\u0647 \u06a9\u0627\u0645\u0644:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>import torch\nimport os\nfrom glob import glob\nfrom torch import nn, optim\nfrom torch.utils.data import DataLoader, Dataset\nfrom torchvision import models, transforms\nfrom transformers import VisionEncoderDecoderModel, ViTImageProcessor, AutoModel, AutoTokenizer\nimport numpy as np\nfrom PIL import Image\nimport matplotlib.pyplot as plt\nfrom sklearn.decomposition import PCA\nfrom rich import print as rp\nimport wandb\n\n# Initialize WandB\nwandb.init(project=\"spritemaker\", entity=\"goldenkooy\")\n\n# Text encoder class\nclass TextEncoder:\n    def __init__(self, model_name=\"bert-base-uncased\"):\n        self.tokenizer = AutoTokenizer.from_pretrained(model_name, cache_dir=\".\/models\")\n        self.model = AutoModel.from_pretrained(model_name, cache_dir=\".\/models\")\n        self.model.eval()\n\n    def encode_text(self, text):\n        with torch.no_grad():\n            inputs = self.tokenizer(text, return_tensors=\"pt\", padding=True, truncation=True)\n            outputs = self.model(**inputs)\n        return outputs.last_hidden_state[:, 0, :]\n\n# Image encoder class\nclass ImageEncoder:\n    def __init__(self):\n        self.model = models.resnet50(weights=models.ResNet50_Weights.IMAGENET1K_V2)\n        self.model.eval()\n        self.transform = transforms.Compose([\n            transforms.Resize((224, 224)),\n            transforms.ToTensor(),\n            transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])\n        ])\n\n    def encode_image(self, image_path):\n        image = Image.open(image_path).convert('RGB')\n        image = self.transform(image)\n        image = image.unsqueeze(0)  # Add batch dimension\n        with torch.no_grad():\n            features = self.model(image)\n        return features\n\n# Sprite and text dataset class\nclass SpriteTextDataset(Dataset):\n    def __init__(self, image_dir, text_dir, image_encoder, text_encoder):\n        self.image_encoder = image_encoder\n        self.text_encoder = text_encoder\n        self.data = []\n\n        # Load all image paths\n        image_paths = glob(os.path.join(image_dir, '*.png'))\n\n        # Debug: rp the found image paths\n        rp(f\"Found image paths: {image_paths}\")\n\n        # Load descriptions and pair them with images\n        for image_path in image_paths:\n            base_filename = os.path.splitext(os.path.basename(image_path))[0]\n            text_path = os.path.join(text_dir, f\"{base_filename}.txt\")\n            if os.path.exists(text_path):\n                with open(text_path, 'r', encoding='utf-8') as file:\n                    description = file.read().strip()\n                    self.data.append((image_path, description))\n            else:\n                rp(f\"Warning: No description file found for {image_path}\")\n\n        # Debug: rp the dataset size\n        rp(f\"Dataset size: {len(self.data)}\")\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        image_path, text = self.data[idx]\n        image_features = self.image_encoder.encode_image(image_path)\n        text_features = self.text_encoder.encode_text(text)\n\n        combined_features = torch.cat((image_features, text_features), dim=1)\n        return combined_features\n\n# Descriptor class for generating descriptions\nclass Descriptor:\n    def __init__(self, cache_dir=\".\/models\"):\n        self.model = VisionEncoderDecoderModel.from_pretrained(\n            \"nlpconnect\/vit-gpt2-image-captioning\", cache_dir=cache_dir\n        )\n        self.feature_extractor = ViTImageProcessor.from_pretrained(\n            \"nlpconnect\/vit-gpt2-image-captioning\", cache_dir=cache_dir\n        )\n        self.tokenizer = AutoTokenizer.from_pretrained(\n            \"nlpconnect\/vit-gpt2-image-captioning\", cache_dir=cache_dir\n        )\n\n        self.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n        self.model.to(self.device)\n\n        self.max_length = 16 \n        self.num_beams = 4\n        self.gen_kwargs = {\"max_length\": self.max_length, \"num_beams\": self.num_beams}\n\n    def describe_image(self, image_path):\n        image = Image.open(image_path)\n        if image.mode != \"RGB\":\n            image = image.convert(mode=\"RGB\")\n\n        pixel_values = self.feature_extractor(images=image, return_tensors=\"pt\").pixel_values\n        pixel_values = pixel_values.to(self.device)\n\n        output_ids = self.model.generate(pixel_values, **self.gen_kwargs)\n        description = self.tokenizer.decode(output_ids[0], skip_special_tokens=True).strip()\n        return description\n\n# VAE model class\nclass VAE(nn.Module):\n    def __init__(self, input_dim, latent_dim):\n        super(VAE, self).__init__()\n        self.fc1 = nn.Linear(input_dim, 512)\n        self.fc21 = nn.Linear(512, latent_dim)\n        self.fc22 = nn.Linear(512, latent_dim)\n        self.fc3 = nn.Linear(latent_dim, 512)\n        self.fc4 = nn.Linear(512, input_dim)\n\n    def encode(self, x):\n        h1 = torch.relu(self.fc1(x))\n        return self.fc21(h1), self.fc22(h1)\n\n    def reparameterize(self, mu, logvar):\n        std = torch.exp(0.5 * logvar)\n        eps = torch.randn_like(std)\n        return mu + eps * std\n\n    def decode(self, z):\n        h3 = torch.relu(self.fc3(z))\n        return torch.sigmoid(self.fc4(h3))\n\n    def forward(self, x):\n        mu, logvar = self.encode(x)\n        z = self.reparameterize(mu, logvar)\n        return self.decode(z), mu, logvar\n\n# Utility functions for training and visualization\nclass Utils:\n    def __init__(self, dataset, model, optimizer, text_encoder, checkpoint_dir=\"checkpoints\"):\n        self.train_data = dataset\n        self.model = model\n        self.optimizer = optimizer\n        self.checkpoint_dir = checkpoint_dir\n        self.text_encoder = text_encoder\n        os.makedirs(checkpoint_dir, exist_ok=True)\n\n    def save_checkpoint(self, epoch, loss):\n        checkpoint_path = os.path.join(self.checkpoint_dir, 'latest_checkpoint.pth')\n        checkpoint = {\n            'epoch': epoch,\n            'model_state_dict': self.model.state_dict(),\n            'optimizer_state_dict': self.optimizer.state_dict(),\n            'loss': loss\n        }\n        torch.save(checkpoint, checkpoint_path)\n        rp(f'Checkpoint saved at {checkpoint_path}')\n\n    def load_checkpoint(self):\n        checkpoint_path = os.path.join(self.checkpoint_dir, 'latest_checkpoint.pth')\n        if os.path.exists(checkpoint_path):\n            checkpoint = torch.load(checkpoint_path)\n            self.model.load_state_dict(checkpoint['model_state_dict'])\n            self.optimizer.load_state_dict(checkpoint['optimizer_state_dict'])\n            epoch = checkpoint['epoch']\n            loss = checkpoint['loss']\n            rp(f'Checkpoint loaded from {checkpoint_path}, epoch {epoch}, loss {loss}')\n            return epoch, loss\n        else:\n            rp(f'No checkpoint found at {checkpoint_path}')\n            return None, None\n\n    def visualize_reconstructions(self, device=\"cpu\"):\n        self.model.eval()\n        with torch.no_grad():\n            for i, data in enumerate(self.train_data):\n                data = data.to(device)\n                reconstructed, _, _ = self.model(data)\n                original = data.detach().cpu().numpy()\n                reconstructed = reconstructed.detach().cpu().numpy()\n\n                # Separate the image and text features\n                original_image_features = original[:, :1000]\n                reconstructed_image_features = reconstructed[:, :1000]\n\n                # For a single sample, visualize the original and reconstructed images\n                plt.figure(figsize=(12, 6))\n                plt.subplot(1, 2, 1)\n                plt.title('Original Image')\n                self.visualize_image(original_image_features[0])  # Visualize original image\n\n                plt.subplot(1, 2, 2)\n                plt.title('Reconstructed Image')\n                self.visualize_image(reconstructed_image_features[0])  # Visualize reconstructed image\n\n                plt.show()\n\n                if i &gt;= 10:\n                    break\n\n    def visualize_image(self, text_prompt, num_samples=1):\n        # Encode the text prompt\n        text_features = self.text_encoder.encode_text(text_prompt)\n\n        # Generate random latent variables\n        latent_variables = torch.randn(num_samples, self.model.latent_dim)\n\n        # Concatenate text features with latent variables\n        combined_features = torch.cat((latent_variables, text_features.expand(num_samples, -1)), dim=1)\n\n        # Decode the combined features\n        with torch.no_grad():\n            generated_images = self.model.decode(combined_features)\n\n        # Visualize the generated images\n        for i in range(num_samples):\n            plt.figure(figsize=(4, 4))\n            plt.imshow(generated_images[i].reshape(224, 224))  # Reshape as per your image size\n            plt.axis('off')\n            plt.title(f'Generated Image {i+1}')\n            plt.show()\n\n\n    def train_vae(self, epochs=10, batch_size=32, learning_rate=1e-3):\n        dataloader = DataLoader(self.train_data, batch_size=batch_size, shuffle=True)\n        for epoch in range(epochs):\n            self.model.train()\n            for batch in dataloader:\n                batch = batch.to(next(self.model.parameters()).device)\n                self.optimizer.zero_grad()\n                recon_batch, mu, logvar = self.model(batch)\n                loss = self.loss_function(recon_batch, batch, mu, logvar)\n                loss.backward()\n                self.optimizer.step()\n            rp(f'Epoch {epoch + 1}, Loss: {loss.item()}')\n            self.save_checkpoint(epoch + 1, loss.item())\n            # Log the current learning rate to WandB\n            wandb.log({\"learning_rate\": self.optimizer.param_groups[0]['lr']}, step=epoch)\n\n            # Log the loss for the epoch\n            wandb.log({\"epoch_loss\": loss.item()}, step=epoch)\n\n            # print(f'Epoch {epoch + 1}, Loss: {loss.item()}')\n\n    def loss_function(self, recon_x, x, mu, logvar):\n        MSE = nn.functional.mse_loss(recon_x, x, reduction='sum')\n        KLD = -0.5 * torch.sum(1 + logvar - mu.pow(2) - logvar.exp())\n        return MSE + KLD\n\n# Assuming the rest of the script remains the same\n# Instantiate encoders\ntext_encoder = TextEncoder()\nimage_encoder = ImageEncoder()\n\n# Descriptor for generating descriptions\ndescriptor = Descriptor()\n\n# Paths\nimage_dir=\".\/trainings_data\/spritesheets\"\ntext_dir=\".\/trainings_data\/texts\"\n\n# Functions to fetch missing items and extract filenames\ndef fetch_missing_items(list1, list2):\n    set2 = set(list2)\n    return [item for item in list1 if item not in set2]\n\ndef extract_filenames(paths):\n    return [os.path.splitext(os.path.basename(path))[0] for path in paths]\n\n# Get lists of text and image files\ntext_files = glob(os.path.join(text_dir, '*.txt'))\nimage_files = glob(os.path.join(image_dir, '*.png'))\n\n# Extract just the filenames without extensions for comparison\ntext_names = extract_filenames(text_files)\nimage_names = extract_filenames(image_files)\n\n# Find descriptions missing for images\nmissing_descriptions = fetch_missing_items(image_names, text_names)\n\n# Generate and write descriptions for missing files\nfor missing_name in missing_descriptions:\n    image_path = os.path.join(image_dir, f\"{missing_name}.png\")\n    text_path = os.path.join(text_dir, f\"{missing_name}.txt\")\n\n    try:\n        description = descriptor.describe_image(image_path)\n        with open(text_path, \"w\") as f:\n            f.write(description)\n        rp(f\"Generated description for: {missing_name}\")\n    except Exception as e:\n        rp(f\"Error generating description for {missing_name}: {e}\")\n\n# Create dataset\ndataset = SpriteTextDataset(image_dir, text_dir, image_encoder, text_encoder)\n\n# Verify dataset size\nrp(f\"Final dataset size: {len(dataset)}\")\n\n# 1000 features from resnet-50 + 768 features from BERT = 1768 input dimensions\nvae = VAE(input_dim=1768, latent_dim=70)\n\n# Create an optimizer\noptimizer = optim.Adam(vae.parameters(), lr=1e-3)\n\n# Instantiate utilities\nutils = Utils(dataset, vae, optimizer, text_encoder)\n\n# Optionally load checkpoint\nstart_epoch, start_loss = utils.load_checkpoint()\n\n# Train VAE\nif start_epoch is None:\n    start_epoch = 0  # If no checkpoint is found, start from epoch 0\nutils.train_vae(epochs=600 - start_epoch)\n\n# Visualize progress\nutils.visualize_reconstructions()\n\n# Usage\ntext_prompt = \"A pixel art character with a blue hat\"\nutils.visualize_image(text_prompt)\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0645\u0647:<br \/>\u0637\u0648\u0644 \u0648 \u067e\u06cc\u0686\u06cc\u062f\u06af\u06cc:\\<br \/>\u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u0628\u0633\u06cc\u0627\u0631 \u0637\u0648\u0644\u0627\u0646\u06cc \u0627\u0633\u062a \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0631\u0627\u06cc \u0645\u0628\u062a\u062f\u06cc\u0627\u0646 \u0637\u0627\u0642\u062a \u0641\u0631\u0633\u0627 \u0628\u0627\u0634\u062f.  \u0634\u06a9\u0633\u062a\u0646 \u0622\u0646 \u0628\u0647 \u0642\u0633\u0645\u062a \u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0648 \u0642\u0627\u0628\u0644 \u0647\u0636\u0645 \u062a\u0631 \u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0633\u0631\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062e\u0648\u0627\u0646\u0627\u06cc\u06cc \u0648 \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0631\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u062f.<br \/>\u0631\u0633\u06cc\u062f\u06af\u06cc \u0628\u0647 \u062e\u0637\u0627: <br \/>\u062f\u0631 \u062d\u0627\u0644\u06cc \u06a9\u0647 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u062c\u0627\u0645\u0639 \u0627\u0633\u062a\u060c \u0627\u0632 \u062c\u0645\u0644\u0647 \u062e\u0637\u0627\u0647\u0627\u06cc \u0631\u0627\u06cc\u062c \u0648 \u0646\u06a9\u0627\u062a \u0639\u06cc\u0628 \u06cc\u0627\u0628\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0632\u0628\u0627\u0646 \u0622\u0645\u0648\u0632\u0627\u0646 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0645\u0634\u06a9\u0644\u0627\u062a \u0627\u062d\u062a\u0645\u0627\u0644\u06cc \u062f\u0631 \u062d\u06cc\u0646 \u0627\u062c\u0631\u0627 \u0622\u0645\u0627\u062f\u0647 \u06a9\u0646\u062f.<br \/>\u062e\u0631\u0648\u062c\u06cc \u0647\u0627\u06cc \u0628\u0635\u0631\u06cc: <br \/>\u0634\u0627\u0645\u0644 \u062e\u0631\u0648\u062c\u06cc\u200c\u0647\u0627\u06cc \u0628\u0635\u0631\u06cc \u0627\u0633\u067e\u0631\u0627\u06cc\u062a\u200c\u0647\u0627 \u0648 \u06af\u0627\u0645\u200c\u0647\u0627\u06cc \u0645\u06cc\u0627\u0646\u06cc \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u062f\u0631\u06a9 \u0648 \u062a\u0639\u0627\u0645\u0644 \u0631\u0627 \u062a\u0627 \u062d\u062f \u0632\u06cc\u0627\u062f\u06cc \u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0647\u062f.  \u0628\u0635\u0631\u06cc \u0647\u0627 \u0628\u0647 \u0648\u06cc\u0698\u0647 \u062f\u0631 \u0622\u0645\u0648\u0632\u0634 \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u067e\u0631\u062f\u0627\u0632\u0634 \u062a\u0635\u0648\u06cc\u0631 \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0647\u0633\u062a\u0646\u062f.<br \/>\u0645\u0639\u06cc\u0627\u0631\u0647\u0627\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f: <br \/>\u062a\u0627\u06a9\u06cc\u062f \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631 \u0627\u0631\u0632\u06cc\u0627\u0628\u06cc \u0639\u0645\u0644\u06a9\u0631\u062f \u0645\u062f\u0644 \u0648 \u062a\u0648\u0636\u06cc\u062d \u0645\u0639\u06cc\u0627\u0631\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u06cc\u0646\u0634 \u0628\u0647\u062a\u0631\u06cc \u0631\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0628\u0647\u06cc\u0646\u0647 \u0633\u0627\u0632\u06cc \u0645\u062f\u0644 \u0628\u0647 \u06cc\u0627\u062f\u06af\u06cc\u0631\u0646\u062f\u06af\u0627\u0646 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f.<br \/>\u0639\u0646\u0627\u0635\u0631 \u062a\u0639\u0627\u0645\u0644\u06cc: <br \/>\u0627\u0641\u0632\u0648\u062f\u0646 \u0639\u0646\u0627\u0635\u0631 \u062a\u0639\u0627\u0645\u0644\u06cc \u0645\u0627\u0646\u0646\u062f \u0622\u0632\u0645\u0648\u0646\u200c\u0647\u0627 \u06cc\u0627 \u062a\u0645\u0631\u06cc\u0646\u200c\u0647\u0627\u06cc \u06a9\u0648\u0686\u06a9 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0647\u0631 \u0628\u0644\u0648\u06a9 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0641\u0631\u0622\u06cc\u0646\u062f \u06cc\u0627\u062f\u06af\u06cc\u0631\u06cc \u0631\u0627 \u062c\u0630\u0627\u0628\u200c\u062a\u0631 \u0648 \u0645\u0624\u062b\u0631\u062a\u0631 \u06a9\u0646\u062f.<br \/>\u062a\u0648\u0635\u06cc\u0641\u06af\u0631 \u0686\u0646\u062f \u0634\u06cc\u062a \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc\u060c \u0627\u0635\u0644\u0627\u062d \u0648 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f:<br \/>\u062a\u0648\u0644\u06cc\u062f \u0645\u062a\u0646 \u062a\u0648\u0635\u06cc\u0641\u06cc \u062f\u0631 \u0647\u0631 \u062c\u0646<\/p>\n<p>\u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0622\u06cc\u0646\u062f\u0647L:<br \/>\u0627\u0641\u0632\u0627\u06cc\u0634 \u062f\u0642\u062a \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0633\u0627\u0632 \u0628\u0627 \u0627\u0641\u0632\u0627\u06cc\u0634 \u0633\u0627\u06cc\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 \u0622\u0645\u0648\u0632\u0634\u06cc \u0648 <br \/>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 \u062a\u0631 \u0645\u0627\u0646\u0646\u062f:<br \/>\u0645\u06a9\u0627\u0646\u06cc\u0633\u0645 \u0647\u0627\u06cc \u062a\u0648\u062c\u0647 <br \/>\u0634\u0628\u06a9\u0647 \u0647\u0627\u06cc \u0645\u062a\u062e\u0627\u0635\u0645 \u0645\u0648\u0644\u062f (GANs).<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0647\u0627\u06cc \u0648\u0627\u0642\u0639\u06cc \u062a\u0631 \u0648 \u062c\u0630\u0627\u0628 \u062a\u0631\u060c \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631\u06cc \u0631\u0627 \u0628\u0647 \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f. <br \/>\u0645\u0627\u0646\u0646\u062f:<br \/>\u0627\u0646\u06cc\u0645\u06cc\u0634\u0646 <br \/>\u062c\u0644\u0648\u0647 \u0647\u0627\u06cc \u0635\u0648\u062a\u06cc\u060c <\/p>\n<p>\u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 sprite maker \u0628\u0631\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f sprite \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641\u060c <br \/>\u0645\u0627\u0646\u0646\u062f \u0628\u0627\u0632\u06cc \u0647\u0627\u06cc \u0648\u06cc\u062f\u0626\u0648\u06cc\u06cc\u060c <br \/>\u0648\u0627\u0642\u0639\u06cc\u062a \u0645\u062c\u0627\u0632\u06cc\u060c <br \/>\u0627\u0646\u06cc\u0645\u06cc\u0634\u0646<\/p>\n<p>\u067e\u0627\u06cc\u0627\u0646:<br \/>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u06cc\u06a9 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0633\u0627\u0632 \u0633\u0627\u062e\u062a\u0647 \u0627\u06cc\u0645\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0622\u0646 \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645. <br \/>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0627\u0641\u0632\u0648\u062f\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u062a\u06a9\u0646\u06cc\u06a9\u200c\u0647\u0627\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647\u200c\u062a\u0631\u060c \u062f\u0642\u062a \u0648 \u0642\u0627\u0628\u0644\u06cc\u062a\u200c\u0647\u0627\u06cc \u0633\u0627\u0632\u0646\u062f\u0647 \u0627\u0633\u067e\u0631\u0627\u06cc\u062a \u0631\u0627 \u0628\u0647\u0628\u0648\u062f \u0628\u062e\u0634\u06cc\u0645.<\/p>\n<p>\u0627\u0632 \u0627\u06cc\u0646\u06a9\u0647 \u0647\u0645\u0631\u0627\u0647 \u0628\u0627 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0631\u062f\u06cc\u062f \u0645\u062a\u0634\u06a9\u0631\u0645!  \u0627\u0645\u06cc\u062f\u0648\u0627\u0631\u0645 \u0686\u06cc\u0632 \u062c\u062f\u06cc\u062f \u0648 \u0645\u0641\u06cc\u062f\u06cc \u06cc\u0627\u062f \u06af\u0631\u0641\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f.  \u0627\u06af\u0631 \u0633\u0648\u0627\u0644\u06cc \u062f\u0627\u0631\u06cc\u062f \u06cc\u0627 \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06a9\u0645\u06a9 \u0628\u06cc\u0634\u062a\u0631\u06cc \u062f\u0627\u0631\u06cc\u062f\u060c \u0644\u0637\u0641\u0627 \u062f\u0631\u06cc\u063a \u0646\u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u06af\u0631\u062a\u0632  CodeMonkeyXL <\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0633\u0641\u0631\u06cc \u0647\u06cc\u062c\u0627\u0646 \u0627\u0646\u06af\u06cc\u0632 \u0628\u0647 \u0642\u0644\u0645\u0631\u0648 \u0647\u0646\u0631 \u062f\u06cc\u062c\u06cc\u062a\u0627\u0644 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u062a\u062e\u06cc\u0644 \u0628\u0627 \u0641\u0646\u0627\u0648\u0631\u06cc \u0631\u0648\u0628\u0631\u0648 \u0645\u06cc \u0634\u0648\u062f! \u0622\u06cc\u0627 \u062a\u0627 \u0628\u0647 \u062d\u0627\u0644 \u0622\u0631\u0632\u0648 \u062f\u0627\u0634\u062a\u0647 \u0627\u06cc\u062f \u06a9\u0647 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0627\u0632 \u0635\u0641\u062d\u0627\u062a \u0631\u0645\u0627\u0646 \u0645\u0648\u0631\u062f \u0639\u0644\u0627\u0642\u0647 \u062e\u0648\u062f \u0628\u0647 \u0634\u062e\u0635\u06cc\u062a \u0647\u0627 \u062c\u0627\u0646 \u0628\u062f\u0647\u06cc\u062f \u06cc\u0627 \u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u06cc\u06a9 \u062f\u06a9\u0645\u0647 \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u062e\u0627\u0631\u0642 \u0627\u0644\u0639\u0627\u062f\u0647 \u0627\u06cc \u0631\u0627 \u0628\u0647 \u0630\u0647\u0646 \u0645\u062a\u0628\u0627\u062f\u0631 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u061f \u0645\u0639\u0631\u0641\u06cc \u062f\u0646\u06cc\u0627\u06cc &hellip;<\/p>\n","protected":false},"author":2,"featured_media":64420,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-64419","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/64419","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=64419"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/64419\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/64420"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=64419"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=64419"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=64419"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}