{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Finalterm\n", "\n", "SEOYEON CHOI \n", "2022-12-13\n", "\n", "> 기말고사" ], "id": "40d1b490-5276-4f5b-a398-68ca90c57994" }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import torch \n", "from fastai.text.all import *" ], "id": "e318419b-5f89-413d-863e-c760ad77321e" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `1`. COVID19 tweets $\\to$ 텍스트생성 (30점)\n", "\n", "아래의 코드를 이용하여 자료를 다운로드 하라." ], "id": "bd6832dd-2357-4c7e-8226-bb31de77f2c7" }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "
41157 rows × 6 columns
\n", "" ] } } ], "source": [ "df = pd.read_csv('https://raw.githubusercontent.com/guebin/STML2022/main/posts/Corona_NLP_train.csv',encoding=\"ISO-8859-1\")\n", "df" ], "id": "4cd6aea4-e2aa-4379-8957-75be81a3466a" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(1)` `TextDataLoaders.from_df`을 이용하여 dls오브젝트를 만들어라.\n", "\n", "- text_col=‘OriginalTweet’ 로 설정\n", "- is_lm=True 로 설정\n", "- seq_len=64 로 설정" ], "id": "174b0a10-832e-4b01-ac15-3760b7467db0" }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "## 올바르게 dls를 생성하였을 경우 dls.show_batch()의 결과는 아래와 같음. " ], "id": "3fc977fd-55d8-4762-aba7-e9aed0200bc4" }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } } ], "source": [ "dls = TextDataLoaders.from_df(df,is_lm=True,seq_len=64,text_col='OriginalTweet')" ], "id": "2d57acc0-1ee8-44bb-93e5-971fb87681e1" }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": {} } ], "source": [ "dls.show_batch()" ], "id": "f7e286d0-9aab-43b5-8a1e-048694364d03" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(2)` language_model_learner를 이용하여 오브젝트를 생성하라.\n", "`lrnr.fine_tune(3,1e-1)`을 이용하여 학습하라.\n", "\n", "- arch= AWD_LSTM 이용\n", "- metrics = \\[accuracy,perplexity\\]" ], "id": "8b699b16-0df4-43e6-aabf-7f33d97fb3e1" }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "lrnr = language_model_learner(dls, arch= AWD_LSTM, metrics=[accuracy,perplexity] )" ], "id": "ba75f739-cc65-4269-9e2a-cde7abecc0c0" }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": {} }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": {} } ], "source": [ "lrnr.fine_tune(3,1e-1)" ], "id": "eb9d5140-4ef1-4f7a-94c9-26dcbde198f9" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(3)` “the price of” 이후에 이어질 단어들을 생성하라. (`n_words=20` 으로\n", "설정할 것)" ], "id": "ee237555-c48a-4d9e-b816-1925fffc0029" }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "'the price of stuff increases in other states as a result of the # coronavirus pandemic . So it makes alternatives .'" ] } } ], "source": [ "## 생성예시" ], "id": "abbd606d-3248-4601-9d6b-08caa25e0458" }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "'the price of what we need is on Check out some Facebook websites Live with you and adapt to'" ] } } ], "source": [ "lrnr.predict('the price of', n_words=20) " ], "id": "e9369482-45c5-49be-9c8d-a1a0af7eb4af" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `2`. COVID19 tweets $\\to$ 분류 (30점)\n", "\n", "아래의 코드를 이용하여 자료를 다운로드 하라." ], "id": "c05e23cf-08f1-416a-9c46-7fc3ae447524" }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "41157 rows × 6 columns
\n", "" ] } } ], "source": [ "df = pd.read_csv('https://raw.githubusercontent.com/guebin/STML2022/main/posts/Corona_NLP_train.csv',encoding=\"ISO-8859-1\")\n", "df" ], "id": "bfc68570-5e4f-432a-b44d-a5b9a835f9bb" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(1)` `TextDataLoaders.from_df`을 이용하여 dls오브젝트를 만들어라.\n", "\n", "- text_col=’OriginalTweet’로 설정\n", "- label_col=’Sentiment’로 설정\n", "- seq_len=64 로 설정" ], "id": "4e9ae8d4-d613-4908-b7a8-211699427ccc" }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } }, { "output_type": "display_data", "metadata": {}, "data": {} } ], "source": [ "## 올바르게 dls를 생성하였을 경우 dls.show_batch()의 결과는 아래와 같음. " ], "id": "50ee1aea-8f42-41d1-abfc-fc4257f282b7" }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } } ], "source": [ "dls = TextDataLoaders.from_df(df,text_col='OriginalTweet',label_col='Sentiment',seq_len=64)" ], "id": "2f5d5274-68cd-428f-a136-d3d683b4c48d" }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": {} } ], "source": [ "dls.show_batch()" ], "id": "e6111ecb-6612-4be9-b07b-2df08e550ab6" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(2)` text_classifier_learner를 이용하여 오브젝트를 생성하라.\n", "`lrnr.fine_tune(5,1e-2)`을 이용하여 학습하라.\n", "\n", "- arch= AWD_LSTM 이용\n", "- metrics = accuracy 이용" ], "id": "1286d3fa-df08-49fa-bd62-4f23a1556360" }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "lrnr = text_classifier_learner(dls,AWD_LSTM,metrics=accuracy).to_fp16()" ], "id": "cfda50ef-998c-4fd5-8335-58d9ee81e69f" }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": {} }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": {} } ], "source": [ "lrnr.fine_tune(5,1e-2)" ], "id": "1061dbf5-b072-4367-9730-65404df50d32" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(3)` 아래의 텍스트에 대한 분류결과를 확인하라.\n", "\n", "- “the government’s approach to the pendemic has been a complete\n", " disaster”\n", "- “the new vaccines hold the promise of a quick return to economic\n", " growth”\n", "\n", "**hint** “the government’s approach to the pendemic has been a complete\n", "disaster” 에 대하여서는 부정으로, “the new vaccines hold the promise of\n", "a quick return to economic growth”에 대하여서는 긍정으로 예측되어야\n", "적절하다.\n", "\n", "negative" ], "id": "4575deef-fb85-42c8-bc97-3c61e0ee8dbb" }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "('Extremely Negative',\n", " tensor(0),\n", " tensor([8.7544e-01, 3.0173e-06, 1.2416e-01, 7.9043e-05, 3.0868e-04]))" ] } } ], "source": [ "lrnr.predict(\"the government's approach to the pendemic has been a complete disaster\") " ], "id": "0f25d531-8732-4d3d-85f6-41b7e2f74356" }, { "cell_type": "markdown", "metadata": {}, "source": [ "positive" ], "id": "fbd84a20-1e85-423b-9e80-b6a8ced9a020" }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/html": [ "\n", "" ] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/html": [] } }, { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "('Extremely Positive',\n", " tensor(1),\n", " tensor([1.2628e-06, 9.2473e-01, 5.2453e-05, 4.5041e-05, 7.5169e-02]))" ] } } ], "source": [ "lrnr.predict(\"the new vaccines hold the promise of a quick return to economic growth\") " ], "id": "38ef0569-07e8-4e53-b32b-7e5e5b9af038" }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `3`. human numbers 5 (40점)\n", "\n", "아래와 같은 데이터가 있다고 하자." ], "id": "e9dd15a5-f242-4732-bf94-cc446f252adc" }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "txt = (['one',',','two',',','three',',','four',',','five',',']*100)[:-1]\n", "mapping = {',':0, 'one':1, 'two':2, 'three':3, 'four':4, 'five':5} \n", "txt_x = txt[:-1]\n", "txt_y = txt[1:] " ], "id": "9585575e-a662-465f-85a4-318afa96ffc3" }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "(['one', ',', 'two', ',', 'three'], [',', 'two', ',', 'three', ','])" ] } } ], "source": [ "txt_x[:5], txt_y[:5]" ], "id": "91fb22e3-b18d-4e90-85cd-1c5f6457fcf4" }, { "cell_type": "code", "execution_count": 59, "metadata": {}, "outputs": [], "source": [ "def f(txt,mapping):\n", " return [mapping[key] for key in txt] \n", "sig = torch.nn.Sigmoid()\n", "soft = torch.nn.Softmax(dim=1)\n", "tanh = torch.nn.Tanh()" ], "id": "4a10f056-8e6f-451b-ac2f-07c6864d5220" }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "x = torch.nn.functional.one_hot(torch.tensor(f(txt_x,mapping))).float().to(\"cuda:0\")\n", "y = torch.nn.functional.one_hot(torch.tensor(f(txt_y,mapping))).float().to(\"cuda:0\")" ], "id": "93d05d97-c8c0-4ecd-93ad-e71dcfe91360" }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "(tensor([[0., 1., 0., 0., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 1., 0., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 0., 1., 0., 0.]], device='cuda:0'),\n", " tensor([[1., 0., 0., 0., 0., 0.],\n", " [0., 0., 1., 0., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 0., 1., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.]], device='cuda:0'))" ] } } ], "source": [ "x[:5],y[:5]" ], "id": "411a6959-aa7e-471a-81e4-5d54f566c7f6" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(1)` `torch.nn.RNNCell()`을 이용하여 다음단어를 예측하는 신경망을\n", "설계하고 학습하라." ], "id": "c02a577c-14de-4566-a427-8273297d2e4e" }, { "cell_type": "code", "execution_count": 120, "metadata": {}, "outputs": [], "source": [ "torch.manual_seed(12345)\n", "rnncell=torch.nn.RNNCell(6,20).to(\"cuda:0\")\n", "linr = torch.nn.Linear(20,6).to(\"cuda:0\")" ], "id": "80b42424-4156-494d-acac-a14b2fd03dfd" }, { "cell_type": "code", "execution_count": 121, "metadata": {}, "outputs": [], "source": [ "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizr = torch.optim.Adam(list(rnncell.parameters())+list(linr.parameters()))" ], "id": "3afca045-e3d8-4cea-a494-b431b3161f6a" }, { "cell_type": "code", "execution_count": 122, "metadata": {}, "outputs": [], "source": [ "T = len(x) \n", "for epoc in range(500): \n", " ## 1~2\n", " loss = 0 \n", " ht = torch.zeros(1,20).to(\"cuda:0\") \n", " for t in range(T):\n", " xt,yt = x[[t]], y[[t]]\n", " ht = rnncell(xt,ht) \n", " ot = linr(ht) \n", " loss = loss + loss_fn(ot,yt) \n", " ## 3 \n", " loss.backward()\n", " ## 4 \n", " optimizr.step()\n", " optimizr.zero_grad()" ], "id": "4a02ec26-8bf4-4969-9df6-5a555479a708" }, { "cell_type": "code", "execution_count": 123, "metadata": {}, "outputs": [], "source": [ "_water = torch.zeros(1,20).to(\"cuda:0\") \n", "hidden[[0]] = rnncell(x[[0]],_water)\n", "for t in range(1,T):\n", " hidden[[t]] = rnncell(x[[t]],hidden[[t-1]])" ], "id": "0af542e2-8439-4748-b52b-3eefc978b93d" }, { "cell_type": "code", "execution_count": 124, "metadata": {}, "outputs": [], "source": [ "yhat = soft(linr(hidden))" ], "id": "e3b47c1a-18df-4890-a26a-960501d0c7ba" }, { "cell_type": "code", "execution_count": 125, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAMKCAYAAACFtPEXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsT\nAAALEwEAmpwYAAAS/ElEQVR4nO3dXYjld33H8e93d7KJG2MaSRqCsSYUEaTQNDvkplLsg5Jaqfau\ngRYvhPSigqUXxV61vetNH25KIa1BS1ulYKXSihqsEARbPWOjjU81mIgJqZsQNbvYzWbcXy92ArvO\n2c44c+b/39PP6wXLzsyZzO+T2eE9/zMze7bHGAXkOjb3AGBeIgDhRADCiQCEEwEIJwIQbu0i0N33\ndvfXuvux7n7P3Huqqrr7we4+3d2Pzr3lJd396u7+VHd/ubu/1N3vvgo2Xdfdn+3uL+xs+qO5N72k\nu49393909z/PvaWqqruf6O7/7O5HuntxpGet088JdPfxqvqvqnpTVT1ZVZ+rqvvGGF+eedfPVdXZ\nqvqbMcZPzbnlJd19W1XdNsb4fHffUFVbVfX2Od9X3d1Vdf0Y42x3X1NVn66qd48x/m2uTS/p7t+t\nqs2qesUY461XwZ4nqmpzjPHsUZ+1blcC91TVY2OMb4wxzlfVB6vqbTNvqjHGw1X13Nw7LjXGeHqM\n8fmdp89U1Veq6lUzbxpjjLM7z16z82v2z0LdfXtV/UpV/fXcW+awbhF4VVV965Lnn6yZP7DXQXff\nUVU/U1X/PvOUly67H6mq01X10Bhj9k1V9edV9XtVdWHmHZcaVfWJ7t7q7vuP8qB1iwA/ou5+eVV9\nqKp+Z4zx/Nx7xhg/GGPcVVW3V9U93T3r3afufmtVnR5jbM25Y4k3jDHurqpfrqrf3rnLeSTWLQJP\nVdWrL3n+9p2XscTO/e4PVdXfjTH+ce49lxpjfLeqPlVV98485Wer6ld37oN/sKp+obv/dt5JVWOM\np3Z+P11VH66Ld4WPxLpF4HNV9druvrO7T1TVr1fVR2bedFXa+SLce6vqK2OMP517T1VVd9/S3T+2\n8/TL6uIXeL8656Yxxu+PMW4fY9xRFz+e/nWM8Rtzburu63e+mFvdfX1Vvbmqjuw7T2sVgTHGdlW9\nq6o+Xhe/0PUPY4wvzbuqqrs/UFWfqarXdfeT3f3OuTfVxc9wv1kXP7M9svPrLTNvuq2qPtXdX6yL\n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\n" } } ], "source": [ "plt.matshow(yhat[-20:].data.to(\"cpu\"),cmap='bwr')" ], "id": "1e9284ce-0e30-45b7-9c2b-ff6069e54e51" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(2)` `torch.nn.RNN()`을 이용하여 다음단어를 예측하는 신경망을 설계하고\n", "학습하라." ], "id": "9b51c2b0-5399-42e1-a693-69a2141a1566" }, { "cell_type": "code", "execution_count": 151, "metadata": {}, "outputs": [], "source": [ "torch.manual_seed(12345)\n", "rnn = torch.nn.RNN(6,20).to(\"cuda:0\")\n", "linr=torch.nn.Linear(20,6).to(\"cuda:0\")\n", "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizr = torch.optim.Adam(list(rnncell.parameters())+list(linr.parameters()))" ], "id": "0b6fc5fc-d187-48d2-b35f-c1c9570f5da2" }, { "cell_type": "code", "execution_count": 152, "metadata": {}, "outputs": [], "source": [ "_water = torch.zeros(1,20).to(\"cuda:0\")\n", "for epoc in range(8000):\n", " ## 1 \n", " hidden,hT = rnn(x,_water)\n", " output = linr(hidden) \n", " ## 2 \n", " loss = loss_fn(output,y)\n", " ## 3 \n", " loss.backward()\n", " ## 4 \n", " optimizr.step()\n", " optimizr.zero_grad()" ], "id": "82a78282-76c3-416c-8d42-910312c965d5" }, { "cell_type": "code", "execution_count": 153, "metadata": {}, "outputs": [], "source": [ "yhat = soft(output)" ], "id": "509c5ec1-58d6-462d-a069-445f9ba5f211" }, { "cell_type": "code", "execution_count": 154, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "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\n" } } ], "source": [ "plt.matshow(yhat.data[-20:].to(\"cpu\"),cmap='bwr')" ], "id": "96615d10-44b3-40f6-bfc9-7e220a3ee224" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(3)` `torch.nn.LSTMCell()`을 이용하여 다음단어를 예측하는 신경망을\n", "설계하고 학습하라." ], "id": "e74bcf45-ac79-4c06-b727-adbc9e599e6f" }, { "cell_type": "code", "execution_count": 236, "metadata": {}, "outputs": [], "source": [ "torch.manual_seed(12345) \n", "lstmcell = torch.nn.LSTMCell(6,4).to(\"cuda:0\") \n", "linr = torch.nn.Linear(4,6).to(\"cuda:0\") \n", "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizr = torch.optim.Adam(list(lstmcell.parameters())+list(linr.parameters()),lr=0.1)" ], "id": "4bd17f36-59cc-4d0d-acdf-bf8264dc0682" }, { "cell_type": "code", "execution_count": 237, "metadata": {}, "outputs": [], "source": [ "for epoc in range(5000):\n", " ## 1\n", " hidden = []\n", " ht = torch.zeros(4).to(\"cuda:0\")\n", " ct = torch.zeros(4).to(\"cuda:0\")\n", " for xt,yt in zip(x,y): \n", " ht,ct = lstmcell(xt,(ht,ct))\n", " hidden.append(ht) \n", " hidden = torch.stack(hidden)\n", " output = linr(hidden)\n", " ## 2 \n", " loss = loss_fn(output,y)\n", " ## 3 \n", " loss.backward()\n", " ## 4 \n", " optimizr.step()\n", " optimizr.zero_grad()" ], "id": "483115cc-2a88-4502-9cf6-128ef99f569a" }, { "cell_type": "code", "execution_count": 238, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "text/plain": [ "array([[1., 0., 0., 0., 0., 0.],\n", " [0., 0., 1., 0., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 0., 1., 0., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 0., 0., 1., 0.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 0., 0., 0., 0., 1.],\n", " [1., 0., 0., 0., 0., 0.],\n", " [0., 1., 0., 0., 0., 0.]], dtype=float32)" ] } } ], "source": [ "yhat = soft(output)\n", "yhat[:10].to(\"cpu\").detach().numpy().round(3)" ], "id": "149d37a6-d2bd-47ae-b8fc-61443014f734" }, { "cell_type": "code", "execution_count": 242, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAMKCAYAAACFtPEXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsT\nAAALEwEAmpwYAAATSElEQVR4nO3df4zt+V3X8df79hbFLdLW3jQNEBdLxSDK2rlbqVazqNTiHwJR\nlKbGkpqsCRJSsVH+INJ/NDXE+AvFLLgUE6y1aqUh5UfTGrtiV2anrnWrAg1sQ5va3rWopRpNOx//\nmLPksuztHe6cOXNmX49HMplzvufM+bzvme95nh8zd86stQL0unLRAwAXSwSgnAhAORGAciIA5UQA\nyonAJTYzz52Zb92XGWbmvpn50Yuc51Zm5ttn5r/MzA9f9Cw3u2muX5qZ77yIGUTgcntukguNwJ3M\nMDPPOp9RPqdvTfK1a63X3OkFzIlt32aenOt5a603bfmyT0UEfh1m5jtm5rHNx+tn5u5Nxb9/Zj44\nMz85M5+/Oe+LZ+bHZ+ZoZh6amd9xDiO9KcmLZ+bRmfnBmfnjm7XfPjMPbg6/bmb+2tPNv+0ZknxP\nkufMzD+fmf86Mz88M7NZ+/GZ+Rsz8/4k3zQzr5yZ983M+2fmbTPznM35Dmbm32yut5+YmReddcCZ\n+YdJfluSH5uZvzQz/2pmPjAzD8/M796c540z84abvuaxzff37pn5mZn5x0keS/IlZ53nFnP9xZn5\n3pn5wpn58JOxmZm7ZuYXZ+bZ57ZPrbV8nOIjyUGS/5TkriTPSfLBJL8nyWeS3LM5zz9L8mc2h9+d\n5CWbw783yXvOYaa7kzy2OfzNSb5nc/inkzy8OfyDSf7orebf8gz3JfmfSb44J3cw70vyis1pjyf5\ny5vDL0jy3iR3bY7/lSR/Ncmzk/y7JNc22/90kge3dF09vln37yX57s22P5Tk0c3hNyZ5w03nf2zz\nb7s7yXGSrz6n/erJub4lyfdutv1Ikq+56Tr4gfPcp67eKg78Gq9I8va11qeTZGb+ZZI/kOQX1lqP\nbs5zlOTuzb3a70vyts0dYZL8hnOe76Ekr5+Zr0jyn5M8b3Mv+vIk357kdbeY/z9seY6fXmt9ZLPG\nozm5Ef3bzWlv3Xz+6iRfkeSnNtfP5+UkGF+e5CuTvGuz/VlJPrbl+V6R5E8kyVrrPTPzW2bmN9/m\naz681np4y3N8Lm/NyY3/X+ck7v/gPPcpETi7/3vT4c8m+fyc3Av+j7XWPbsaYq310Zl5bpJX5eRe\n9vlJ/lSSX15rfeqmHee8PfX6uHkf+/Tm8yR511rr1Td/4cz8riQfXGu9/HxHfFqfya9+evwbbzr8\n6ezWO5L89Zl5fk4ewb0nJ4/gzmWfurSvCczMu2fmi3a45ENJvmFmftPM3JXkGzfbfo211v9K8gsz\n803Jr7yg9FXnMNOnknzBTccfTvL6nETgoSRvuGnGU89/xhlO4+Ekv39mviz5lee9vz3JzyS5NjMv\n32x/9sz8zi3MeLOHkrxmc/n3JXli8/16PMlLN9tfmuRLt7zuqa21fjnJYZK/k+RH11qfPc996lI+\nEti8aPJlST65qzXXWu+fmTfn5Pl2kvxAkl/6HF/ymiTfNzPflZPnuv80yX/c8kz/fWZ+amYeS/Jj\nOdnBX7nW+tDMfDgnjwYeutX8a60zPxV4ygz/J8nHT/E1N2bmW5K8ZWaefEj7XWutn52ZP5nk787M\nF+Zk//zbOXn9YlvemOTBmflAkv+d5LWb7f8iyZ+dmQ8m+fdJfnaLa96JtyZ5W05eZ3nSuexTs3mR\n4VKZma9M8rq11ndc9Cxw2V3KCADbc2lfEwC2QwSgnAhAuUsbgZm5/6JneCoznY6ZTm8Xc13aCCTZ\nx2+amU7HTKcnAsD52umPCF8ws+7e0mXdSHJtGxd0cLCNS0mS3LhxI9eubWWqrTHT6ezjTMn25nr8\n8cfzxBNPPO3vju/0NwbvTvLILhc8jcPDi54Azt31e++95WmeDkA5EYByIgDlRADKiQCUEwEoJwJQ\nTgSgnAhAORGAciIA5UQAyokAlBMBKHemCMzMqzbv2PqhuaD3VgfO5o4jMCfvMf/3k3xdTt5c8tWb\nN8MELpGzPBJ4WZIPrbV+fq31/3Lylkhfv52xgF05SwS+KMkv3nT8I5ttv8rM3D8zj8zMIzfOsBhw\nPs79hcG11gNrretrrev79xfcgLNE4KNJvuSm41+82QZcImeJwGGSl8zMl87M5yX55iTv2M5YwK7c\n8V8bXmt9Zma+LclPJHlWkgfXWtt8H3lgB870J8fXWu9M8s4tzQJcAL8xCOVEAMqJAJQTASgnAlBO\nBKCcCEA5EYByIgDlRADKiQCUEwEod6b/QPTrdnCQHB7udMlL68oe9vn4+KIn4Bzs4Z4G7JIIQDkR\n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\nAABJRU5ErkJggg==\n" } } ], "source": [ "plt.matshow(yhat.to(\"cpu\").data[:20],cmap='bwr',vmin=-1,vmax=1)\n", "plt.xticks(range(6),labels=[',','one','two','three','four','five']);" ], "id": "3fa68905-e450-40c9-b813-52ed183cbc14" }, { "cell_type": "markdown", "metadata": {}, "source": [ "`(4)` `torch.nn.LSTM()`을 이용하여 다음단어를 예측하는 신경망을 설계하고\n", "학습하라." ], "id": "9388dec9-aa3d-46dd-b34e-f69852836f8f" }, { "cell_type": "code", "execution_count": 243, "metadata": {}, "outputs": [], "source": [ "torch.manual_seed(12345) \n", "lstm = torch.nn.LSTM(6,20).to(\"cuda:0\") \n", "linr = torch.nn.Linear(20,6).to(\"cuda:0\") \n", "loss_fn = torch.nn.CrossEntropyLoss()\n", "optimizr = torch.optim.Adam(list(lstm.parameters())+list(linr.parameters()),lr=0.1)" ], "id": "3f7e8352-9749-4d0c-b8c1-76263ae5c70f" }, { "cell_type": "code", "execution_count": 244, "metadata": {}, "outputs": [], "source": [ "for epoc in range(5000):\n", " ## 1 \n", " hidden, (hT,cT) =lstm(x)\n", " output = linr(hidden) \n", " ## 2 \n", " loss = loss_fn(output,y) \n", " ## 3 \n", " loss.backward()\n", " ## 4 \n", " optimizr.step()\n", " optimizr.zero_grad() " ], "id": "f6391953-57a9-4bf4-aa87-ad13b4eccc3e" }, { "cell_type": "code", "execution_count": 245, "metadata": {}, "outputs": [ { "output_type": "display_data", "metadata": {}, "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAQEAAAMKCAYAAACFtPEXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90\nbGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsT\nAAALEwEAmpwYAAATPklEQVR4nO3df4zteX3X8df7cqnWpRaQG0Laxq0Ua2q1K3PBomi2apH6h22j\n1RKMNJisSW0arET7R2P5R4NpjL+qNbRuqUlFRMWShv4gYGStrJ07uOKitiXtkkIQ7kpVikYD8/GP\nOdvcbvdyp3fOnDmzr8cjmcw533PmfN73/HieHzP3nFlrBeh15aIHAC6WCEA5EYByIgDlRADKiQCU\nE4FLbGaePTPfui8zzMz9M/OjFznP7czMt8/Mf5mZH77oWW51y1y/NDPfeREziMDl9uwkFxqBu5lh\nZp5xPqN8Tt+a5GvXWq++2xOYE9u+zTwx13PWWm/c8mmfigj8OszMd8zMo5uv183MvZuKf//MfHBm\nfnJmPn9z3BfOzI/PzNHMPDQzv+McRnpjkhfOzCMz84Mz88c3a799Zh7c7H7tzPy1p5p/2zMk+Z4k\nz5qZfz4z/3VmfnhmZrP2YzPzN2bm/Um+aWZeMTPvm5n3z8zbZuZZm+MdzMy/2ZxvPzEzLzjrgDPz\nD5P8tiQ/NjN/aWb+1cx8YGYenpnfvTnOG2bm9bf8zKOby/femfmZmfnHSR5N8iVnnec2c/3Fmfne\nmfnCmfnwE7GZmXtm5hdn5pnndp1aa/k6xVeSgyT/Kck9SZ6V5INJfk+SzyS5b3Ocf5bkz2x2vzvJ\niza7f2+S95zDTPcmeXSz+5uTfM9m908neXiz+weT/NHbzb/lGe5P8j+TfHFO7mDel+Tlm8MeS/KX\nN7ufl+S9Se7Z7P8rSf5qkmcm+XdJrm22/+kkD27pvHpss+7fS/Ldm21/KMkjm91vSPL6W47/6Obf\ndm+S4yRffU7Xqyfm+pYk37vZ9iNJvuaW8+AHzvM6dfV2ceDXeHmSt6+1Pp0kM/Mvk/yBJL+w1npk\nc5yjJPdu7tV+X5K3be4Ik+Q3nPN8DyV53cx8RZL/nOQ5m3vRlyX59iSvvc38/2HLc/z0WusjmzUe\nycmN6N9uDnvr5vtXJ/mKJD+1OX8+LyfB+PIkX5nkXZvtz0jysS3P9/IkfyJJ1lrvmZnfMjO/+Q4/\n8+G11sNbnuNzeWtObvz/Oidx/wfneZ0SgbP7v7fs/mySz8/JveD/WGvdt6sh1lofnZlnJ3llTu5l\nn5vkTyX55bXWp2654py3J58ft17HPr35PknetdZ61a0/ODO/K8kH11ovO98Rn9Jn8qufHv/GW3Z/\nOrv1jiR/fWaem5NHcO/JySO4c7lOXdrXBGbm3TPzRTtc8qEk3zAzv2lm7knyjZttv8Za638l+YWZ\n+abkV15Q+qpzmOlTSb7glv0PJ3ldTiLwUJLX3zLjqec/4wyn8XCS3z8zX5b8yvPe357kZ5Jcm5mX\nbbY/c2Z+5xZmvNVDSV69Of37kzy+ubweS/LizfYXJ/nSLa97amutX05ymOTvJPnRtdZnz/M6dSkf\nCWxeNPmyJJ/c1ZprrffPzJtz8nw7SX4gyS99jh95dZLvm5nvyslz3X+a5D9ueab/PjM/NTOPJvmx\nnFzBX7HW+tDMfDgnjwYeut38a60zPxV40gz/J8nHT/EzN2fmW5K8ZWaeeEj7XWutn52ZP5nk787M\nF+bk+vm3c/L6xba8IcmDM/OBJP87yWs22/9Fkj87Mx9M8u+T/OwW17wbb03ytpy8zvKEc7lOzeZF\nhktlZr4yyWvXWt9x0bPAZXcpIwBsz6V9TQDYDhGAciIA5S5tBGbmgYue4cnMdDpmOr1dzHVpI5Bk\nHy80M52OmU5PBIDztdNfET5vZt27pdO6meTaNk7o4GAbp5IkuXnzZq5d28pUW2Om09nHmZLtzfXY\nY4/l8ccff8q/Hd/pXwzem+TGLhc8jcPDi54Azt31l7zktod5OgDlRADKiQCUEwEoJwJQTgSgnAhA\nORGAciIA5UQAyokAlBMBKCcCUE4EoNyZIjAzr9x8YuuH5oI+Wx04m7uOwJx8xvzfT/J1OflwyVdt\nPgwTuETO8kjgpUk+tNb6+bXW/8vJRyJ9/XbGAnblLBH4oiS/eMv+j2y2/Soz88DM3JiZGzfPsBhw\nPs79hcG11pvWWtfXWtf37x3cgLNE4KNJvuSW/V+82QZcImeJwGGSF83Ml87M5yX55iTv2M5YwK7c\n9bsNr7U+MzPfluQnkjwjyYNrrW1+jjywA2d6y/G11juTvHNLswAXwF8MQjkRgHIiAOVEAMqJAJQT\nASgnAlBOBKCcCEA5EYByIgDlRADKnek/EP26HRwkh4c7XfKOruxpB4+PL3oCSuzpLQDYFRGAciIA\n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\n" } } ], "source": [ "plt.matshow(soft(output).data[-20:].to(\"cpu\"),cmap='bwr',vmin=-1,vmax=1)\n", "plt.xticks(range(6),labels=[',','one','two','three','four','five']);" ], "id": "f6d04cb7-dab4-483b-8436-f173374d3f93" }, { "cell_type": "markdown", "metadata": {}, "source": [ "> 참고:\n", ">