From ca354998141dc3be2db231dce1c703de9b1f378a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pawe=C5=82=20Sk=C3=B3rzewski?= Date: Tue, 23 Apr 2024 18:33:13 +0200 Subject: [PATCH] Lab. 8 i 9 --- lab/08_Model_neuronowy_typu_word2vec.ipynb | 135 +++ lab/09_Model_neuronowy_rekurencyjny.ipynb | 987 +++++++++++++++++++++ lab/bow1.drawio.png | Bin 0 -> 23080 bytes lab/devsetppl.png | Bin 0 -> 62376 bytes 4 files changed, 1122 insertions(+) create mode 100644 lab/08_Model_neuronowy_typu_word2vec.ipynb create mode 100644 lab/09_Model_neuronowy_rekurencyjny.ipynb create mode 100644 lab/bow1.drawio.png create mode 100644 lab/devsetppl.png diff --git a/lab/08_Model_neuronowy_typu_word2vec.ipynb b/lab/08_Model_neuronowy_typu_word2vec.ipynb new file mode 100644 index 0000000..c76e025 --- /dev/null +++ b/lab/08_Model_neuronowy_typu_word2vec.ipynb @@ -0,0 +1,135 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Modelowanie Języka

\n", + "

9. Model neuronowy typu word2vec [ćwiczenia]

" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadania" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Proszę wykonać zadanie 1 lub zadanie 2 (nie oba naraz). Zadanie 3 można zrobić niezależnie." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie 1\n", + "\n", + "Wzorując się na materiałach z wykładu stworzyć 5-gramowy model neuronowy oparty na jednym ze schematów z wykładu, np.\n", + "\n", + "\n", + "![img](bow1.drawio.png \"Model typu worek słów\")\n", + "\n", + "\n", + "Warunkiem koniecznym jest, żeby przewidywać słowo środkowe, np. Mając tekst ['Ala', 'ma', '[MASK]'\n", + " 'i', 'psa'] chcemy przewidzieć kontekst środkowego słowa (tutaj '[MASK]')\n", + "\n", + "\n", + "\n", + "\n", + "Warunki zaliczenia:\n", + "- wynik widoczny na platformie zarówno dla dev i dla test\n", + "- wynik dla dev i test lepszy (niższy) niż 6.50 (liczone przy pomocy geval)\n", + "- deadline do końca dnia 15 maja 2024\n", + "- commitując rozwiązanie proszę również umieścić rozwiązanie w pliku /run.py (czyli na szczycie katalogu). Można przekonwertować jupyter do pliku python przez File → Download as → Python. Rozwiązanie nie musi być w pythonie, może być w innym języku.\n", + "- zadania wykonujemy samodzielnie\n", + "- w nazwie commita podaj nr indeksu\n", + "- w tagach podaj **neural-network** oraz **5gram**!\n", + "- zadanie tym razem jest dla polskiego odpowiednika word-gap https://gonito.net/challenge-my-submissions/retro-gap\n", + "- metryka to LogLossHashed (praktycznie to samo, co PerlpexityHased). Przelicznik, to LogLossHased = log(PerplexityHashed). Podając równe prawd. dla każdego słowa dostaniemy 6.93, bo log(1024) = 6.93\n", + "\n", + "Punktacja:\n", + "- podstawa: 60 punktów\n", + "- 40 punktów z najlepszy wynik z 2 grup\n", + "- 20 punktów z 3 kolejno najlepszych wyników z 2 grup\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Jak stworzyć model?\n", + "- warto bazować na kodzie ze wykładu 7 Zanurzenia słów\n", + "- elementy, które na pewno trzeba będzie wykorzystać to: nn.Embedding, nn.Linear, nn.Softmax\n", + "- w odróżnieniu do materiałów z wykładu lepiej nie korzystać z nn.Sequential, tylko wszystki operacje zapisywać w model.forward. Przy użyciu sequential może być problem np. z dodawaniem lub konkatenacją tensorów" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### W jaki sposób uzyskać lepszy wynik?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "- Po pierwsze proszę stosować sie do rad z poprzednich cwiczeń (trenowanie przez kilka epok i monitorowanie wyniku na zbiorze deweloperskim)\n", + "- dobry start to zawsze zaczęcie od jak najprostszego modelu (czyli 1 warstwa liniowa, zwykłe dodawanie embeddingów słów) i dopiero później go rozbudowywać monitorując wynik. Jest to rada uniwersalna w uczeniu maszynowym.\n", + "- Poza tym warto wypróbować przynajmniej kilka modeli z wykładu. Mając zaimplementowany cały kod dla jednego modelu, wystarczy jedynie delikatnie zmienić architekturę modelu i wytrenować go od nowa. Cała reszta kodu zostaje bez zmian.\n", + "- warto spróbować dodanie np 2 warstw liniowych (lub nawet 3) zamiast jednej warstwy (koniecznie trzeba dodać między nimi funkcję aktywacji, np RELU).\n", + "- poza tym można zmieniać różne parametry (np. wielkość słownika, wielkość warstwy ukrytej, różne funkcje aktywacji)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Zadanie 2\n", + "\n", + "Proszę zrobić parameter Hyperparameter Tuning dla zadania 1 i zaprezentować na forum grupy razem z wnioskami\n", + "\n", + "- wymóg wyniku najlepszego modelu, conajwyżej 6.10\n", + "- wnioski nie muszą być specjalnie rozbudowane, prezentacja może trwać 3-5minut lub dłużej\n", + "- należy wybrać dla siebie metodę hypermarameter tuningu\n", + "- należy stworzyć conajmniej 10 modeli, należy pokazać wyniku dla conajmniej paru\n", + "- oczywiście kod musi być automatyczny (a nie ręcznie zmieniamy paratery), natomiast nie ma wymogu korzystania ze specjalnych bibliotek\n", + "- podstawa punktów 100\n", + "- za wynik lepszy (niższy) niż 5.50 +20 punktów\n", + "- użycie GPU na dowolnym cloud lub od WMI + 30 punktów\n", + "- deadline do końca dnia 15 maja 2024" + ] + } + ], + "metadata": { + "author": "Jakub Pokrywka", + "email": "kubapok@wmi.amu.edu.pl", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "lang": "pl", + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]", + "title": "Ekstrakcja informacji", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/lab/09_Model_neuronowy_rekurencyjny.ipynb b/lab/09_Model_neuronowy_rekurencyjny.ipynb new file mode 100644 index 0000000..e0e84de --- /dev/null +++ b/lab/09_Model_neuronowy_rekurencyjny.ipynb @@ -0,0 +1,987 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "

Modelowanie Języka

\n", + "

10. Model neuronowy rekurencyjny [ćwiczenia]

" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "from torch import nn, optim\n", + "from torch.utils.data import DataLoader\n", + "import numpy as np\n", + "from collections import Counter\n", + "import re" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "device = 'cpu'" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2022-05-08 19:27:04-- https://wolnelektury.pl/media/book/txt/potop-tom-pierwszy.txt\n", + "Resolving wolnelektury.pl (wolnelektury.pl)... 51.83.143.148, 2001:41d0:602:3294::\n", + "Connecting to wolnelektury.pl (wolnelektury.pl)|51.83.143.148|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 877893 (857K) [text/plain]\n", + "Saving to: ‘potop-tom-pierwszy.txt.2’\n", + "\n", + "potop-tom-pierwszy. 100%[===================>] 857,32K --.-KB/s in 0,07s \n", + "\n", + "2022-05-08 19:27:04 (12,0 MB/s) - ‘potop-tom-pierwszy.txt.2’ saved [877893/877893]\n", + "\n", + "--2022-05-08 19:27:04-- https://wolnelektury.pl/media/book/txt/potop-tom-drugi.txt\n", + "Resolving wolnelektury.pl (wolnelektury.pl)... 51.83.143.148, 2001:41d0:602:3294::\n", + "Connecting to wolnelektury.pl (wolnelektury.pl)|51.83.143.148|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 1087797 (1,0M) [text/plain]\n", + "Saving to: ‘potop-tom-drugi.txt.2’\n", + "\n", + "potop-tom-drugi.txt 100%[===================>] 1,04M --.-KB/s in 0,08s \n", + "\n", + "2022-05-08 19:27:04 (12,9 MB/s) - ‘potop-tom-drugi.txt.2’ saved [1087797/1087797]\n", + "\n", + "--2022-05-08 19:27:05-- https://wolnelektury.pl/media/book/txt/potop-tom-trzeci.txt\n", + "Resolving wolnelektury.pl (wolnelektury.pl)... 51.83.143.148, 2001:41d0:602:3294::\n", + "Connecting to wolnelektury.pl (wolnelektury.pl)|51.83.143.148|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 788219 (770K) [text/plain]\n", + "Saving to: ‘potop-tom-trzeci.txt.2’\n", + "\n", + "potop-tom-trzeci.tx 100%[===================>] 769,75K --.-KB/s in 0,06s \n", + "\n", + "2022-05-08 19:27:05 (12,0 MB/s) - ‘potop-tom-trzeci.txt.2’ saved [788219/788219]\n", + "\n" + ] + } + ], + "source": [ + "! wget https://wolnelektury.pl/media/book/txt/potop-tom-pierwszy.txt\n", + "! wget https://wolnelektury.pl/media/book/txt/potop-tom-drugi.txt\n", + "! wget https://wolnelektury.pl/media/book/txt/potop-tom-trzeci.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "!cat potop-* > potop.txt" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "class Dataset(torch.utils.data.Dataset):\n", + " def __init__(\n", + " self,\n", + " sequence_length,\n", + " ):\n", + " self.sequence_length = sequence_length\n", + " self.words = self.load()\n", + " self.uniq_words = self.get_uniq_words()\n", + "\n", + " self.index_to_word = {index: word for index, word in enumerate(self.uniq_words)}\n", + " self.word_to_index = {word: index for index, word in enumerate(self.uniq_words)}\n", + "\n", + " self.words_indexes = [self.word_to_index[w] for w in self.words]\n", + "\n", + " def load(self):\n", + " with open('potop.txt', 'r') as f_in:\n", + " text = [x.rstrip() for x in f_in.readlines() if x.strip()]\n", + " text = ' '.join(text).lower()\n", + " text = re.sub('[^a-ząćęłńóśźż ]', '', text) \n", + " text = text.split(' ')\n", + " return text\n", + " \n", + " \n", + " def get_uniq_words(self):\n", + " word_counts = Counter(self.words)\n", + " return sorted(word_counts, key=word_counts.get, reverse=True)\n", + "\n", + " def __len__(self):\n", + " return len(self.words_indexes) - self.sequence_length\n", + "\n", + " def __getitem__(self, index):\n", + " return (\n", + " torch.tensor(self.words_indexes[index:index+self.sequence_length]),\n", + " torch.tensor(self.words_indexes[index+1:index+self.sequence_length+1]),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "dataset = Dataset(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor([ 551, 18, 17, 255, 10748]),\n", + " tensor([ 18, 17, 255, 10748, 34]))" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "dataset[200]" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['patrzył', 'tak', 'jak', 'człowiek', 'zbudzony']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[dataset.index_to_word[x] for x in [ 551, 18, 17, 255, 10748]]" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['tak', 'jak', 'człowiek', 'zbudzony', 'ze']" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "[dataset.index_to_word[x] for x in [ 18, 17, 255, 10748, 34]]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ + "input_tensor = torch.tensor([[ 551, 18, 17, 255, 10748]], dtype=torch.int32).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "#input_tensor = torch.tensor([[ 551, 18]], dtype=torch.int32).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [], + "source": [ + "class Model(nn.Module):\n", + " def __init__(self, vocab_size):\n", + " super(Model, self).__init__()\n", + " self.lstm_size = 128\n", + " self.embedding_dim = 128\n", + " self.num_layers = 3\n", + "\n", + " self.embedding = nn.Embedding(\n", + " num_embeddings=vocab_size,\n", + " embedding_dim=self.embedding_dim,\n", + " )\n", + " self.lstm = nn.LSTM(\n", + " input_size=self.lstm_size,\n", + " hidden_size=self.lstm_size,\n", + " num_layers=self.num_layers,\n", + " dropout=0.2,\n", + " )\n", + " self.fc = nn.Linear(self.lstm_size, vocab_size)\n", + "\n", + " def forward(self, x, prev_state = None):\n", + " embed = self.embedding(x)\n", + " output, state = self.lstm(embed, prev_state)\n", + " logits = self.fc(output)\n", + " return logits, state\n", + "\n", + " def init_state(self, sequence_length):\n", + " return (torch.zeros(self.num_layers, sequence_length, self.lstm_size).to(device),\n", + " torch.zeros(self.num_layers, sequence_length, self.lstm_size).to(device))" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "model = Model(len(dataset)).to(device)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "y_pred, (state_h, state_c) = model(input_tensor)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "tensor([[[ 0.0046, -0.0113, 0.0313, ..., 0.0198, -0.0312, 0.0223],\n", + " [ 0.0039, -0.0110, 0.0303, ..., 0.0213, -0.0302, 0.0230],\n", + " [ 0.0029, -0.0133, 0.0265, ..., 0.0204, -0.0297, 0.0219],\n", + " [ 0.0010, -0.0120, 0.0282, ..., 0.0241, -0.0314, 0.0241],\n", + " [ 0.0038, -0.0106, 0.0346, ..., 0.0230, -0.0333, 0.0232]]],\n", + " grad_fn=)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_pred" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 5, 1187998])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "y_pred.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "def train(dataset, model, max_epochs, batch_size):\n", + " model.train()\n", + "\n", + " dataloader = DataLoader(dataset, batch_size=batch_size)\n", + " criterion = nn.CrossEntropyLoss()\n", + " optimizer = optim.Adam(model.parameters(), lr=0.001)\n", + "\n", + " for epoch in range(max_epochs):\n", + " for batch, (x, y) in enumerate(dataloader):\n", + " optimizer.zero_grad()\n", + " x = x.to(device)\n", + " y = y.to(device)\n", + "\n", + " y_pred, (state_h, state_c) = model(x)\n", + " loss = criterion(y_pred.transpose(1, 2), y)\n", + "\n", + " loss.backward()\n", + " optimizer.step()\n", + "\n", + " print({ 'epoch': epoch, 'update in batch': batch, '/' : len(dataloader), 'loss': loss.item() })\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'epoch': 0, 'update in batch': 0, '/': 18563, 'loss': 10.717817306518555}\n", + "{'epoch': 0, 'update in batch': 1, '/': 18563, 'loss': 10.699922561645508}\n", + "{'epoch': 0, 'update in batch': 2, '/': 18563, 'loss': 10.701103210449219}\n", + "{'epoch': 0, 'update in batch': 3, '/': 18563, 'loss': 10.700254440307617}\n", + "{'epoch': 0, 'update in batch': 4, '/': 18563, 'loss': 10.69465160369873}\n", + "{'epoch': 0, 'update in batch': 5, '/': 18563, 'loss': 10.681333541870117}\n", + "{'epoch': 0, 'update in batch': 6, '/': 18563, 'loss': 10.668376922607422}\n", + "{'epoch': 0, 'update in batch': 7, '/': 18563, 'loss': 10.675261497497559}\n", + "{'epoch': 0, 'update in batch': 8, '/': 18563, 'loss': 10.665823936462402}\n", + "{'epoch': 0, 'update in batch': 9, '/': 18563, 'loss': 10.655462265014648}\n", + "{'epoch': 0, 'update in batch': 10, '/': 18563, 'loss': 10.591516494750977}\n", + "{'epoch': 0, 'update in batch': 11, '/': 18563, 'loss': 10.580559730529785}\n", + "{'epoch': 0, 'update in batch': 12, '/': 18563, 'loss': 10.524133682250977}\n", + "{'epoch': 0, 'update in batch': 13, '/': 18563, 'loss': 10.480895042419434}\n", + "{'epoch': 0, 'update in batch': 14, '/': 18563, 'loss': 10.33996295928955}\n", + "{'epoch': 0, 'update in batch': 15, '/': 18563, 'loss': 10.345580101013184}\n", + "{'epoch': 0, 'update in batch': 16, '/': 18563, 'loss': 10.200639724731445}\n", + "{'epoch': 0, 'update in batch': 17, '/': 18563, 'loss': 10.030133247375488}\n", + "{'epoch': 0, 'update in batch': 18, '/': 18563, 'loss': 10.046720504760742}\n", + "{'epoch': 0, 'update in batch': 19, '/': 18563, 'loss': 10.00318717956543}\n", + "{'epoch': 0, 'update in batch': 20, '/': 18563, 'loss': 9.588350296020508}\n", + "{'epoch': 0, 'update in batch': 21, '/': 18563, 'loss': 9.780914306640625}\n", + "{'epoch': 0, 'update in batch': 22, '/': 18563, 'loss': 9.36646842956543}\n", + "{'epoch': 0, 'update in batch': 23, '/': 18563, 'loss': 9.306387901306152}\n", + "{'epoch': 0, 'update in batch': 24, '/': 18563, 'loss': 9.150574684143066}\n", + "{'epoch': 0, 'update in batch': 25, '/': 18563, 'loss': 8.89719295501709}\n", + "{'epoch': 0, 'update in batch': 26, '/': 18563, 'loss': 8.741975784301758}\n", + "{'epoch': 0, 'update in batch': 27, '/': 18563, 'loss': 9.36513614654541}\n", + "{'epoch': 0, 'update in batch': 28, '/': 18563, 'loss': 8.840768814086914}\n", + "{'epoch': 0, 'update in batch': 29, '/': 18563, 'loss': 8.356801986694336}\n", + "{'epoch': 0, 'update in batch': 30, '/': 18563, 'loss': 8.274016380310059}\n", + "{'epoch': 0, 'update in batch': 31, '/': 18563, 'loss': 8.944927215576172}\n", + "{'epoch': 0, 'update in batch': 32, '/': 18563, 'loss': 8.923280715942383}\n", + "{'epoch': 0, 'update in batch': 33, '/': 18563, 'loss': 8.479402542114258}\n", + "{'epoch': 0, 'update in batch': 34, '/': 18563, 'loss': 8.42425537109375}\n", + "{'epoch': 0, 'update in batch': 35, '/': 18563, 'loss': 9.487113952636719}\n", + "{'epoch': 0, 'update in batch': 36, '/': 18563, 'loss': 8.314191818237305}\n", + "{'epoch': 0, 'update in batch': 37, '/': 18563, 'loss': 8.0274658203125}\n", + "{'epoch': 0, 'update in batch': 38, '/': 18563, 'loss': 8.725769996643066}\n", + "{'epoch': 0, 'update in batch': 39, '/': 18563, 'loss': 8.67934799194336}\n", + "{'epoch': 0, 'update in batch': 40, '/': 18563, 'loss': 8.872161865234375}\n", + "{'epoch': 0, 'update in batch': 41, '/': 18563, 'loss': 7.883971214294434}\n", + "{'epoch': 0, 'update in batch': 42, '/': 18563, 'loss': 7.682810306549072}\n", + "{'epoch': 0, 'update in batch': 43, '/': 18563, 'loss': 7.880677223205566}\n", + "{'epoch': 0, 'update in batch': 44, '/': 18563, 'loss': 7.807427406311035}\n", + "{'epoch': 0, 'update in batch': 45, '/': 18563, 'loss': 7.93829870223999}\n", + "{'epoch': 0, 'update in batch': 46, '/': 18563, 'loss': 7.718912601470947}\n", + "{'epoch': 0, 'update in batch': 47, '/': 18563, 'loss': 8.309863090515137}\n", + "{'epoch': 0, 'update in batch': 48, '/': 18563, 'loss': 9.091133117675781}\n", + "{'epoch': 0, 'update in batch': 49, '/': 18563, 'loss': 9.317312240600586}\n", + "{'epoch': 0, 'update in batch': 50, '/': 18563, 'loss': 8.517735481262207}\n", + "{'epoch': 0, 'update in batch': 51, '/': 18563, 'loss': 7.697592258453369}\n", + "{'epoch': 0, 'update in batch': 52, '/': 18563, 'loss': 6.838181972503662}\n", + "{'epoch': 0, 'update in batch': 53, '/': 18563, 'loss': 7.967227935791016}\n", + "{'epoch': 0, 'update in batch': 54, '/': 18563, 'loss': 8.47049331665039}\n", + "{'epoch': 0, 'update in batch': 55, '/': 18563, 'loss': 8.958921432495117}\n", + "{'epoch': 0, 'update in batch': 56, '/': 18563, 'loss': 8.316679000854492}\n", + "{'epoch': 0, 'update in batch': 57, '/': 18563, 'loss': 8.997099876403809}\n", + "{'epoch': 0, 'update in batch': 58, '/': 18563, 'loss': 8.608811378479004}\n", + "{'epoch': 0, 'update in batch': 59, '/': 18563, 'loss': 9.377460479736328}\n", + "{'epoch': 0, 'update in batch': 60, '/': 18563, 'loss': 8.6201171875}\n", + "{'epoch': 0, 'update in batch': 61, '/': 18563, 'loss': 8.821510314941406}\n", + "{'epoch': 0, 'update in batch': 62, '/': 18563, 'loss': 8.915961265563965}\n", + "{'epoch': 0, 'update in batch': 63, '/': 18563, 'loss': 8.222617149353027}\n", + "{'epoch': 0, 'update in batch': 64, '/': 18563, 'loss': 9.266777992248535}\n", + "{'epoch': 0, 'update in batch': 65, '/': 18563, 'loss': 8.749354362487793}\n", + "{'epoch': 0, 'update in batch': 66, '/': 18563, 'loss': 8.311641693115234}\n", + "{'epoch': 0, 'update in batch': 67, '/': 18563, 'loss': 8.553888320922852}\n", + "{'epoch': 0, 'update in batch': 68, '/': 18563, 'loss': 8.790258407592773}\n", + "{'epoch': 0, 'update in batch': 69, '/': 18563, 'loss': 9.090133666992188}\n", + "{'epoch': 0, 'update in batch': 70, '/': 18563, 'loss': 8.893723487854004}\n", + "{'epoch': 0, 'update in batch': 71, '/': 18563, 'loss': 8.844594955444336}\n", + "{'epoch': 0, 'update in batch': 72, '/': 18563, 'loss': 7.771625518798828}\n", + "{'epoch': 0, 'update in batch': 73, '/': 18563, 'loss': 8.536479949951172}\n", + "{'epoch': 0, 'update in batch': 74, '/': 18563, 'loss': 7.300860404968262}\n", + "{'epoch': 0, 'update in batch': 75, '/': 18563, 'loss': 8.62000846862793}\n", + "{'epoch': 0, 'update in batch': 76, '/': 18563, 'loss': 8.67784309387207}\n", + "{'epoch': 0, 'update in batch': 77, '/': 18563, 'loss': 7.319235801696777}\n", + "{'epoch': 0, 'update in batch': 78, '/': 18563, 'loss': 8.322186470031738}\n", + "{'epoch': 0, 'update in batch': 79, '/': 18563, 'loss': 7.767421722412109}\n", + "{'epoch': 0, 'update in batch': 80, '/': 18563, 'loss': 8.817885398864746}\n", + "{'epoch': 0, 'update in batch': 81, '/': 18563, 'loss': 8.133109092712402}\n", + "{'epoch': 0, 'update in batch': 82, '/': 18563, 'loss': 7.822054862976074}\n", + "{'epoch': 0, 'update in batch': 83, '/': 18563, 'loss': 8.055540084838867}\n", + "{'epoch': 0, 'update in batch': 84, '/': 18563, 'loss': 8.053682327270508}\n", + "{'epoch': 0, 'update in batch': 85, '/': 18563, 'loss': 8.018306732177734}\n", + "{'epoch': 0, 'update in batch': 86, '/': 18563, 'loss': 8.371909141540527}\n", + "{'epoch': 0, 'update in batch': 87, '/': 18563, 'loss': 8.057979583740234}\n", + "{'epoch': 0, 'update in batch': 88, '/': 18563, 'loss': 8.340703010559082}\n", + "{'epoch': 0, 'update in batch': 89, '/': 18563, 'loss': 8.7703857421875}\n", + "{'epoch': 0, 'update in batch': 90, '/': 18563, 'loss': 9.714847564697266}\n", + "{'epoch': 0, 'update in batch': 91, '/': 18563, 'loss': 8.621702194213867}\n", + "{'epoch': 0, 'update in batch': 92, '/': 18563, 'loss': 9.406997680664062}\n", + "{'epoch': 0, 'update in batch': 93, '/': 18563, 'loss': 9.29774284362793}\n", + "{'epoch': 0, 'update in batch': 94, '/': 18563, 'loss': 8.649836540222168}\n", + "{'epoch': 0, 'update in batch': 95, '/': 18563, 'loss': 8.441780090332031}\n", + "{'epoch': 0, 'update in batch': 96, '/': 18563, 'loss': 7.991406440734863}\n", + "{'epoch': 0, 'update in batch': 97, '/': 18563, 'loss': 9.314489364624023}\n", + "{'epoch': 0, 'update in batch': 98, '/': 18563, 'loss': 8.368816375732422}\n", + "{'epoch': 0, 'update in batch': 99, '/': 18563, 'loss': 8.771149635314941}\n", + "{'epoch': 0, 'update in batch': 100, '/': 18563, 'loss': 7.8758111000061035}\n", + "{'epoch': 0, 'update in batch': 101, '/': 18563, 'loss': 8.341328620910645}\n", + "{'epoch': 0, 'update in batch': 102, '/': 18563, 'loss': 8.413129806518555}\n", + "{'epoch': 0, 'update in batch': 103, '/': 18563, 'loss': 7.372011661529541}\n", + "{'epoch': 0, 'update in batch': 104, '/': 18563, 'loss': 8.170934677124023}\n", + "{'epoch': 0, 'update in batch': 105, '/': 18563, 'loss': 8.109993934631348}\n", + "{'epoch': 0, 'update in batch': 106, '/': 18563, 'loss': 8.172578811645508}\n", + "{'epoch': 0, 'update in batch': 107, '/': 18563, 'loss': 8.33222484588623}\n", + "{'epoch': 0, 'update in batch': 108, '/': 18563, 'loss': 7.997575283050537}\n", + "{'epoch': 0, 'update in batch': 109, '/': 18563, 'loss': 7.847937107086182}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'epoch': 0, 'update in batch': 110, '/': 18563, 'loss': 7.351314544677734}\n", + "{'epoch': 0, 'update in batch': 111, '/': 18563, 'loss': 8.472936630249023}\n", + "{'epoch': 0, 'update in batch': 112, '/': 18563, 'loss': 7.855953216552734}\n", + "{'epoch': 0, 'update in batch': 113, '/': 18563, 'loss': 8.163175582885742}\n", + "{'epoch': 0, 'update in batch': 114, '/': 18563, 'loss': 8.208657264709473}\n", + "{'epoch': 0, 'update in batch': 115, '/': 18563, 'loss': 8.781523704528809}\n", + "{'epoch': 0, 'update in batch': 116, '/': 18563, 'loss': 8.449674606323242}\n", + "{'epoch': 0, 'update in batch': 117, '/': 18563, 'loss': 8.176030158996582}\n", + "{'epoch': 0, 'update in batch': 118, '/': 18563, 'loss': 8.415689468383789}\n", + "{'epoch': 0, 'update in batch': 119, '/': 18563, 'loss': 8.645845413208008}\n", + "{'epoch': 0, 'update in batch': 120, '/': 18563, 'loss': 8.160420417785645}\n", + "{'epoch': 0, 'update in batch': 121, '/': 18563, 'loss': 8.117982864379883}\n", + "{'epoch': 0, 'update in batch': 122, '/': 18563, 'loss': 9.099283218383789}\n", + "{'epoch': 0, 'update in batch': 123, '/': 18563, 'loss': 7.98253870010376}\n", + "{'epoch': 0, 'update in batch': 124, '/': 18563, 'loss': 8.112133979797363}\n", + "{'epoch': 0, 'update in batch': 125, '/': 18563, 'loss': 8.479134559631348}\n", + "{'epoch': 0, 'update in batch': 126, '/': 18563, 'loss': 8.92817497253418}\n", + "{'epoch': 0, 'update in batch': 127, '/': 18563, 'loss': 8.38918399810791}\n", + "{'epoch': 0, 'update in batch': 128, '/': 18563, 'loss': 9.000529289245605}\n", + "{'epoch': 0, 'update in batch': 129, '/': 18563, 'loss': 8.525534629821777}\n", + "{'epoch': 0, 'update in batch': 130, '/': 18563, 'loss': 9.055428504943848}\n", + "{'epoch': 0, 'update in batch': 131, '/': 18563, 'loss': 8.818662643432617}\n", + "{'epoch': 0, 'update in batch': 132, '/': 18563, 'loss': 8.807767868041992}\n", + "{'epoch': 0, 'update in batch': 133, '/': 18563, 'loss': 8.398343086242676}\n", + "{'epoch': 0, 'update in batch': 134, '/': 18563, 'loss': 8.435093879699707}\n", + "{'epoch': 0, 'update in batch': 135, '/': 18563, 'loss': 7.877000331878662}\n", + "{'epoch': 0, 'update in batch': 136, '/': 18563, 'loss': 8.197925567626953}\n", + "{'epoch': 0, 'update in batch': 137, '/': 18563, 'loss': 8.655011177062988}\n", + "{'epoch': 0, 'update in batch': 138, '/': 18563, 'loss': 7.786923885345459}\n", + "{'epoch': 0, 'update in batch': 139, '/': 18563, 'loss': 8.338996887207031}\n", + "{'epoch': 0, 'update in batch': 140, '/': 18563, 'loss': 8.607789993286133}\n", + "{'epoch': 0, 'update in batch': 141, '/': 18563, 'loss': 8.52219295501709}\n", + "{'epoch': 0, 'update in batch': 142, '/': 18563, 'loss': 8.436418533325195}\n", + "{'epoch': 0, 'update in batch': 143, '/': 18563, 'loss': 7.999323844909668}\n", + "{'epoch': 0, 'update in batch': 144, '/': 18563, 'loss': 7.543336391448975}\n", + "{'epoch': 0, 'update in batch': 145, '/': 18563, 'loss': 7.3255791664123535}\n", + "{'epoch': 0, 'update in batch': 146, '/': 18563, 'loss': 7.993613243103027}\n", + "{'epoch': 0, 'update in batch': 147, '/': 18563, 'loss': 8.8505859375}\n", + "{'epoch': 0, 'update in batch': 148, '/': 18563, 'loss': 8.146835327148438}\n", + "{'epoch': 0, 'update in batch': 149, '/': 18563, 'loss': 8.532424926757812}\n", + "{'epoch': 0, 'update in batch': 150, '/': 18563, 'loss': 8.323905944824219}\n", + "{'epoch': 0, 'update in batch': 151, '/': 18563, 'loss': 7.8726677894592285}\n", + "{'epoch': 0, 'update in batch': 152, '/': 18563, 'loss': 7.912005424499512}\n", + "{'epoch': 0, 'update in batch': 153, '/': 18563, 'loss': 8.010560035705566}\n", + "{'epoch': 0, 'update in batch': 154, '/': 18563, 'loss': 7.9417009353637695}\n", + "{'epoch': 0, 'update in batch': 155, '/': 18563, 'loss': 7.991711616516113}\n", + "{'epoch': 0, 'update in batch': 156, '/': 18563, 'loss': 8.27558708190918}\n", + "{'epoch': 0, 'update in batch': 157, '/': 18563, 'loss': 7.736246585845947}\n", + "{'epoch': 0, 'update in batch': 158, '/': 18563, 'loss': 7.4755754470825195}\n", + "{'epoch': 0, 'update in batch': 159, '/': 18563, 'loss': 8.023443222045898}\n", + "{'epoch': 0, 'update in batch': 160, '/': 18563, 'loss': 8.130350112915039}\n", + "{'epoch': 0, 'update in batch': 161, '/': 18563, 'loss': 7.770634651184082}\n", + "{'epoch': 0, 'update in batch': 162, '/': 18563, 'loss': 7.775434970855713}\n", + "{'epoch': 0, 'update in batch': 163, '/': 18563, 'loss': 7.965312957763672}\n", + "{'epoch': 0, 'update in batch': 164, '/': 18563, 'loss': 7.977341651916504}\n", + "{'epoch': 0, 'update in batch': 165, '/': 18563, 'loss': 7.703671455383301}\n", + "{'epoch': 0, 'update in batch': 166, '/': 18563, 'loss': 8.027135848999023}\n", + "{'epoch': 0, 'update in batch': 167, '/': 18563, 'loss': 7.7673773765563965}\n", + "{'epoch': 0, 'update in batch': 168, '/': 18563, 'loss': 8.654549598693848}\n", + "{'epoch': 0, 'update in batch': 169, '/': 18563, 'loss': 7.8060808181762695}\n", + "{'epoch': 0, 'update in batch': 170, '/': 18563, 'loss': 7.33704137802124}\n", + "{'epoch': 0, 'update in batch': 171, '/': 18563, 'loss': 7.971919059753418}\n", + "{'epoch': 0, 'update in batch': 172, '/': 18563, 'loss': 7.450611114501953}\n", + "{'epoch': 0, 'update in batch': 173, '/': 18563, 'loss': 7.978057861328125}\n", + "{'epoch': 0, 'update in batch': 174, '/': 18563, 'loss': 8.264434814453125}\n", + "{'epoch': 0, 'update in batch': 175, '/': 18563, 'loss': 8.47761058807373}\n", + "{'epoch': 0, 'update in batch': 176, '/': 18563, 'loss': 7.643885135650635}\n", + "{'epoch': 0, 'update in batch': 177, '/': 18563, 'loss': 8.696805000305176}\n", + "{'epoch': 0, 'update in batch': 178, '/': 18563, 'loss': 9.144462585449219}\n", + "{'epoch': 0, 'update in batch': 179, '/': 18563, 'loss': 8.582620620727539}\n", + "{'epoch': 0, 'update in batch': 180, '/': 18563, 'loss': 8.495562553405762}\n", + "{'epoch': 0, 'update in batch': 181, '/': 18563, 'loss': 9.259647369384766}\n", + "{'epoch': 0, 'update in batch': 182, '/': 18563, 'loss': 8.286632537841797}\n", + "{'epoch': 0, 'update in batch': 183, '/': 18563, 'loss': 8.378074645996094}\n", + "{'epoch': 0, 'update in batch': 184, '/': 18563, 'loss': 8.404892921447754}\n", + "{'epoch': 0, 'update in batch': 185, '/': 18563, 'loss': 9.206843376159668}\n", + "{'epoch': 0, 'update in batch': 186, '/': 18563, 'loss': 8.97215747833252}\n", + "{'epoch': 0, 'update in batch': 187, '/': 18563, 'loss': 8.281005859375}\n", + "{'epoch': 0, 'update in batch': 188, '/': 18563, 'loss': 7.638144493103027}\n", + "{'epoch': 0, 'update in batch': 189, '/': 18563, 'loss': 7.991082668304443}\n", + "{'epoch': 0, 'update in batch': 190, '/': 18563, 'loss': 8.207674026489258}\n", + "{'epoch': 0, 'update in batch': 191, '/': 18563, 'loss': 8.16801643371582}\n", + "{'epoch': 0, 'update in batch': 192, '/': 18563, 'loss': 7.827309608459473}\n", + "{'epoch': 0, 'update in batch': 193, '/': 18563, 'loss': 8.387285232543945}\n", + "{'epoch': 0, 'update in batch': 194, '/': 18563, 'loss': 7.990261077880859}\n", + "{'epoch': 0, 'update in batch': 195, '/': 18563, 'loss': 7.7953925132751465}\n", + "{'epoch': 0, 'update in batch': 196, '/': 18563, 'loss': 7.252983093261719}\n", + "{'epoch': 0, 'update in batch': 197, '/': 18563, 'loss': 7.806585788726807}\n", + "{'epoch': 0, 'update in batch': 198, '/': 18563, 'loss': 7.871600151062012}\n", + "{'epoch': 0, 'update in batch': 199, '/': 18563, 'loss': 7.639830589294434}\n", + "{'epoch': 0, 'update in batch': 200, '/': 18563, 'loss': 8.108308792114258}\n", + "{'epoch': 0, 'update in batch': 201, '/': 18563, 'loss': 7.41513729095459}\n", + "{'epoch': 0, 'update in batch': 202, '/': 18563, 'loss': 8.103743553161621}\n", + "{'epoch': 0, 'update in batch': 203, '/': 18563, 'loss': 8.82174301147461}\n", + "{'epoch': 0, 'update in batch': 204, '/': 18563, 'loss': 8.34859561920166}\n", + "{'epoch': 0, 'update in batch': 205, '/': 18563, 'loss': 7.890545845031738}\n", + "{'epoch': 0, 'update in batch': 206, '/': 18563, 'loss': 7.679532527923584}\n", + "{'epoch': 0, 'update in batch': 207, '/': 18563, 'loss': 7.810311317443848}\n", + "{'epoch': 0, 'update in batch': 208, '/': 18563, 'loss': 8.342585563659668}\n", + "{'epoch': 0, 'update in batch': 209, '/': 18563, 'loss': 8.253597259521484}\n", + "{'epoch': 0, 'update in batch': 210, '/': 18563, 'loss': 7.963072299957275}\n", + "{'epoch': 0, 'update in batch': 211, '/': 18563, 'loss': 8.537101745605469}\n", + "{'epoch': 0, 'update in batch': 212, '/': 18563, 'loss': 8.503724098205566}\n", + "{'epoch': 0, 'update in batch': 213, '/': 18563, 'loss': 8.568987846374512}\n", + "{'epoch': 0, 'update in batch': 214, '/': 18563, 'loss': 7.760678291320801}\n", + "{'epoch': 0, 'update in batch': 215, '/': 18563, 'loss': 8.302183151245117}\n", + "{'epoch': 0, 'update in batch': 216, '/': 18563, 'loss': 7.427420616149902}\n", + "{'epoch': 0, 'update in batch': 217, '/': 18563, 'loss': 8.05746078491211}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'epoch': 0, 'update in batch': 218, '/': 18563, 'loss': 8.82285213470459}\n", + "{'epoch': 0, 'update in batch': 219, '/': 18563, 'loss': 7.948827266693115}\n", + "{'epoch': 0, 'update in batch': 220, '/': 18563, 'loss': 8.164112091064453}\n", + "{'epoch': 0, 'update in batch': 221, '/': 18563, 'loss': 7.721047401428223}\n", + "{'epoch': 0, 'update in batch': 222, '/': 18563, 'loss': 7.668707370758057}\n", + "{'epoch': 0, 'update in batch': 223, '/': 18563, 'loss': 8.576696395874023}\n", + "{'epoch': 0, 'update in batch': 224, '/': 18563, 'loss': 8.253091812133789}\n", + "{'epoch': 0, 'update in batch': 225, '/': 18563, 'loss': 8.303543090820312}\n", + "{'epoch': 0, 'update in batch': 226, '/': 18563, 'loss': 8.069855690002441}\n", + "{'epoch': 0, 'update in batch': 227, '/': 18563, 'loss': 8.57229232788086}\n", + "{'epoch': 0, 'update in batch': 228, '/': 18563, 'loss': 8.904585838317871}\n", + "{'epoch': 0, 'update in batch': 229, '/': 18563, 'loss': 8.485595703125}\n", + "{'epoch': 0, 'update in batch': 230, '/': 18563, 'loss': 8.22756290435791}\n", + "{'epoch': 0, 'update in batch': 231, '/': 18563, 'loss': 8.281603813171387}\n", + "{'epoch': 0, 'update in batch': 232, '/': 18563, 'loss': 7.591467380523682}\n", + "{'epoch': 0, 'update in batch': 233, '/': 18563, 'loss': 7.8028883934021}\n", + "{'epoch': 0, 'update in batch': 234, '/': 18563, 'loss': 8.079168319702148}\n", + "{'epoch': 0, 'update in batch': 235, '/': 18563, 'loss': 7.578390598297119}\n", + "{'epoch': 0, 'update in batch': 236, '/': 18563, 'loss': 7.865830421447754}\n", + "{'epoch': 0, 'update in batch': 237, '/': 18563, 'loss': 7.105422019958496}\n", + "{'epoch': 0, 'update in batch': 238, '/': 18563, 'loss': 8.034143447875977}\n", + "{'epoch': 0, 'update in batch': 239, '/': 18563, 'loss': 7.23009729385376}\n", + "{'epoch': 0, 'update in batch': 240, '/': 18563, 'loss': 7.221669673919678}\n", + "{'epoch': 0, 'update in batch': 241, '/': 18563, 'loss': 7.118913173675537}\n", + "{'epoch': 0, 'update in batch': 242, '/': 18563, 'loss': 7.690147399902344}\n", + "{'epoch': 0, 'update in batch': 243, '/': 18563, 'loss': 7.676979064941406}\n", + "{'epoch': 0, 'update in batch': 244, '/': 18563, 'loss': 8.231537818908691}\n", + "{'epoch': 0, 'update in batch': 245, '/': 18563, 'loss': 8.212566375732422}\n", + "{'epoch': 0, 'update in batch': 246, '/': 18563, 'loss': 9.095616340637207}\n", + "{'epoch': 0, 'update in batch': 247, '/': 18563, 'loss': 8.249703407287598}\n", + "{'epoch': 0, 'update in batch': 248, '/': 18563, 'loss': 9.082058906555176}\n", + "{'epoch': 0, 'update in batch': 249, '/': 18563, 'loss': 8.530516624450684}\n", + "{'epoch': 0, 'update in batch': 250, '/': 18563, 'loss': 8.979915618896484}\n", + "{'epoch': 0, 'update in batch': 251, '/': 18563, 'loss': 8.667882919311523}\n", + "{'epoch': 0, 'update in batch': 252, '/': 18563, 'loss': 8.804525375366211}\n", + "{'epoch': 0, 'update in batch': 253, '/': 18563, 'loss': 8.67729377746582}\n", + "{'epoch': 0, 'update in batch': 254, '/': 18563, 'loss': 8.580761909484863}\n", + "{'epoch': 0, 'update in batch': 255, '/': 18563, 'loss': 7.724173545837402}\n", + "{'epoch': 0, 'update in batch': 256, '/': 18563, 'loss': 7.7925591468811035}\n", + "{'epoch': 0, 'update in batch': 257, '/': 18563, 'loss': 7.731482028961182}\n", + "{'epoch': 0, 'update in batch': 258, '/': 18563, 'loss': 7.644040107727051}\n", + "{'epoch': 0, 'update in batch': 259, '/': 18563, 'loss': 7.947877407073975}\n", + "{'epoch': 0, 'update in batch': 260, '/': 18563, 'loss': 7.649043083190918}\n", + "{'epoch': 0, 'update in batch': 261, '/': 18563, 'loss': 7.40912389755249}\n", + "{'epoch': 0, 'update in batch': 262, '/': 18563, 'loss': 8.199918746948242}\n", + "{'epoch': 0, 'update in batch': 263, '/': 18563, 'loss': 7.272132873535156}\n", + "{'epoch': 0, 'update in batch': 264, '/': 18563, 'loss': 7.205214500427246}\n", + "{'epoch': 0, 'update in batch': 265, '/': 18563, 'loss': 8.999595642089844}\n", + "{'epoch': 0, 'update in batch': 266, '/': 18563, 'loss': 7.851510524749756}\n", + "{'epoch': 0, 'update in batch': 267, '/': 18563, 'loss': 7.748948097229004}\n", + "{'epoch': 0, 'update in batch': 268, '/': 18563, 'loss': 7.96875}\n", + "{'epoch': 0, 'update in batch': 269, '/': 18563, 'loss': 7.627255916595459}\n", + "{'epoch': 0, 'update in batch': 270, '/': 18563, 'loss': 7.719862937927246}\n", + "{'epoch': 0, 'update in batch': 271, '/': 18563, 'loss': 7.58780574798584}\n", + "{'epoch': 0, 'update in batch': 272, '/': 18563, 'loss': 8.386865615844727}\n", + "{'epoch': 0, 'update in batch': 273, '/': 18563, 'loss': 8.708396911621094}\n", + "{'epoch': 0, 'update in batch': 274, '/': 18563, 'loss': 7.853432655334473}\n", + "{'epoch': 0, 'update in batch': 275, '/': 18563, 'loss': 7.818131923675537}\n", + "{'epoch': 0, 'update in batch': 276, '/': 18563, 'loss': 7.714521884918213}\n", + "{'epoch': 0, 'update in batch': 277, '/': 18563, 'loss': 8.75371265411377}\n", + "{'epoch': 0, 'update in batch': 278, '/': 18563, 'loss': 7.6992998123168945}\n", + "{'epoch': 0, 'update in batch': 279, '/': 18563, 'loss': 7.652693748474121}\n", + "{'epoch': 0, 'update in batch': 280, '/': 18563, 'loss': 7.364585876464844}\n", + "{'epoch': 0, 'update in batch': 281, '/': 18563, 'loss': 7.742022514343262}\n", + "{'epoch': 0, 'update in batch': 282, '/': 18563, 'loss': 7.6205573081970215}\n", + "{'epoch': 0, 'update in batch': 283, '/': 18563, 'loss': 7.475846290588379}\n", + "{'epoch': 0, 'update in batch': 284, '/': 18563, 'loss': 7.302148342132568}\n", + "{'epoch': 0, 'update in batch': 285, '/': 18563, 'loss': 7.524351596832275}\n", + "{'epoch': 0, 'update in batch': 286, '/': 18563, 'loss': 7.755963325500488}\n", + "{'epoch': 0, 'update in batch': 287, '/': 18563, 'loss': 7.620995998382568}\n", + "{'epoch': 0, 'update in batch': 288, '/': 18563, 'loss': 7.289975166320801}\n", + "{'epoch': 0, 'update in batch': 289, '/': 18563, 'loss': 7.470652103424072}\n", + "{'epoch': 0, 'update in batch': 290, '/': 18563, 'loss': 7.297110557556152}\n", + "{'epoch': 0, 'update in batch': 291, '/': 18563, 'loss': 7.907563209533691}\n", + "{'epoch': 0, 'update in batch': 292, '/': 18563, 'loss': 8.051852226257324}\n", + "{'epoch': 0, 'update in batch': 293, '/': 18563, 'loss': 6.691899299621582}\n", + "{'epoch': 0, 'update in batch': 294, '/': 18563, 'loss': 7.9747819900512695}\n", + "{'epoch': 0, 'update in batch': 295, '/': 18563, 'loss': 7.415904998779297}\n", + "{'epoch': 0, 'update in batch': 296, '/': 18563, 'loss': 7.479670524597168}\n", + "{'epoch': 0, 'update in batch': 297, '/': 18563, 'loss': 7.9454755783081055}\n", + "{'epoch': 0, 'update in batch': 298, '/': 18563, 'loss': 7.79656457901001}\n", + "{'epoch': 0, 'update in batch': 299, '/': 18563, 'loss': 7.644859313964844}\n", + "{'epoch': 0, 'update in batch': 300, '/': 18563, 'loss': 7.649240970611572}\n", + "{'epoch': 0, 'update in batch': 301, '/': 18563, 'loss': 7.497203826904297}\n", + "{'epoch': 0, 'update in batch': 302, '/': 18563, 'loss': 7.169632911682129}\n", + "{'epoch': 0, 'update in batch': 303, '/': 18563, 'loss': 7.124764442443848}\n", + "{'epoch': 0, 'update in batch': 304, '/': 18563, 'loss': 7.728893280029297}\n", + "{'epoch': 0, 'update in batch': 305, '/': 18563, 'loss': 8.029245376586914}\n", + "{'epoch': 0, 'update in batch': 306, '/': 18563, 'loss': 7.361662864685059}\n", + "{'epoch': 0, 'update in batch': 307, '/': 18563, 'loss': 8.070173263549805}\n", + "{'epoch': 0, 'update in batch': 308, '/': 18563, 'loss': 7.55655574798584}\n", + "{'epoch': 0, 'update in batch': 309, '/': 18563, 'loss': 7.713553428649902}\n", + "{'epoch': 0, 'update in batch': 310, '/': 18563, 'loss': 8.333553314208984}\n", + "{'epoch': 0, 'update in batch': 311, '/': 18563, 'loss': 8.089872360229492}\n", + "{'epoch': 0, 'update in batch': 312, '/': 18563, 'loss': 8.951356887817383}\n", + "{'epoch': 0, 'update in batch': 313, '/': 18563, 'loss': 8.920665740966797}\n", + "{'epoch': 0, 'update in batch': 314, '/': 18563, 'loss': 8.811259269714355}\n", + "{'epoch': 0, 'update in batch': 315, '/': 18563, 'loss': 8.719802856445312}\n", + "{'epoch': 0, 'update in batch': 316, '/': 18563, 'loss': 8.700776100158691}\n", + "{'epoch': 0, 'update in batch': 317, '/': 18563, 'loss': 8.846036911010742}\n", + "{'epoch': 0, 'update in batch': 318, '/': 18563, 'loss': 8.553533554077148}\n", + "{'epoch': 0, 'update in batch': 319, '/': 18563, 'loss': 9.257116317749023}\n", + "{'epoch': 0, 'update in batch': 320, '/': 18563, 'loss': 8.487042427062988}\n", + "{'epoch': 0, 'update in batch': 321, '/': 18563, 'loss': 8.743330955505371}\n", + "{'epoch': 0, 'update in batch': 322, '/': 18563, 'loss': 8.377813339233398}\n", + "{'epoch': 0, 'update in batch': 323, '/': 18563, 'loss': 8.41798210144043}\n", + "{'epoch': 0, 'update in batch': 324, '/': 18563, 'loss': 7.884764671325684}\n", + "{'epoch': 0, 'update in batch': 325, '/': 18563, 'loss': 8.827409744262695}\n", + "{'epoch': 0, 'update in batch': 326, '/': 18563, 'loss': 8.21721363067627}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'epoch': 0, 'update in batch': 327, '/': 18563, 'loss': 8.522723197937012}\n", + "{'epoch': 0, 'update in batch': 328, '/': 18563, 'loss': 7.387178897857666}\n", + "{'epoch': 0, 'update in batch': 329, '/': 18563, 'loss': 8.58663558959961}\n", + "{'epoch': 0, 'update in batch': 330, '/': 18563, 'loss': 8.539435386657715}\n", + "{'epoch': 0, 'update in batch': 331, '/': 18563, 'loss': 8.35865592956543}\n", + "{'epoch': 0, 'update in batch': 332, '/': 18563, 'loss': 8.55555248260498}\n", + "{'epoch': 0, 'update in batch': 333, '/': 18563, 'loss': 7.9116950035095215}\n", + "{'epoch': 0, 'update in batch': 334, '/': 18563, 'loss': 8.424735069274902}\n", + "{'epoch': 0, 'update in batch': 335, '/': 18563, 'loss': 8.383890151977539}\n", + "{'epoch': 0, 'update in batch': 336, '/': 18563, 'loss': 8.145454406738281}\n", + "{'epoch': 0, 'update in batch': 337, '/': 18563, 'loss': 8.014772415161133}\n", + "{'epoch': 0, 'update in batch': 338, '/': 18563, 'loss': 8.532005310058594}\n", + "{'epoch': 0, 'update in batch': 339, '/': 18563, 'loss': 8.979973793029785}\n", + "{'epoch': 0, 'update in batch': 340, '/': 18563, 'loss': 8.3964204788208}\n", + "{'epoch': 0, 'update in batch': 341, '/': 18563, 'loss': 8.34205150604248}\n", + "{'epoch': 0, 'update in batch': 342, '/': 18563, 'loss': 7.861489295959473}\n", + "{'epoch': 0, 'update in batch': 343, '/': 18563, 'loss': 8.807058334350586}\n", + "{'epoch': 0, 'update in batch': 344, '/': 18563, 'loss': 8.14976978302002}\n", + "{'epoch': 0, 'update in batch': 345, '/': 18563, 'loss': 8.212860107421875}\n", + "{'epoch': 0, 'update in batch': 346, '/': 18563, 'loss': 8.323419570922852}\n", + "{'epoch': 0, 'update in batch': 347, '/': 18563, 'loss': 9.06071662902832}\n", + "{'epoch': 0, 'update in batch': 348, '/': 18563, 'loss': 8.79192066192627}\n", + "{'epoch': 0, 'update in batch': 349, '/': 18563, 'loss': 8.717201232910156}\n", + "{'epoch': 0, 'update in batch': 350, '/': 18563, 'loss': 8.149703979492188}\n", + "{'epoch': 0, 'update in batch': 351, '/': 18563, 'loss': 7.990046501159668}\n", + "{'epoch': 0, 'update in batch': 352, '/': 18563, 'loss': 7.8197221755981445}\n", + "{'epoch': 0, 'update in batch': 353, '/': 18563, 'loss': 8.022729873657227}\n", + "{'epoch': 0, 'update in batch': 354, '/': 18563, 'loss': 8.339923858642578}\n", + "{'epoch': 0, 'update in batch': 355, '/': 18563, 'loss': 7.867880821228027}\n", + "{'epoch': 0, 'update in batch': 356, '/': 18563, 'loss': 8.161782264709473}\n", + "{'epoch': 0, 'update in batch': 357, '/': 18563, 'loss': 7.711170196533203}\n", + "{'epoch': 0, 'update in batch': 358, '/': 18563, 'loss': 8.46279239654541}\n", + "{'epoch': 0, 'update in batch': 359, '/': 18563, 'loss': 8.327804565429688}\n", + "{'epoch': 0, 'update in batch': 360, '/': 18563, 'loss': 8.184597969055176}\n", + "{'epoch': 0, 'update in batch': 361, '/': 18563, 'loss': 8.126212120056152}\n", + "{'epoch': 0, 'update in batch': 362, '/': 18563, 'loss': 8.122446060180664}\n", + "{'epoch': 0, 'update in batch': 363, '/': 18563, 'loss': 7.730257511138916}\n", + "{'epoch': 0, 'update in batch': 364, '/': 18563, 'loss': 7.7179059982299805}\n", + "{'epoch': 0, 'update in batch': 365, '/': 18563, 'loss': 7.557857513427734}\n", + "{'epoch': 0, 'update in batch': 366, '/': 18563, 'loss': 8.614083290100098}\n", + "{'epoch': 0, 'update in batch': 367, '/': 18563, 'loss': 8.0489501953125}\n", + "{'epoch': 0, 'update in batch': 368, '/': 18563, 'loss': 8.355381965637207}\n", + "{'epoch': 0, 'update in batch': 369, '/': 18563, 'loss': 7.592991828918457}\n", + "{'epoch': 0, 'update in batch': 370, '/': 18563, 'loss': 7.674102783203125}\n", + "{'epoch': 0, 'update in batch': 371, '/': 18563, 'loss': 7.818256378173828}\n", + "{'epoch': 0, 'update in batch': 372, '/': 18563, 'loss': 8.510438919067383}\n", + "{'epoch': 0, 'update in batch': 373, '/': 18563, 'loss': 8.02087116241455}\n", + "{'epoch': 0, 'update in batch': 374, '/': 18563, 'loss': 8.206090927124023}\n", + "{'epoch': 0, 'update in batch': 375, '/': 18563, 'loss': 7.645677089691162}\n", + "{'epoch': 0, 'update in batch': 376, '/': 18563, 'loss': 8.241236686706543}\n", + "{'epoch': 0, 'update in batch': 377, '/': 18563, 'loss': 8.581649780273438}\n", + "{'epoch': 0, 'update in batch': 378, '/': 18563, 'loss': 9.361258506774902}\n", + "{'epoch': 0, 'update in batch': 379, '/': 18563, 'loss': 9.097440719604492}\n", + "{'epoch': 0, 'update in batch': 380, '/': 18563, 'loss': 8.081677436828613}\n", + "{'epoch': 0, 'update in batch': 381, '/': 18563, 'loss': 8.761143684387207}\n", + "{'epoch': 0, 'update in batch': 382, '/': 18563, 'loss': 7.9429121017456055}\n", + "{'epoch': 0, 'update in batch': 383, '/': 18563, 'loss': 8.05648422241211}\n", + "{'epoch': 0, 'update in batch': 384, '/': 18563, 'loss': 7.316658020019531}\n", + "{'epoch': 0, 'update in batch': 385, '/': 18563, 'loss': 8.597393035888672}\n", + "{'epoch': 0, 'update in batch': 386, '/': 18563, 'loss': 9.393728256225586}\n", + "{'epoch': 0, 'update in batch': 387, '/': 18563, 'loss': 8.225081443786621}\n", + "{'epoch': 0, 'update in batch': 388, '/': 18563, 'loss': 7.9958319664001465}\n", + "{'epoch': 0, 'update in batch': 389, '/': 18563, 'loss': 8.390036582946777}\n", + "{'epoch': 0, 'update in batch': 390, '/': 18563, 'loss': 7.745572566986084}\n", + "{'epoch': 0, 'update in batch': 391, '/': 18563, 'loss': 8.403060913085938}\n", + "{'epoch': 0, 'update in batch': 392, '/': 18563, 'loss': 8.703788757324219}\n", + "{'epoch': 0, 'update in batch': 393, '/': 18563, 'loss': 8.516857147216797}\n", + "{'epoch': 0, 'update in batch': 394, '/': 18563, 'loss': 8.078744888305664}\n", + "{'epoch': 0, 'update in batch': 395, '/': 18563, 'loss': 7.6597900390625}\n", + "{'epoch': 0, 'update in batch': 396, '/': 18563, 'loss': 8.454282760620117}\n", + "{'epoch': 0, 'update in batch': 397, '/': 18563, 'loss': 7.7727837562561035}\n", + "{'epoch': 0, 'update in batch': 398, '/': 18563, 'loss': 8.222984313964844}\n", + "{'epoch': 0, 'update in batch': 399, '/': 18563, 'loss': 8.369619369506836}\n", + "{'epoch': 0, 'update in batch': 400, '/': 18563, 'loss': 8.542525291442871}\n", + "{'epoch': 0, 'update in batch': 401, '/': 18563, 'loss': 7.9681854248046875}\n", + "{'epoch': 0, 'update in batch': 402, '/': 18563, 'loss': 8.842118263244629}\n", + "{'epoch': 0, 'update in batch': 403, '/': 18563, 'loss': 7.958454132080078}\n", + "{'epoch': 0, 'update in batch': 404, '/': 18563, 'loss': 7.084095001220703}\n", + "{'epoch': 0, 'update in batch': 405, '/': 18563, 'loss': 7.8765130043029785}\n", + "{'epoch': 0, 'update in batch': 406, '/': 18563, 'loss': 7.639691352844238}\n", + "{'epoch': 0, 'update in batch': 407, '/': 18563, 'loss': 7.440125942230225}\n", + "{'epoch': 0, 'update in batch': 408, '/': 18563, 'loss': 7.928472995758057}\n", + "{'epoch': 0, 'update in batch': 409, '/': 18563, 'loss': 8.704710960388184}\n", + "{'epoch': 0, 'update in batch': 410, '/': 18563, 'loss': 8.214713096618652}\n", + "{'epoch': 0, 'update in batch': 411, '/': 18563, 'loss': 8.115629196166992}\n", + "{'epoch': 0, 'update in batch': 412, '/': 18563, 'loss': 9.357975006103516}\n", + "{'epoch': 0, 'update in batch': 413, '/': 18563, 'loss': 7.756926536560059}\n", + "{'epoch': 0, 'update in batch': 414, '/': 18563, 'loss': 8.93007755279541}\n", + "{'epoch': 0, 'update in batch': 415, '/': 18563, 'loss': 8.929518699645996}\n", + "{'epoch': 0, 'update in batch': 416, '/': 18563, 'loss': 7.646470069885254}\n", + "{'epoch': 0, 'update in batch': 417, '/': 18563, 'loss': 8.457891464233398}\n", + "{'epoch': 0, 'update in batch': 418, '/': 18563, 'loss': 7.377375602722168}\n", + "{'epoch': 0, 'update in batch': 419, '/': 18563, 'loss': 8.03713607788086}\n", + "{'epoch': 0, 'update in batch': 420, '/': 18563, 'loss': 8.125130653381348}\n", + "{'epoch': 0, 'update in batch': 421, '/': 18563, 'loss': 6.818246364593506}\n", + "{'epoch': 0, 'update in batch': 422, '/': 18563, 'loss': 7.220259189605713}\n", + "{'epoch': 0, 'update in batch': 423, '/': 18563, 'loss': 7.800910949707031}\n", + "{'epoch': 0, 'update in batch': 424, '/': 18563, 'loss': 8.175793647766113}\n", + "{'epoch': 0, 'update in batch': 425, '/': 18563, 'loss': 7.588067054748535}\n", + "{'epoch': 0, 'update in batch': 426, '/': 18563, 'loss': 7.2054619789123535}\n", + "{'epoch': 0, 'update in batch': 427, '/': 18563, 'loss': 7.6552839279174805}\n", + "{'epoch': 0, 'update in batch': 428, '/': 18563, 'loss': 8.851090431213379}\n", + "{'epoch': 0, 'update in batch': 429, '/': 18563, 'loss': 8.768563270568848}\n", + "{'epoch': 0, 'update in batch': 430, '/': 18563, 'loss': 7.926184177398682}\n", + "{'epoch': 0, 'update in batch': 431, '/': 18563, 'loss': 8.663213729858398}\n", + "{'epoch': 0, 'update in batch': 432, '/': 18563, 'loss': 8.386338233947754}\n", + "{'epoch': 0, 'update in batch': 433, '/': 18563, 'loss': 8.77399730682373}\n", + "{'epoch': 0, 'update in batch': 434, '/': 18563, 'loss': 8.385528564453125}\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'epoch': 0, 'update in batch': 435, '/': 18563, 'loss': 7.742388725280762}\n", + "{'epoch': 0, 'update in batch': 436, '/': 18563, 'loss': 8.363179206848145}\n", + "{'epoch': 0, 'update in batch': 437, '/': 18563, 'loss': 9.262784004211426}\n", + "{'epoch': 0, 'update in batch': 438, '/': 18563, 'loss': 9.236469268798828}\n", + "{'epoch': 0, 'update in batch': 439, '/': 18563, 'loss': 8.904603958129883}\n", + "{'epoch': 0, 'update in batch': 440, '/': 18563, 'loss': 8.675701141357422}\n", + "{'epoch': 0, 'update in batch': 441, '/': 18563, 'loss': 8.811418533325195}\n", + "{'epoch': 0, 'update in batch': 442, '/': 18563, 'loss': 8.002241134643555}\n", + "{'epoch': 0, 'update in batch': 443, '/': 18563, 'loss': 9.04414176940918}\n", + "{'epoch': 0, 'update in batch': 444, '/': 18563, 'loss': 7.8904008865356445}\n", + "{'epoch': 0, 'update in batch': 445, '/': 18563, 'loss': 8.524297714233398}\n", + "{'epoch': 0, 'update in batch': 446, '/': 18563, 'loss': 8.615904808044434}\n", + "{'epoch': 0, 'update in batch': 447, '/': 18563, 'loss': 8.201675415039062}\n", + "{'epoch': 0, 'update in batch': 448, '/': 18563, 'loss': 8.531024932861328}\n", + "{'epoch': 0, 'update in batch': 449, '/': 18563, 'loss': 7.8379621505737305}\n", + "{'epoch': 0, 'update in batch': 450, '/': 18563, 'loss': 8.416367530822754}\n", + "{'epoch': 0, 'update in batch': 451, '/': 18563, 'loss': 7.4990715980529785}\n", + "{'epoch': 0, 'update in batch': 452, '/': 18563, 'loss': 7.984610557556152}\n", + "{'epoch': 0, 'update in batch': 453, '/': 18563, 'loss': 7.719987392425537}\n", + "{'epoch': 0, 'update in batch': 454, '/': 18563, 'loss': 7.9333176612854}\n", + "{'epoch': 0, 'update in batch': 455, '/': 18563, 'loss': 8.619344711303711}\n", + "{'epoch': 0, 'update in batch': 456, '/': 18563, 'loss': 7.849525451660156}\n", + "{'epoch': 0, 'update in batch': 457, '/': 18563, 'loss': 7.700997352600098}\n", + "{'epoch': 0, 'update in batch': 458, '/': 18563, 'loss': 8.065767288208008}\n", + "{'epoch': 0, 'update in batch': 459, '/': 18563, 'loss': 7.489628791809082}\n", + "{'epoch': 0, 'update in batch': 460, '/': 18563, 'loss': 8.036481857299805}\n", + "{'epoch': 0, 'update in batch': 461, '/': 18563, 'loss': 8.227537155151367}\n", + "{'epoch': 0, 'update in batch': 462, '/': 18563, 'loss': 7.66103982925415}\n", + "{'epoch': 0, 'update in batch': 463, '/': 18563, 'loss': 8.481343269348145}\n", + "{'epoch': 0, 'update in batch': 464, '/': 18563, 'loss': 8.711318969726562}\n", + "{'epoch': 0, 'update in batch': 465, '/': 18563, 'loss': 7.549925804138184}\n", + "{'epoch': 0, 'update in batch': 466, '/': 18563, 'loss': 8.020782470703125}\n", + "{'epoch': 0, 'update in batch': 467, '/': 18563, 'loss': 7.784451484680176}\n", + "{'epoch': 0, 'update in batch': 468, '/': 18563, 'loss': 7.7545928955078125}\n", + "{'epoch': 0, 'update in batch': 469, '/': 18563, 'loss': 8.484171867370605}\n", + "{'epoch': 0, 'update in batch': 470, '/': 18563, 'loss': 8.291640281677246}\n", + "{'epoch': 0, 'update in batch': 471, '/': 18563, 'loss': 7.873322486877441}\n", + "{'epoch': 0, 'update in batch': 472, '/': 18563, 'loss': 7.891420841217041}\n", + "{'epoch': 0, 'update in batch': 473, '/': 18563, 'loss': 8.376962661743164}\n", + "{'epoch': 0, 'update in batch': 474, '/': 18563, 'loss': 8.147513389587402}\n", + "{'epoch': 0, 'update in batch': 475, '/': 18563, 'loss': 7.739943027496338}\n", + "{'epoch': 0, 'update in batch': 476, '/': 18563, 'loss': 7.52395486831665}\n", + "{'epoch': 0, 'update in batch': 477, '/': 18563, 'loss': 7.962507724761963}\n", + "{'epoch': 0, 'update in batch': 478, '/': 18563, 'loss': 7.61989688873291}\n", + "{'epoch': 0, 'update in batch': 479, '/': 18563, 'loss': 8.628551483154297}\n", + "{'epoch': 0, 'update in batch': 480, '/': 18563, 'loss': 10.344924926757812}\n", + "{'epoch': 0, 'update in batch': 481, '/': 18563, 'loss': 9.189457893371582}\n", + "{'epoch': 0, 'update in batch': 482, '/': 18563, 'loss': 9.283202171325684}\n", + "{'epoch': 0, 'update in batch': 483, '/': 18563, 'loss': 8.036226272583008}\n", + "{'epoch': 0, 'update in batch': 484, '/': 18563, 'loss': 8.949888229370117}\n", + "{'epoch': 0, 'update in batch': 485, '/': 18563, 'loss': 9.32779598236084}\n", + "{'epoch': 0, 'update in batch': 486, '/': 18563, 'loss': 9.554967880249023}\n", + "{'epoch': 0, 'update in batch': 487, '/': 18563, 'loss': 8.438692092895508}\n", + "{'epoch': 0, 'update in batch': 488, '/': 18563, 'loss': 8.015823364257812}\n", + "{'epoch': 0, 'update in batch': 489, '/': 18563, 'loss': 8.621005058288574}\n", + "{'epoch': 0, 'update in batch': 490, '/': 18563, 'loss': 8.432602882385254}\n", + "{'epoch': 0, 'update in batch': 491, '/': 18563, 'loss': 8.659430503845215}\n", + "{'epoch': 0, 'update in batch': 492, '/': 18563, 'loss': 8.693103790283203}\n", + "{'epoch': 0, 'update in batch': 493, '/': 18563, 'loss': 8.895064353942871}\n" + ] + }, + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0mmodel\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mModel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_size\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muniq_words\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdevice\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 2\u001b[0;31m \u001b[0mtrain\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdataset\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m64\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[0;32m\u001b[0m in \u001b[0;36mtrain\u001b[0;34m(dataset, model, max_epochs, batch_size)\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcriterion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_pred\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtranspose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 17\u001b[0;31m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 18\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/torch/_tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 361\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 362\u001b[0m inputs=inputs)\n\u001b[0;32m--> 363\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 364\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 365\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mregister_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.8/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 171\u001b[0m \u001b[0;31m# some Python versions print out the first line of a multi-line function\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 172\u001b[0m \u001b[0;31m# calls in the traceback and some print out the last line\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 173\u001b[0;31m Variable._execution_engine.run_backward( # Calls into the C++ engine to run the backward pass\n\u001b[0m\u001b[1;32m 174\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrad_tensors_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 175\u001b[0m allow_unreachable=True, accumulate_grad=True) # Calls into the C++ engine to run the backward pass\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "model = Model(vocab_size = len(dataset.uniq_words)).to(device)\n", + "train(dataset, model, 1, 64)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def predict(dataset, model, text, next_words=5):\n", + " model.eval()\n", + " words = text.split(' ')\n", + " state_h, state_c = model.init_state(len(words))\n", + "\n", + " for i in range(0, next_words):\n", + " x = torch.tensor([[dataset.word_to_index[w] for w in words[i:]]]).to(device)\n", + " y_pred, (state_h, state_c) = model(x, (state_h, state_c))\n", + "\n", + " last_word_logits = y_pred[0][-1]\n", + " p = torch.nn.functional.softmax(last_word_logits, dim=0).detach().cpu().numpy()\n", + " word_index = np.random.choice(len(last_word_logits), p=p)\n", + " words.append(dataset.index_to_word[word_index])\n", + "\n", + " return words" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['kmicic', 'szedł', 'zwycięzco', 'po', 'do', 'zlituj', 'i']" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predict(dataset, model, 'kmicic szedł')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ZADANIE\n", + "\n", + "Stworzyć sieć rekurencyjną GRU dla Challenging America word-gap prediction. Wymogi takie jak zawsze, zadanie widoczne na gonito" + ] + } + ], + "metadata": { + "author": "Jakub Pokrywka", + "email": "kubapok@wmi.amu.edu.pl", + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "lang": "pl", + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.3" + }, + "subtitle": "0.Informacje na temat przedmiotu[ćwiczenia]", + "title": "Ekstrakcja informacji", + "year": "2021" + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/lab/bow1.drawio.png b/lab/bow1.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..c500af51b1ce9404a6c9f749b8e900b25f86bdbd GIT binary patch literal 23080 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