From 79356d13f813cb35f96af26de31d01963c7c00c7 Mon Sep 17 00:00:00 2001 From: Prianikq <71663981+Prianikq@users.noreply.github.com> Date: Sat, 23 Jul 2022 11:56:21 +0300 Subject: [PATCH 01/11] Added PyTorch notebook --- .../15-LanguageModeling/CBoW-PyTorch.ipynb | 563 ++++++++++++++++++ 1 file changed, 563 insertions(+) create mode 100644 lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb diff --git a/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb b/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb new file mode 100644 index 00000000..ea24e4de --- /dev/null +++ b/lessons/5-NLP/15-LanguageModeling/CBoW-PyTorch.ipynb @@ -0,0 +1,563 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "NXTSugt6ieXh" + }, + "source": [ + "## Training CBoW Model\n", + "\n", + "This notebooks is a part of [AI for Beginners Curriculum](http://aka.ms/ai-beginners)\n", + "\n", + "In this example, we will look at training CBoW language model to get our own Word2Vec embedding space. We will use AG News dataset as the source of text." + ] + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "import torchtext\n", + "import os\n", + "import collections\n", + "import builtins\n", + "import random\n", + "import numpy as np" + ], + "metadata": { + "id": "q-UiiJUKaxHj" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" + ], + "metadata": { + "id": "TFbR8CZaTZ1q" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "First let's load our dataset and define tokenizer and vocabulary. We will set `vocab_size` to 5000 to limit computations a bit." + ], + "metadata": { + "id": "HIwC7lI5T-ov" + } + }, + { + "cell_type": "code", + "source": [ + "def load_dataset(ngrams = 1, min_freq = 1, vocab_size = 5000 , lines_cnt = 500):\n", + " tokenizer = torchtext.data.utils.get_tokenizer('basic_english')\n", + " print(\"Loading dataset...\")\n", + " test_dataset, train_dataset = torchtext.datasets.AG_NEWS(root='./data')\n", + " train_dataset = list(train_dataset)\n", + " test_dataset = list(test_dataset)\n", + " classes = ['World', 'Sports', 'Business', 'Sci/Tech']\n", + " print('Building vocab...')\n", + " counter = collections.Counter()\n", + " for i, (_, line) in enumerate(train_dataset):\n", + " counter.update(torchtext.data.utils.ngrams_iterator(tokenizer(line),ngrams=ngrams))\n", + " if i == lines_cnt:\n", + " break\n", + " vocab = torchtext.vocab.Vocab(collections.Counter(dict(counter.most_common(vocab_size))), min_freq=min_freq)\n", + " return train_dataset, test_dataset, classes, vocab, tokenizer" + ], + "metadata": { + "id": "wdZuygtgiuLG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train_dataset, test_dataset, _, vocab, tokenizer = load_dataset()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4d1nU1gsivGu", + "outputId": "949fe272-ae0e-49f5-c373-6703458b3a74" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Loading dataset...\n", + "Building vocab...\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "def encode(x, vocabulary, tokenizer = tokenizer):\n", + " return [vocabulary[s] for s in tokenizer(x)]" + ], + "metadata": { + "id": "1XDYNhG8ToFV" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LIlQk6_PaHVY" + }, + "source": [ + "## CBoW Model\n", + "\n", + "CBoW learns to predict a word based on the $2N$ neighboring words. For example, when $N=1$, we will get the following pairs from the sentence *I like to train networks*: (like,I), (I, like), (to, like), (like,to), (train,to), (to, train), (networks, train), (train,networks). Here, first word is the neighboring word used as an input, and second word is the one we are predicting.\n", + "\n", + "To build a network to predict next word, we will need to supply neighboring word as input, and get word number as output. The architecture of CBoW network is the following:\n", + "\n", + "* Input word is passed through the embedding layer. This very embedding layer would be our Word2Vec embedding, thus we will define it separately as `embedder` variable. We will use embedding size = 30 in this example, even though you might want to experiment with higher dimensions (real word2vec has 300)\n", + "* Embedding vector would then be passed to a linear layer that will predict output word. Thus it has the `vocab_size` neurons.\n", + "\n", + "For the output, if we use `CrossEntropyLoss` as loss function, we would also have to provide just word numbers as expected results, without one-hot encoding." + ] + }, + { + "cell_type": "code", + "source": [ + "vocab_size = len(vocab)\n", + "\n", + "embedder = torch.nn.Embedding(num_embeddings = vocab_size, embedding_dim = 30)\n", + "model = torch.nn.Sequential(\n", + " embedder,\n", + " torch.nn.Linear(in_features = 30, out_features = vocab_size),\n", + ")\n", + "\n", + "print(model)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "akKTcKQKkfl2", + "outputId": "da687e3e-a8ec-4c1a-e456-ab8cd6ac7dad" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Sequential(\n", + " (0): Embedding(5002, 30)\n", + " (1): Linear(in_features=30, out_features=5002, bias=True)\n", + ")\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Nud6jgGPaHVa" + }, + "source": [ + "## Preparing Training Data\n", + "\n", + "Now let's program the main function that will compute CBoW word pairs from text. This function will allow us to specify window size, and will return a set of pairs - input and output word. Note that this function can be used on words, as well as on vectors/tensors - which will allow us to encode the text, before passing it to `to_cbow` function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "x-dsXygOieXn", + "outputId": "c2218280-e540-40ba-9546-efe48d0d714f" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[['like', 'I'], ['to', 'I'], ['I', 'like'], ['to', 'like'], ['train', 'like'], ['I', 'to'], ['like', 'to'], ['train', 'to'], ['networks', 'to'], ['like', 'train'], ['to', 'train'], ['networks', 'train'], ['to', 'networks'], ['train', 'networks']]\n", + "[[232, 172], [5, 172], [172, 232], [5, 232], [0, 232], [172, 5], [232, 5], [0, 5], [1202, 5], [232, 0], [5, 0], [1202, 0], [5, 1202], [0, 1202]]\n" + ] + } + ], + "source": [ + "def to_cbow(sent,window_size=2):\n", + " res = []\n", + " for i,x in enumerate(sent):\n", + " for j in range(max(0,i-window_size),min(i+window_size+1,len(sent))):\n", + " if i!=j:\n", + " res.append([sent[j],x])\n", + " return res\n", + "\n", + "print(to_cbow(['I','like','to','train','networks']))\n", + "print(to_cbow(encode('I like to train networks', vocab)))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "XVaaDLjaaHVb" + }, + "source": [ + "Let's prepare the training dataset. We will go through all news, call `to_cbow` to get the list of word pairs, and add those pairs to `X` and `Y`. For the sake of time, we will only consider first 10k news items - you can easily remove the limitation in case you have more time to wait, and want to get better embeddings :)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "54b-Gd9TieXo" + }, + "outputs": [], + "source": [ + "X = []\n", + "Y = []\n", + "for i, x in zip(range(10000), train_dataset):\n", + " for w1, w2 in to_cbow(encode(x[1], vocab), window_size = 5):\n", + " X.append(w1)\n", + " Y.append(w2)\n", + "\n", + "X = torch.tensor(X)\n", + "Y = torch.tensor(Y)" + ] + }, + { + "cell_type": "markdown", + "source": [ + "We will also convert that data to one dataset, and create dataloader:" + ], + "metadata": { + "id": "cwWy0PzXWhN5" + } + }, + { + "cell_type": "code", + "source": [ + "class SimpleIterableDataset(torch.utils.data.IterableDataset):\n", + " def __init__(self, X, Y):\n", + " super(SimpleIterableDataset).__init__()\n", + " self.data = []\n", + " for i in range(len(X)):\n", + " self.data.append( (Y[i], X[i]) )\n", + " random.shuffle(self.data)\n", + "\n", + " def __iter__(self):\n", + " return iter(self.data)" + ], + "metadata": { + "id": "mfoAcGPFZU8p" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "e4NQ_-5waHVc" + }, + "source": [ + "We will also convert that data to one dataset, and create dataloader:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "AbLUcojlieXo" + }, + "outputs": [], + "source": [ + "ds = SimpleIterableDataset(X, Y)\n", + "dl = torch.utils.data.DataLoader(ds, batch_size = 256)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pKQr7sXeaHVc" + }, + "source": [ + "Now let's do the actual training. We will use `SGD` optimizer with pretty high learning rate. You can also try playing around with other optimizers, such as `Adam`. We will train for 10 epochs to begin with - and you can re-run this cell if you want even lower loss." + ] + }, + { + "cell_type": "code", + "source": [ + "def train_epoch(net, dataloader, lr = 0.01, optimizer = None, loss_fn = torch.nn.CrossEntropyLoss(), epochs = None, report_freq = 1):\n", + " optimizer = optimizer or torch.optim.Adam(net.parameters(), lr = lr)\n", + " loss_fn = loss_fn.to(device)\n", + " net.train()\n", + "\n", + " for i in range(epochs):\n", + " total_loss, j = 0, 0, \n", + " for labels, features in dataloader:\n", + " optimizer.zero_grad()\n", + " features, labels = features.to(device), labels.to(device)\n", + " out = net(features)\n", + " loss = loss_fn(out, labels)\n", + " loss.backward()\n", + " optimizer.step()\n", + " total_loss += loss\n", + " j += 1\n", + " if i % report_freq == 0:\n", + " print(f\"Epoch: {i+1}: loss={total_loss.item()/j}\")\n", + "\n", + " return total_loss.item()/j" + ], + "metadata": { + "id": "HeeCYKr_KF1w" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "train_epoch(net = model, dataloader = dl, optimizer = torch.optim.SGD(model.parameters(), lr = 0.1), loss_fn = torch.nn.CrossEntropyLoss(), epochs = 10)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KVgwGtDHgDlT", + "outputId": "2447833f-f0e3-4566-c33d-addbfe2f451d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 1: loss=5.664632366860172\n", + "Epoch: 2: loss=5.632101973960962\n", + "Epoch: 3: loss=5.610399051405015\n", + "Epoch: 4: loss=5.594621561080262\n", + "Epoch: 5: loss=5.582538017415446\n", + "Epoch: 6: loss=5.572900234519603\n", + "Epoch: 7: loss=5.564951676341915\n", + "Epoch: 8: loss=5.558288112064614\n", + "Epoch: 9: loss=5.552576955031129\n", + "Epoch: 10: loss=5.547634165194347\n" + ] + }, + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "5.547634165194347" + ] + }, + "metadata": {}, + "execution_count": 16 + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "W8u2qXZmaHVd" + }, + "source": [ + "## Trying out Word2Vec\n", + "\n", + "To use Word2Vec, let's extract vectors corresponding to all words in our vocabulary:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "r8TatcXjkU_t" + }, + "outputs": [], + "source": [ + "vectors = torch.stack([embedder(torch.tensor(vocab[s])) for s in vocab.itos], 0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3OcX21UOaHVd" + }, + "source": [ + "Let's see, for example, how the word **Paris** is encoded into a vector:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "bz6tAeLzieXp", + "outputId": "5b20850e-4342-45e9-f840-cfac2b4d61d8" + }, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "tensor([-0.0915, 2.1224, -0.0281, -0.6819, 1.1219, 0.6458, -1.3704, -1.3314,\n", + " -1.1437, 0.4496, 0.2301, -0.3515, -0.8485, 1.0481, 0.4386, -0.8949,\n", + " 0.5644, 1.0939, -2.5096, 3.2949, -0.2601, -0.8640, 0.1421, -0.0804,\n", + " -0.5083, -1.0560, 0.9753, -0.5949, -1.6046, 0.5774],\n", + " grad_fn=)\n" + ] + } + ], + "source": [ + "paris_vec = embedder(torch.tensor(vocab['paris']))\n", + "print(paris_vec)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pHTJlaeYaHVd" + }, + "source": [ + "It is interesting to use Word2Vec to look for synonyms. The following function will return `n` closest words to a given input. To find them, we compute the norm of $|w_i - v|$, where $v$ is the vector corresponding to our input word, and $w_i$ is the encoding of $i$-th word in the vocabulary. We then sort the array and return corresponding indices using `argsort`, and take first `n` elements of the list, which encode positions of closest words in the vocabulary. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NlZyi-_olFar", + "outputId": "b5dbb163-88c4-4d5a-eaf2-6751f700e98c" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['microsoft', 'quoted', 'lp', 'rate', 'top']" + ] + }, + "metadata": {}, + "execution_count": 56 + } + ], + "source": [ + "def close_words(x, n = 5):\n", + " vec = embedder(torch.tensor(vocab[x]))\n", + " top5 = np.linalg.norm(vectors.detach().numpy() - vec.detach().numpy(), axis = 1).argsort()[:n]\n", + " return [ vocab.itos[x] for x in top5 ]\n", + "\n", + "close_words('microsoft')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-dQq7xeAln0U", + "outputId": "66f768c3-c248-4bfd-ce4f-c8ffc6d0dd0d" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['basketball', 'lot', 'sinai', 'states', 'healthdaynews']" + ] + }, + "metadata": {}, + "execution_count": 51 + } + ], + "source": [ + "close_words('basketball')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "fJXqK26b29sa", + "outputId": "78f0baba-ffd0-485a-dd87-0a12bedfd7fa" + }, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "['funds', 'travel', 'sydney', 'japan', 'business']" + ] + }, + "metadata": {}, + "execution_count": 77 + } + ], + "source": [ + "close_words('funds')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "My0VeTDd3Ji8" + }, + "source": [ + "## Takeaway\n", + "\n", + "Using clever techniques such as CBoW, we can train Word2Vec model. You may also try to train skip-gram model that is trained to predict the neighboring word given the central one, and see how well it performs. " + ] + } + ], + "metadata": { + "colab": { + "collapsed_sections": [], + "name": "CBoW-PyTorch.ipynb", + "provenance": [] + }, + "interpreter": { + "hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f" + }, + "kernelspec": { + "display_name": "Python 3.8.12 ('py38')", + "language": "python", + "name": "python3" + }, + "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.12" + }, + "orig_nbformat": 4, + "gpuClass": "standard" + }, + "nbformat": 4, + "nbformat_minor": 0 +} \ No newline at end of file From 174073224d72fbf5b5433bfc9e9f60c0715d9991 Mon Sep 17 00:00:00 2001 From: Prianikq <71663981+Prianikq@users.noreply.github.com> Date: Sat, 23 Jul 2022 11:57:59 +0300 Subject: [PATCH 02/11] Update README.md --- lessons/5-NLP/15-LanguageModeling/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lessons/5-NLP/15-LanguageModeling/README.md b/lessons/5-NLP/15-LanguageModeling/README.md index 06d73d1a..dc5e4a51 100644 --- a/lessons/5-NLP/15-LanguageModeling/README.md +++ b/lessons/5-NLP/15-LanguageModeling/README.md @@ -23,6 +23,8 @@ In our previous examples, we used pre-trained semantic embeddings, but it is int Continue your learning in the following notebooks: * [Training CBoW Word2Vec with TensorFlow](CBoW-TF.ipynb) +* [Training CBoW Word2Vec with PyTorch](CBoW-PyTorch.ipynb) + ## Conclusion From 23712d92c86745b4cf3cc51aff63fd47deddfdbd Mon Sep 17 00:00:00 2001 From: Prianikq <71663981+Prianikq@users.noreply.github.com> Date: Sat, 23 Jul 2022 12:04:59 +0300 Subject: [PATCH 03/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 358c6603..899d6fe1 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ For a gentle introduction to *AI in the Cloud* topics you may consider taking th 13Text Representation. Bow/TF-IDFTextPyTorchTensorFlow 14Semantic word embeddings. Word2Vec and GloVeTextPyTorchTensorFlow -15Language Modeling. Training your own embeddingsTextTensorFlowLab +15Language Modeling. Training your own embeddingsTextPyTorchTensorFlowLab 16Recurrent Neural NetworksTextPyTorchTensorFlow 17Generative Recurrent NetworksTextPyTorchTensorFlowLab 18Transformers. BERT.TextPyTorchTensorFlow From 63e58cfc6df18d283453e86c9c023868daa66d3a Mon Sep 17 00:00:00 2001 From: anxieuse Date: Sun, 24 Jul 2022 16:32:18 +0300 Subject: [PATCH 04/11] Create file for Pytroch. --- .../22-DeepRL/CartPole-RL-Pytorch.ipynb | 0 .../6-Other/22-DeepRL/CartPole-RL-TF.ipynb | 210 ++++++++--- lessons/6-Other/22-DeepRL/notebook.ipynb | 341 +++++++++++------- 3 files changed, 358 insertions(+), 193 deletions(-) create mode 100644 lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb new file mode 100644 index 00000000..e69de29b diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb index 5afa5a35..71f925f1 100644 --- a/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb +++ b/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb @@ -17,21 +17,21 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Requirement already satisfied: gym in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (0.23.1)\n", + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: gym in /home/leo/.local/lib/python3.10/site-packages (0.25.0)\n", "Collecting pygame\n", - " Downloading pygame-2.1.2-cp38-cp38-win_amd64.whl (8.4 MB)\n", - "Requirement already satisfied: importlib-metadata>=4.10.0 in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (from gym) (4.11.3)\n", - "Requirement already satisfied: cloudpickle>=1.2.0 in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (from gym) (2.0.0)\n", - "Requirement already satisfied: gym-notices>=0.0.4 in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (from gym) (0.0.6)\n", - "Requirement already satisfied: numpy>=1.18.0 in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (from gym) (1.22.3)\n", - "Requirement already satisfied: zipp>=0.5 in c:\\winapp\\miniconda3\\envs\\py38\\lib\\site-packages (from importlib-metadata>=4.10.0->gym) (3.6.0)\n", + " Downloading pygame-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.9/21.9 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n", + "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", + "Requirement already satisfied: gym-notices>=0.0.4 in /home/leo/.local/lib/python3.10/site-packages (from gym) (0.0.7)\n", "Installing collected packages: pygame\n", "Successfully installed pygame-2.1.2\n" ] @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -64,10 +64,22 @@ "Action space: Discrete(2)\n", "Observation space: Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32)\n" ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n", + "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n" + ] } ], "source": [ "import gym\n", + "import pygame\n", + "import tqdm\n", "\n", "env = gym.make(\"CartPole-v1\")\n", "\n", @@ -86,33 +98,44 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 3, "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", + "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", + "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", + " deprecation(\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "[-0.04825775 -0.21918646 -0.00796685 0.27188525] -> 1.0\n", - "[-0.05264147 -0.4141938 -0.00252914 0.5620448 ] -> 1.0\n", - "[-0.06092535 -0.21903647 0.00871175 0.26856613] -> 1.0\n", - "[-0.06530608 -0.41428167 0.01408308 0.56398404] -> 1.0\n", - "[-0.07359171 -0.60959834 0.02536276 0.8610703 ] -> 1.0\n", - "[-0.08578368 -0.4148308 0.04258416 0.57646877] -> 1.0\n", - "[-0.09408029 -0.610523 0.05411354 0.88225687] -> 1.0\n", - "[-0.10629076 -0.4161761 0.07175867 0.6070649 ] -> 1.0\n", - "[-0.11461428 -0.22212696 0.08389997 0.33781925] -> 1.0\n", - "[-0.11905681 -0.0282929 0.09065636 0.07272854] -> 1.0\n", - "[-0.11962268 0.16542032 0.09211093 -0.19003159] -> 1.0\n", - "[-0.11631427 -0.03089041 0.08831029 0.13022853] -> 1.0\n", - "[-0.11693208 -0.22715913 0.09091487 0.44941387] -> 1.0\n", - "[-0.12147526 -0.42344147 0.09990314 0.76931363] -> 1.0\n", - "[-0.12994409 -0.61978614 0.11528942 1.0916848 ] -> 1.0\n", - "[-0.14233981 -0.81622297 0.13712311 1.4182041 ] -> 1.0\n", - "[-0.15866427 -1.01275 0.1654872 1.7504154 ] -> 1.0\n", - "[-0.17891927 -1.2093195 0.2004955 2.0896728 ] -> 1.0\n", - "[-0.20310566 -1.4058217 0.24228896 2.4370732 ] -> 1.0\n", - "Total reward: 19.0\n" + "[-0.01453476 -0.23855041 -0.04445581 0.29491952] -> 1.0\n", + "[-0.01930577 -0.4330113 -0.03855742 0.57325697] -> 1.0\n", + "[-0.027966 -0.62757206 -0.02709228 0.8535481 ] -> 1.0\n", + "[-0.04051744 -0.43209147 -0.01002132 0.55247074] -> 1.0\n", + "[-0.04915927 -0.23683023 0.00102809 0.25664735] -> 1.0\n", + "[-0.05389587 -0.04172298 0.00616104 -0.03571114] -> 1.0\n", + "[-0.05473033 0.15331008 0.00544682 -0.32644385] -> 1.0\n", + "[-0.05166413 0.34835407 -0.00108206 -0.6174041 ] -> 1.0\n", + "[-0.04469705 0.15324724 -0.01343014 -0.3250622 ] -> 1.0\n", + "[-0.0416321 0.34855783 -0.01993139 -0.62195 ] -> 1.0\n", + "[-0.03466095 0.54395235 -0.03237038 -0.92084295] -> 1.0\n", + "[-0.0237819 0.7394964 -0.05078724 -1.2235206 ] -> 1.0\n", + "[-0.00899197 0.5450641 -0.07525766 -0.9471733 ] -> 1.0\n", + "[ 0.00190931 0.7411144 -0.09420113 -1.2625213 ] -> 1.0\n", + "[ 0.0167316 0.54731464 -0.11945155 -1.0007646 ] -> 1.0\n", + "[ 0.02767789 0.74381286 -0.13946684 -1.3284469 ] -> 1.0\n", + "[ 0.04255415 0.55069894 -0.16603577 -1.0824591 ] -> 1.0\n", + "[ 0.05356812 0.35811067 -0.18768495 -0.84614 ] -> 1.0\n", + "[ 0.06073034 0.55522907 -0.20460775 -1.1914812 ] -> 1.0\n", + "[ 0.07183492 0.7523274 -0.22843738 -1.5406975 ] -> 1.0\n", + "Total reward: 20.0\n" ] } ], @@ -126,7 +149,9 @@ " obs, rew, done, info = env.step(env.action_space.sample())\n", " total_reward += rew\n", " print(f\"{obs} -> {rew}\")\n", - "print(f\"Total reward: {total_reward}\")" + "print(f\"Total reward: {total_reward}\")\n", + "\n", + "env.close()" ] }, { @@ -152,9 +177,35 @@ }, { "cell_type": "code", - "execution_count": 100, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.10/dist-packages/tensorflow/__init__.py:29: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives\n", + " import distutils as _distutils\n", + "2022-07-24 16:22:33.879054: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:33.879079: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n", + "/usr/local/lib/python3.10/dist-packages/flatbuffers/compat.py:19: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses\n", + " import imp\n", + "2022-07-24 16:22:35.795765: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:975] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", + "2022-07-24 16:22:35.795964: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796020: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796070: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796120: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcufft.so.10'; dlerror: libcufft.so.10: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796169: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcurand.so.10'; dlerror: libcurand.so.10: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796218: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusolver.so.11'; dlerror: libcusolver.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796267: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796317: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:22:35.796325: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", + "Skipping registering GPU devices...\n", + "2022-07-24 16:22:35.796558: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", + "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], "source": [ "import numpy as np\n", "import tensorflow as tf\n", @@ -181,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 101, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -213,14 +264,14 @@ }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Total reward: 13.0\n" + "Total reward: 27.0\n" ] } ], @@ -238,7 +289,7 @@ }, { "cell_type": "code", - "execution_count": 79, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -270,38 +321,53 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0 -> 44.0\n", - "100 -> 105.0\n", - "200 -> 145.0\n", - "300 -> 70.0\n", - "400 -> 190.0\n", - "500 -> 298.0\n", - "600 -> 289.0\n", - "700 -> 499.0\n", - "800 -> 499.0\n", - "900 -> 499.0\n" + "0 -> 220.0\n", + "100 -> 499.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-07-24 16:24:08.306764: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:24:18.603528: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "200 -> 499.0\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2022-07-24 16:25:03.522510: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:25:08.844014: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" ] }, { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 73, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -340,9 +406,33 @@ }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "error", + "evalue": "display Surface quit", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31merror\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_37078/1459719159.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_episode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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/tmp/ipykernel_37078/3855001447.py\u001b[0m in \u001b[0;36mrun_episode\u001b[0;34m(max_steps_per_episode, render)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_steps_per_episode\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 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 7\u001b[0m \u001b[0maction_probs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0maction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_actions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maction_probs\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/order_enforcing.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\"set `disable_render_order_enforcing=True` on the OrderEnforcer wrapper.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m )\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/env_checker.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0menv_render_passive_checker\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_renders\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 216\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmode\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 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"human\"\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~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36m_render\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 298\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscreen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mblit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\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 299\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"human\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 300\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpump\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;31merror\u001b[0m: display Surface quit" + ] + } + ], "source": [ "_ = run_episode(render=True)" ] @@ -540,11 +630,8 @@ } ], "metadata": { - "interpreter": { - "hash": "16af2a8bbb083ea23e5e41c7f5787656b2ce26968575d8763f2c4b17f9cd711f" - }, "kernelspec": { - "display_name": "Python 3.8.12 ('py38')", + "display_name": "Python 3.10.4 64-bit", "language": "python", "name": "python3" }, @@ -558,9 +645,14 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.12" + "version": "3.10.4" }, - "orig_nbformat": 4 + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + } + } }, "nbformat": 4, "nbformat_minor": 2 diff --git a/lessons/6-Other/22-DeepRL/notebook.ipynb b/lessons/6-Other/22-DeepRL/notebook.ipynb index b6338c89..50c2c33f 100644 --- a/lessons/6-Other/22-DeepRL/notebook.ipynb +++ b/lessons/6-Other/22-DeepRL/notebook.ipynb @@ -1,39 +1,15 @@ { - "metadata": { - "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.7.0" - }, - "orig_nbformat": 4, - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.0 64-bit ('3.7')" - }, - "interpreter": { - "hash": "70b38d7a306a849643e446cd70466270a13445e5987dfa1344ef2b127438fa4d" - } - }, - "nbformat": 4, - "nbformat_minor": 2, "cells": [ { + "cell_type": "markdown", + "metadata": {}, "source": [ "## CartPole Skating\n", "\n", "> **Problem**: If Peter wants to escape from the wolf, he needs to be able to move faster than him. We will see how Peter can learn to skate, in particular, to keep balance, using Q-Learning.\n", "\n", "First, let's install the gym and import required libraries:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -41,23 +17,34 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "Requirement already satisfied: gym in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (0.18.3)\n", - "Requirement already satisfied: Pillow<=8.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (7.0.0)\n", - "Requirement already satisfied: scipy in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.4.1)\n", - "Requirement already satisfied: numpy>=1.10.4 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.19.2)\n", - "Requirement already satisfied: cloudpickle<1.7.0,>=1.2.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.6.0)\n", - "Requirement already satisfied: pyglet<=1.5.15,>=1.4.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from gym) (1.5.15)\n", - "\u001b[33mWARNING: You are using pip version 20.2.3; however, version 21.1.2 is available.\n", - "You should consider upgrading via the '/Library/Frameworks/Python.framework/Versions/3.7/bin/python3.7 -m pip install --upgrade pip' command.\u001b[0m\n" + "Defaulting to user installation because normal site-packages is not writeable\n", + "Collecting gym\n", + " Downloading gym-0.25.0.tar.gz (720 kB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m720.4/720.4 KB\u001b[0m \u001b[31m3.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25h Installing build dependencies ... \u001b[?25ldone\n", + "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", + "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25hRequirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", + "Collecting gym-notices>=0.0.4\n", + " Downloading gym_notices-0.0.7-py3-none-any.whl (2.7 kB)\n", + "Collecting cloudpickle>=1.2.0\n", + " Downloading cloudpickle-2.1.0-py3-none-any.whl (25 kB)\n", + "Building wheels for collected packages: gym\n", + " Building wheel for gym (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for gym: filename=gym-0.25.0-py3-none-any.whl size=824430 sha256=3f4ed647f1d12814bb457f7d83a7ccd0f682d12a0259ca07b7fab0db5100fc6e\n", + " Stored in directory: /home/leo/.cache/pip/wheels/c0/3c/33/32d86254a5bd554f5f07759ae1794646e490dd5fa81ebdcda3\n", + "Successfully built gym\n", + "Installing collected packages: gym-notices, cloudpickle, gym\n", + "Successfully installed cloudpickle-2.1.0 gym-0.25.0 gym-notices-0.0.7\n" ] } ], "source": [ "import sys\n", - "!pip install gym \n", + "!pip install gym pygame\n", "\n", "import gym\n", "import matplotlib.pyplot as plt\n", @@ -66,40 +53,94 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Create a cartpole environment" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Discrete(2)\n", + "Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32)\n", + "1\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n", + "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n" + ] + } + ], "source": [ "env = gym.make(\"CartPole-v1\")\n", "print(env.action_space)\n", "print(env.observation_space)\n", "print(env.action_space.sample())" - ], - "cell_type": "code", - "metadata": {}, - "execution_count": 2, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Discrete(2)\nBox(-3.4028234663852886e+38, 3.4028234663852886e+38, (4,), float32)\n0\n" - ] - } ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "To see how the environment works, let's run a short simulation for 100 steps." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", + "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", + "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", + " deprecation(\n" + ] + }, + { + "ename": "DependencyNotInstalled", + "evalue": "pygame is not installed, run `pip install gym[classic_control]`", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mModuleNotFoundError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36m_render\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 221\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 222\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 223\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpygame\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgfxdraw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'pygame'", + "\nDuring handling of the above exception, another exception occurred:\n", + "\u001b[0;31mDependencyNotInstalled\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_32716/4123126963.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m100\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----> 4\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 5\u001b[0m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maction_space\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msample\u001b[0m\u001b[0;34m(\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 6\u001b[0m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclose\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/order_enforcing.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\"set `disable_render_order_enforcing=True` on the OrderEnforcer wrapper.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m )\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/env_checker.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 51\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchecked_render\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 52\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchecked_render\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 53\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0menv_render_passive_checker\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 54\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/utils/passive_env_checker.py\u001b[0m in \u001b[0;36menv_render_passive_checker\u001b[0;34m(env, *args, **kwargs)\u001b[0m\n\u001b[1;32m 322\u001b[0m )\n\u001b[1;32m 323\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 324\u001b[0;31m \u001b[0mresult\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 325\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 326\u001b[0m \u001b[0;31m# TODO: Check that the result is correct\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_renders\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 216\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmode\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 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"human\"\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~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36m_render\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 223\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpygame\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgfxdraw\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 224\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mImportError\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 225\u001b[0;31m raise DependencyNotInstalled(\n\u001b[0m\u001b[1;32m 226\u001b[0m \u001b[0;34m\"pygame is not installed, run `pip install gym[classic_control]`\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 227\u001b[0m )\n", + "\u001b[0;31mDependencyNotInstalled\u001b[0m: pygame is not installed, run `pip install gym[classic_control]`" + ] + } + ], "source": [ "env.reset()\n", "\n", @@ -107,45 +148,23 @@ " env.render()\n", " env.step(env.action_space.sample())\n", "env.close()" - ], - "cell_type": "code", - "metadata": {}, - "execution_count": 3, - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gym/logger.py:30: UserWarning: \u001b[33mWARN: You are calling 'step()' even though this environment has already returned done = True. You should always call 'reset()' once you receive 'done = True' -- any further steps are undefined behavior.\u001b[0m\n warnings.warn(colorize('%s: %s'%('WARN', msg % args), 'yellow'))\n" - ] - } ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "During simulation, we need to get observations in order to decide how to act. In fact, `step` function returns us back current observations, reward function, and the `done` flag that indicates whether it makes sense to continue the simulation or not:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { - "source": [ - "env.reset()\n", - "\n", - "done = False\n", - "while not done:\n", - " env.render()\n", - " obs, rew, done, info = env.step(env.action_space.sample())\n", - " print(f\"{obs} -> {rew}\")\n", - "env.close()" - ], "cell_type": "code", - "metadata": {}, "execution_count": 4, + "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "[ 0.03044442 -0.19543914 -0.04496216 0.28125618] -> 1.0\n", "[ 0.02653564 -0.38989186 -0.03933704 0.55942606] -> 1.0\n", @@ -168,14 +187,24 @@ "[ 0.12921301 0.59883361 -0.22594088 -1.22169133] -> 1.0\n" ] } + ], + "source": [ + "env.reset()\n", + "\n", + "done = False\n", + "while not done:\n", + " env.render()\n", + " obs, rew, done, info = env.step(env.action_space.sample())\n", + " print(f\"{obs} -> {rew}\")\n", + "env.close()" ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "We can get min and max value of those numbers:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -183,10 +212,11 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n" + "[-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38]\n", + "[4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38]\n" ] } ], @@ -196,11 +226,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## State Discretization" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -213,11 +243,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "Let's also explore other discretization method using bins:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -225,10 +255,11 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "Sample bins for interval (-5,5) with 10 bins\n [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n" + "Sample bins for interval (-5,5) with 10 bins\n", + " [-5. -4. -3. -2. -1. 0. 1. 2. 3. 4. 5.]\n" ] } ], @@ -247,11 +278,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "Let's now run a short simulation and observe those discrete environment values." - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -259,10 +290,21 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ - "(0, 0, -1, -3)\n(0, 0, -2, 0)\n(0, 0, -2, -3)\n(0, 1, -3, -6)\n(0, 2, -4, -9)\n(0, 3, -6, -12)\n(0, 2, -8, -9)\n(0, 3, -10, -13)\n(0, 4, -13, -16)\n(0, 4, -16, -19)\n(0, 4, -20, -17)\n(0, 4, -24, -20)\n" + "(0, 0, -1, -3)\n", + "(0, 0, -2, 0)\n", + "(0, 0, -2, -3)\n", + "(0, 1, -3, -6)\n", + "(0, 2, -4, -9)\n", + "(0, 3, -6, -12)\n", + "(0, 2, -8, -9)\n", + "(0, 3, -10, -13)\n", + "(0, 4, -13, -16)\n", + "(0, 4, -16, -19)\n", + "(0, 4, -20, -17)\n", + "(0, 4, -24, -20)\n" ] } ], @@ -279,11 +321,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Q-Table Structure" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -299,11 +341,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Let's Start Q-Learning!" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -323,8 +365,8 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "0: 108.0, alpha=0.3, epsilon=0.9\n" ] @@ -370,11 +412,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Plotting Training Progress" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -382,25 +424,27 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, + "execution_count": 20, "metadata": {}, - "execution_count": 20 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { - "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxU9b3/8dcnCSTsa8CQgAEJIKIIBGSXTUWiYqu0Lq2o3MvV6nWhVlGrtbdasddq9dqfy9W2tr22WpdKXYu4W0VBRVBAQFACCEF2kCXk+/tjvkkm+yTMZCZn3s/HI4+c853vzPmenMl7vud7zpxjzjlERCS4UuLdABERiS0FvYhIwCnoRUQCTkEvIhJwCnoRkYBLi3cDADp37uxyc3Pj3QwRkSZl0aJFW5xzmXXVS4igz83NZeHChfFuhohIk2JmX0ZST0M3IiIBp6AXEQk4Bb2ISMAp6EVEAk5BLyIScBEFvZmtNbMlZvaxmS30ZR3NbJ6ZrfS/O/hyM7N7zWyVmX1iZoNjuQIiIlK7+vToxzvnjnfO5fv52cB851weMN/PA5wK5PmfmcD90WqsiIjU3+GcRz8VGOenHwVeB67z5X90oesfv2dm7c0syzm38XAa2pjWbd3Lj/+2mG7tMvjpaf3p3DqdbXsO8K/V31BwXBbOOf7+8XpO6NmJj77azsSjuzD5N2/yo3G9eXbxev484wTumb+S/lltOaJdBobxwBureePzIpbccjJmBsCLSzby+ooiphyXxYl9Kn7nYUnhDv7+8Xq6tk1n5tijyso/XredtBRjQHY7nHM8uaiQCf26cOvzy+jYqjnLNu7kX6u/4d5zB5HdvgWri3bz3UHZpKWm8PKnX3NMt7bc/sJybig4mpPueoNHpg+leZrxwdptzHlxOU9dOoIN2/dx+sBuPLbgK254Zglt0tO4cFQu//PqKm46rT+/eO4zlv9iMjf9fSl/W1RIn66tGdazI51apXPP/JX87PT+9OzcivfXbGXJ+h28tXJLg7fFJScexQNvrKZ3l9as2ry7rNwMUs0oLonfZbbbZKSxa19xxPVHHtWJpet3sHNfMcdmt2PJ+h306tyKL7bsAeDu7w/k6scXx6q53HJ6f7buPcgTH6zj6537YraccENzO/DB2m38YHgP1m/7luZpKbz86aZ6vcb5J/TgolG5TLrrzXov/4qJeaSacfcrn9da79YzB/DlN3v437fW8B9je/Hgm19UqfPdwdk8/eH6Gl9jcI/2PHXpSNZs2cOEX78RUftyOrTglVknktEsNaL6DWWRXI/ezNYA2wAHPOice8jMtjvn2ofV2eac62BmzwFznHNv+/L5wHXOuYWVXnMmoR4/PXr0GPLllxGd998ocmc/Xzad06EFb183ge8/+C4L1mzlvesnsm7bXqY98G5ZnYn9ujB/+eay+cqhFO73Fw1lfN8u7Nx3kONu+WdZ+do5BTW2Ifyx0vK1cwp4aelGLvnzh3Wuz7WT+3LxqJ70u+mlOuuWKv0HrUnz1BQOHCqJ+PVEksFvzxvMZY/V/T8Z7ofDj+QXZw5o0PLMbFHYKEuNIu3Rj3LObTCzLsA8M1te27KrKavyaeKcewh4CCA/Pz9h735SuO1bANZvD/0+eKiE3fsr9uLWbdtbYb6mkAfKeoDFhw5/lXd+G1lvcuvuA5TU8wYztYU8oJAXqcaufQfr/ZyiXftj0JKKIhqjd85t8L83A88Aw4BNZpYF4H+XdmkLge5hT88BNkSrwUGVO/t5LvnTong3Q0QCqM6gN7NWZtamdBo4GVgKzAWm+2rTgWf99FzgAn/2zXBgR1Man4+nlz79Ot5NEJEAimTopivwjD+AmAY85px7ycw+AJ4wsxnAV8A0X/8FYAqwCtgLXBT1VouIBETR7tgP3dQZ9M65L4CB1ZR/A0ysptwBl0WldQG0/+Ah5i7ewKijOjXaMuN4YoqI1OHLb/bWXekwJcRlipPJr15eQdGu/dxzzvGNtkyr7vC4iETdI2+viXcTqqVLIHhffrOHRV/WfqZJNJQeYd/5bf2PzotIYltZyxl38aQevXfif78OVD2fXUQklrY0whi9evRRYNV+dSBxOJf4bRSR2FHQi4gEnIZuoqAhBzsb80SY372zhjYZ2tQiyUo9+giMv/P1CvNNcRDknvkr490EEYkTBX0E1virC4qINEUK+nqq57XBouqv738Vv4WLSJOloI9QInzpaPbTS+LdBBFpghT0IiIBp6AH9h6o+7ru0R6yiecQkIgkFwU9sOCLrXXWKb0BSayHcL49cCi2CxCRpKOgr2TfwbqDNpad8UPq6otIlCnoK9l/sHFukVfbnkFjXPtCRJKHgr6eHv9gXUzv8bh19wHyb30lZq8vIslHQV9P9722it+/szZmr79174EqZbmzn+eQ7h4iIg2koAdcPUfdDxQf/gHTmobiP9uws9ryg4caZ0hJRIJHQd8Aq4sO/5IIroakX7l512G/tohIOAV9gvmwhrtcrdyUmHeuEZHEp6CvpL7DONG2uHBHteWn3/d2I7dERIJCQR8nlggXzxGRpKCgFxEJOAU98bnuTE0HY0VEok1BHwUahhGRRKagr8Sa5I0CRURqpqCvpCFn3SzbWP2XnEREEoGCnviM0Wu4R0Qai4JeRCTgFPTE9vryNS5TZ92ISCNR0MfJLf/4LN5NEJEkEXHQm1mqmX1kZs/5+Z5mtsDMVprZ42bW3Jen+/lV/vHc2DQ9etS7FpEgq0+P/kpgWdj8HcDdzrk8YBsww5fPALY553oDd/t6Ce3xD9bFuwn11uenL/L655vj3QwRaQIiCnozywEKgIf9vAETgCd9lUeBM/30VD+Pf3yiJfgpJis3l18Zsql07g8Ul/DCkq/j3QwRaQIi7dH/BrgWKL37RSdgu3Ou2M8XAtl+OhtYB+Af3+HrV2BmM81soZktLCoqamDzRUSkLnUGvZmdBmx2zi0KL66mqovgsfIC5x5yzuU75/IzMzMjamysxPvSxCIisZQWQZ1RwBlmNgXIANoS6uG3N7M032vPATb4+oVAd6DQzNKAdsDWqLc8SkpKHCVhd+lL7EEmEZH6q7NH75y73jmX45zLBc4BXnXOnQ+8Bpztq00HnvXTc/08/vFXXQKf1nLqPW+xfvu38W6GiEjMHM559NcBs8xsFaEx+Ed8+SNAJ18+C5h9eE2MrRWbdI9WEQm2SIZuyjjnXgde99NfAMOqqbMPmBaFtsVF4u57iIg0jL4ZKyIScAp6EZGAU9CLiARcvcbog+JAcQl9fvoiV0zoHe+miIjEXFL26PcVHwLg9++sjW9DREQaQVIGvYhIMlHQV6KzK0UkaBT0legKCCISNAp6EZGAU9CLiAScgr4SjdGLSNAo6CuZ95nu2iQiwZLUQb9rf3GVsi27D8ShJSIisZPUQS8ikgwU9JX8+p8r4t0EEZGoUtBXUqKjsSISMEkX9J9v2sW0+9+NdzNERBpN0gX9L19YptsHikhSSbqgFxFJNgp6EZGAU9CLiAScgl5EJOAU9CIiAaegFxEJuKQLet1YRESSTdIFvYhIslHQi4gEnIJeRCTgFPQiIgGnoBcRCbikC3oznXcjIsmlzqA3swwze9/MFpvZp2b2c1/e08wWmNlKM3vczJr78nQ/v8o/nhvbVRARkdpE0qPfD0xwzg0Ejgcmm9lw4A7gbudcHrANmOHrzwC2Oed6A3f7eglD/XkRSTZ1Br0L2e1nm/kfB0wAnvTljwJn+umpfh7/+ETTeImISNxENEZvZqlm9jGwGZgHrAa2O+eKfZVCINtPZwPrAPzjO4BO0Wy0iIhELqKgd84dcs4dD+QAw4Cjq6vmf1fXe69yJ1Yzm2lmC81sYVFRUaTtFRGReqrXWTfOue3A68BwoL2ZpfmHcoANfroQ6A7gH28HbK3mtR5yzuU75/IzMzMb1voG0CCSiCSbSM66yTSz9n66BTAJWAa8Bpztq00HnvXTc/08/vFXnXNVevQiItI40uquQhbwqJmlEvpgeMI595yZfQb81cxuBT4CHvH1HwH+ZGarCPXkz4lBu0VEJEJ1Br1z7hNgUDXlXxAar69cvg+YFpXWiYjIYUuKb8YeKnHcMvdTNmz/Nt5NERFpdJEM3TR576/Zyh/+tZbPN+2iZfPUeDdHRKRRJUWP3vmzO0t0TFhEklBSBH1FOr9SRJJLEga9iEhyUdCLiARcUgW9huhFJBklRdBb2Li8LoEgIskm0KdXOudYXbQn3s0QEYmrQPfoH3l7DZPueoPFhdvLyg6VaPxGRJJLoIP+o3WhgF+3dW9Z2avLN8erOSIicRHooBcRkSQLeg3aiEgySoqg15k2IpLMgh306sKLiAQ86D3T9W1EJIkF9jz63NnPl00/vnBdHFsiIhJfSdGjP1BcEu8miIjETVIEfRmN2YtIEgpU0O/eX8zU377D55t2xbspIiIJI1BB/69VW1i8bju/emlFvJsiIpIwAhX0dXl/7dZ4N0FEpNElVdCLiCSjQAW9jrWKiFQVqKAvpUseiIiUC2TQi4hIuUAFve4JKyJSVaCCvpRGbkREygUy6EVEpFzAgl5jNyIilQUs6EN01o2ISLlABr2IiJSrM+jNrLuZvWZmy8zsUzO70pd3NLN5ZrbS/+7gy83M7jWzVWb2iZkNjvVKlNJZNyIiVUXSoy8GfuycOxoYDlxmZv2B2cB851weMN/PA5wK5PmfmcD9UW91HXRHKRGRcnUGvXNuo3PuQz+9C1gGZANTgUd9tUeBM/30VOCPLuQ9oL2ZZUW95dXYrxuMiIhUUa8xejPLBQYBC4CuzrmNEPowALr4atlA+L37Cn1Z5deaaWYLzWxhUVFR/Vtejase/zgqryMiEiQRB72ZtQaeAq5yzu2srWo1ZVVGz51zDznn8p1z+ZmZmZE2IyI660ZEpFxEQW9mzQiF/P855572xZtKh2T8782+vBDoHvb0HGBDdJorIiL1FclZNwY8Aixzzt0V9tBcYLqfng48G1Z+gT/7Zjiwo3SIR0REGl9aBHVGAT8ElphZ6SD4DcAc4AkzmwF8BUzzj70ATAFWAXuBi6La4gho6EZEpFydQe+ce5uarxM2sZr6DrjsMNslIiJRom/GiogEXCCDXl+YEhEpF8igFxGRcgp6EZGAC2TQry7aHe8miIgkjEAG/fKvd8W7CSIiCSOQQS8iIuUU9CIiAaegFxEJOAW9iEjAKehFRAJOQS8iEnAKehGRgFPQi4gEnIJeRCTgFPQiIgGnoBcRCTgFvYhIwCnoRUQCTkEvIhJwCnoRkYBT0IuIBFxggr5w2954N0FEJCEFIujfXf0No+94Ld7NEBFJSIEI+uVf74x3E0REElYggt65eLdARCRxBSPo490AEZEEFoigFxGRmgUi6J3GbkREahSIoBcRkZo1+aDfd/AQtz6/LN7NEBFJWHUGvZn9zsw2m9nSsLKOZjbPzFb63x18uZnZvWa2ysw+MbPBsWw8wINvfBHrRYiINGmR9Oj/AEyuVDYbmO+cywPm+3mAU4E8/zMTuD86zazZ3oPFsV6EiEiTVmfQO+feBLZWKp4KPOqnHwXODCv/owt5D2hvZlnRamz1DYzpq4uINHkNHaPv6pzbCOB/d/Hl2cC6sHqFvqwKM5tpZgvNbGFRUVEDmwH/WLyhwc8VEUkG0T4Ya9WUVdvnds495JzLd87lZ2ZmNniBG3bsa/BzRUSSQUODflPpkIz/vdmXFwLdw+rlAOpyi4jEUUODfi4w3U9PB54NK7/An30zHNhROsQjIiLxkVZXBTP7CzAO6GxmhcDPgDnAE2Y2A/gKmOarvwBMAVYBe4GLYtBmERGphzqD3jl3bg0PTaymrgMuO9xGiYhI9DT5b8aKiEjtFPQiIgHXpIP+/TWVv8clIiKVNemg/8HDC+LdBBGRhNekg/7AoZJ4N0FEJOE16aAXEZG6KehFRAJOQS8iEnAKehGRgFPQi4gEnIJeRCTgFPQiInHUPC32MaygFxGJo7OH5MR8GQp6EZE4Om9Yj5gvQ0EvIhJHA7LbxXwZCnoRkTjp3aV1oyxHQS8iEidj8zIbZTkKehGROLnmlD6NshwFvYhInLRsXufdXKNCQS8iEnAKeklIfbo2zkEqaTzpjfDFIKme/vKSkJyLdwsk2sbkdY53E5KWgl6kEfzyO8dGXPfYRjivuql69OJhUX29Fs1So/p63Tu2iOrrRYuCXqSBxveNzalxd04bGPUAasq+Oyi7bPrEPuV/87F9av/7FxyXVedr5+d2qHd7Tu7ftcJ8r8xWjIvReyFaFPRS5vwTYv9V7Ibo27VNteV/nnFClbJOrZrHtC3nDO1eNn36wG4AXDDiSNbOKaj1ec1SrV7LuXh0br3bVpe1cwq45uTGOZ0vmobkdqBV86offJUDd3CP9hXmczrU3btOT0vh0nFHlQ0rRXKBsXF9u1SYP2twDtntQ8tqlpqYkZqYrZKo6pXZKqJ6t9VjeKHyP1ldLh/fO+K6o3tXHMt9+eqxVercd94gRsdhzLe095bZJp0zBnbjigm9+ckpfWt9zohenfhOWK80El3bZgBUG3CljvB1EtWpA4447Nd49rJRnDesBwtunMTim08GKgb43y4Zwc2n9WfBDRN57N+H07LS36tTq+ZMOrrm9+pPTunHdZNDPwBnDc7m/RsncvGonmV1hlbq9We2Secfl48um+/SJp3Zp/bjigm9Oe3YmvcirpjQm/wj678HEQ0K+iZkUKUeS6T+3/mDK7xxo2FafndunHI0AMNyO9ZZ/5pKYTiqd6da6885K/Sh819Tj6n28dOO6xZJMyOWF/ZV9PvOG8S8aj5cSv3homF8cOMk0lJTmHVyX9pkNAPgwpG5NK+mR/eXmcNJS03hhin9uHBkbll5Zpt0js5qW+0y+vi9mP+aOqDC3kL3ji147ZpxADzxHyPKyksD5KcFR5eVfS+/6lURv5ffvcK6Ho7OrdOrLX/1xyfy4pVjKqxruJqWX10IDuzeHjOjdXoa7VqG/s5XTepT9jpDczty8eiedG2bQUazVF798ThOCuuELLrpJB6enl82f+e0gfz7mPL/hTYZofPYB2S345Hp+fzs9GPo0iajQs/+4QuGcsvp/cvmT+rflWNz2vHFL6fwwA+GcPaQHNpkNGPWyX0Z2L3m/9ExfTI55ZjyD7+nLh1RY91oU9AniLp2Gbu0SeepS0Y26LWz2rXg5tP7c1xO+UG+W88cUOtzurWrvbc4rm8mk32P7ZJxvSJqx2XjjyqbPmdo7cNEQ47syNo5BVwwIheAD26cVGub75w2kGd+NLLsHzcSFjaaMm/WiRSE9cbyahguqs0tZxzD57edWuPjM8cexS1nlH9wDc3twItXjikbAgo3vFcn3r5uPGf5S9iWhvbLV42lZ+dWrJ1TQI9OLcvq//b8wVxzch9mjC4Psdu+cyzvXT+xwut2aZvBvFkncvNp/XllVs0fZvURvmdxZKeW9MpsXeMHWG2evDSy9/dZg7N569rxnNCramfhiHYZDO5R9QOjTXoak47uwtlDcrixoD9PXjKCn5zSl27ty/cOJh7dlQx/bCR8CLBdy2ZcOKon78yewJrbp5SVp6QYkwccgYW9kSaG7T3MOqkPr10zjldmjeXqSX3IP7JD2V7oHy4aypAj6+4gRYuCPgZKd+XrMx561/cG1vr4+zdOIiXFuOec4+vVlrVzCmjXItQTmnv5aOZ8N9RT7ndE7UFWenbDhSNzeSSsRwSw5vYpNEtNoXvHlqydU8CEflV3jR/4wZAqZT85pR9r5xSwdk5BhXBb/ovJQGg4qH9WW2af2q/KczPbpJeFeAffswt39pAcBvXoUHYlwNJeY/hxh/Drfg/s3p41txfwyqyxvHjlmBr+CiGDe7RniO9tRnMM9r/PDm3z/zl3EGvnFPC3S0YwMKcduZ1DAZ7ToTzIf3X2QNbOKajxm5Rd22Zw+YQ8zKys09AsNYUj2mUw7+qxvHRVxXW8eHRPenWuX8++8tlAE/t1oW/XNtz2ndAH8IhenXiyls5Ih5ah8ByTl1n2Plg7p4B7zjm+wvBKm/TaP6zNjO4dW9b4+FmDs8nr0pofDj+yrGzJz0/h4elDy+bzcztyWS3DiWP6hAK5Z+fyYc/s9i0qhHpNXrpqDPOuHssVE/Po2bkVvbu04cpJoW1zdFZb1s4pqDLOH2uN8/3bAMjr0pqnfjSS4275Z511Z4zuya59xfzbmF7c+c/PAUhLMYpLKp4cfnL/rvTLasuQIzsw6qjqhzLeu34i7cOC7YyB3fh80y4y0lJplpbCWYNzuP2FZTz90XpG9e7ElRP70KVNOu+s3sJx2VV3I78/tDsjj+pMj04tueOsY8nr2oY9+4tZun4nEOoZp1ioR/v2dePJateC1JSKb+7q3uxzLx/FkvU7uPGZpQBMHnAE/bPa8tnGndUeNAX4xZkDGNS9PRnNUnn3+gl0apVe655NwbFZLP96F5ecWL5n8OAPh1QYLik9KHbd5H4s/HIbV07MY8/+Yv7+8QbunDaQJxcVAnD/+YMB6N2l5g+8966fSIdWzUhPS2XvgWLunb+K8yI4YD0mrzOL123nzWvHY1T9Ww3IbsvufcW0qhRoQ3M78mzY2G8k/jRjGDu/La5Q9tx/juatlVvK5mvaOyndjOP6ZnJS/65l2y6rXQYbd+yjR8eWfLV1LwA/P+MYpo/MJXf287RJT2PX/mLyurbmjrOPA+Cta8eT3b4FKWHvlaP8h+2IXp1494tv6N+tLW9PGl/l2MLU47OZenzoGMaHN51Es1TjpLveJDuCg6nVKd1rORyl262+B9EB+h1R/72ZWDOXAN9Myc/PdwsXLqz380bcPp+NO/bV+3nXTu5L6/Q0bn72U1o0S+XpH40kNcW455WVPL9kIytvO5UHXl/Nr+eFQvrm0/pzsd8lds5x07NLuXBkLt978D227jnA9/JzSE1J4cqJeXz5zZ4Ku5TTf/c+Zw7qxstLN/HSp1+z+pdTqgRnuE8Kt3PGfe9w7rDuXDAiN6Jd4H0HD/H6is1MHlD36WSH465/rmDX/mJ+dnr14+YAS9fvoEXzVI7KbM3WPQf4dMMOxjTSFfoADhSXMH/Zpiq71KWeWlTIc59s4PcXVT0fe8XXu7jssQ956tKRZXtBySR39vMAvH/DRFYV7eaYrHZ8+NU29hwoZsqArLIQd87xwpKvmTzgiFrfy6VKShwvLo28fiLYX3yIs+7/Fz8t6M/waoaIEoWZLXLO5ddZLxZBb2aTgXuAVOBh59yc2uo3NOiLD5XwzEfr2VdcQtuMNIbmdqR5WgqpZlz+lw+57cxjSU0x9heXRHTd5/3Fh9iy+wDZ7VtQUuJYt20vR3aK7IyVSF77m90HKowJ1uTLb/bQo2PLiHYTRaJlz/5i9uwvpkuCn80j5eIW9GaWCnwOnAQUAh8A5zrnPqvpOQ0NehGRZBZp0MfiYOwwYJVz7gvn3AHgr8DUGCxHREQiEIugzwbWhc0X+rIKzGymmS00s4VFRUUxaIaIiEBsgr66geUq40POuYecc/nOufzMzMS+ToSISFMWi6AvBLqHzecAG2KwHBERiUAsgv4DIM/MeppZc+AcYG4MliMiIhGI+hemnHPFZnY58DKh0yt/55z7NNrLERGRyMTkm7HOuReAF2Lx2iIiUj+61o2ISMAlxCUQzKwI+LKBT+8MbKmzVrBonZOD1jk5HM46H+mcq/O0xYQI+sNhZgsj+WZYkGidk4PWOTk0xjpr6EZEJOAU9CIiAReEoH8o3g2IA61zctA6J4eYr3OTH6MXEZHaBaFHLyIitVDQi4gEXJMOejObbGYrzGyVmc2Od3vqw8y6m9lrZrbMzD41syt9eUczm2dmK/3vDr7czOxev66fmNngsNea7uuvNLPpYeVDzGyJf869liC3rDKzVDP7yMye8/M9zWyBb//j/hpJmFm6n1/lH88Ne43rffkKMzslrDzh3hNm1t7MnjSz5X57jwj6djazq/37eqmZ/cXMMoK2nc3sd2a22cyWhpXFfLvWtIxaOeea5A+h6+isBnoBzYHFQP94t6se7c8CBvvpNoTuytUf+BUw25fPBu7w01OAFwldBno4sMCXdwS+8L87+OkO/rH3gRH+OS8Cp8Z7vX27ZgGPAc/5+SeAc/z0A8ClfvpHwAN++hzgcT/d32/vdKCnfx+kJup7AngU+Dc/3RxoH+TtTOj+E2uAFmHb98KgbWdgLDAYWBpWFvPtWtMyam1rvP8JDuOPPAJ4OWz+euD6eLfrMNbnWUK3X1wBZPmyLGCFn36Q0C0ZS+uv8I+fCzwYVv6gL8sCloeVV6gXx/XMAeYDE4Dn/Jt4C5BWebsSujDeCD+d5utZ5W1dWi8R3xNAWx96Vqk8sNuZ8psPdfTb7TnglCBuZyCXikEf8+1a0zJq+2nKQzcR3cmqKfC7qoOABUBX59xGAP+7i69W0/rWVl5YTXm8/Qa4Fijx852A7c65Yj8f3s6ydfOP7/D16/u3iKdeQBHwez9c9bCZtSLA29k5tx64E/gK2Ehouy0i2Nu5VGNs15qWUaOmHPQR3ckq0ZlZa+Ap4Crn3M7aqlZT5hpQHjdmdhqw2Tm3KLy4mqqujseazDoT6qEOBu53zg0C9hDa3a5Jk19nP2Y8ldBwSzegFXBqNVWDtJ3rEtd1bMpB3+TvZGVmzQiF/P855572xZvMLMs/ngVs9uU1rW9t5TnVlMfTKOAMM1tL6KbxEwj18NubWekls8PbWbZu/vF2wFbq/7eIp0Kg0Dm3wM8/SSj4g7ydJwFrnHNFzrmDwNPASIK9nUs1xnataRk1aspB36TvZOWPoD8CLHPO3RX20Fyg9Mj7dEJj96XlF/ij98OBHX637WXgZDPr4HtSJxMav9wI7DKz4X5ZF4S9Vlw45653zuU453IJba9XnXPnA68BZ/tqlde59G9xtq/vfPk5/myNnkAeoQNXCfeecM59Dawzs76+aCLwGQHezoSGbIabWUvfptJ1Dux2DtMY27WmZdQsngdtonAgZAqhs1VWAzfGuz31bPtoQrtinwAf+58phMYm5wMr/e+Ovr4Bv9wf3t8AAACjSURBVPXrugTID3uti4FV/ueisPJ8YKl/zn1UOiAY5/UfR/lZN70I/QOvAv4GpPvyDD+/yj/eK+z5N/r1WkHYWSaJ+J4AjgcW+m39d0JnVwR6OwM/B5b7dv2J0JkzgdrOwF8IHYM4SKgHPqMxtmtNy6jtR5dAEBEJuKY8dCMiIhFQ0IuIBJyCXkQk4BT0IiIBp6AXEQk4Bb2ISMAp6EVEAu7/A6SijxMjKxrLAAAAAElFTkSuQmCC", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } ], "source": [ @@ -408,11 +452,11 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "From this graph, it is not possible to tell anything, because due to the nature of stochastic training process the length of training sessions varies greatly. To make more sense of this graph, we can calculate **running average** over series of experiments, let's say 100. This can be done conveniently using `np.convolve`:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -420,25 +464,27 @@ "metadata": {}, "outputs": [ { - "output_type": "execute_result", "data": { "text/plain": [ "[]" ] }, + "execution_count": 22, "metadata": {}, - "execution_count": 22 + "output_type": "execute_result" }, { - "output_type": "display_data", "data": { - "text/plain": "
", + "image/png": "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", "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "text/plain": [ + "
" + ] }, "metadata": { "needs_background": "light" - } + }, + "output_type": "display_data" } ], "source": [ @@ -449,13 +495,13 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "## Varying Hyperparameters and Seeing the Result in Action\n", "\n", "Now it would be interesting to actually see how the trained model behaves. Let's run the simulation, and we will be following the same action selection strategy as during training: sampling according to the probability distribution in Q-Table: " - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -475,14 +521,14 @@ ] }, { + "cell_type": "markdown", + "metadata": {}, "source": [ "\n", "## Saving result to an animated GIF\n", "\n", "If you want to impress your friends, you may want to send them the animated GIF picture of the balancing pole. To do this, we can invoke `env.render` to produce an image frame, and then save those to animated GIF using PIL library:" - ], - "cell_type": "markdown", - "metadata": {} + ] }, { "cell_type": "code", @@ -490,8 +536,8 @@ "metadata": {}, "outputs": [ { - "output_type": "stream", "name": "stdout", + "output_type": "stream", "text": [ "360\n" ] @@ -516,5 +562,32 @@ "print(i)" ] } - ] -} \ No newline at end of file + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "language": "python", + "name": "python3" + }, + "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.10.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} From b298d76961e8467c99133c284b6b5447c39134b9 Mon Sep 17 00:00:00 2001 From: anxieuse Date: Sun, 24 Jul 2022 17:07:14 +0300 Subject: [PATCH 05/11] Add train_on_batch --- .../22-DeepRL/CartPole-RL-Pytorch.ipynb | 671 ++++++++++++++++++ .../6-Other/22-DeepRL/CartPole-RL-TF.ipynb | 133 ++-- 2 files changed, 744 insertions(+), 60 deletions(-) diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb index e69de29b..c6e59995 100644 --- a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb +++ b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb @@ -0,0 +1,671 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training RL to do Cartpole Balancing\n", + "\n", + "This notebooks is part of [AI for Beginners Curriculum](http://aka.ms/ai-beginners). It has been inspired by [this blog post](https://medium.com/swlh/policy-gradient-reinforcement-learning-with-keras-57ca6ed32555), [official TensorFlow documentation](https://www.tensorflow.org/tutorials/reinforcement_learning/actor_critic) and [this Keras RL example](https://keras.io/examples/rl/actor_critic_cartpole/).\n", + "\n", + "In this example, we will use RL to train a model to balance a pole on a cart that can move left and right on horizontal scale. We will use [OpenAI Gym](https://www.gymlibrary.ml/) environment to simulate the pole.\n", + "\n", + "> **Note**: You can run this lesson's code locally (eg. from Visual Studio Code), in which case the simulation will open in a new window. When running the code online, you may need to make some tweaks to the code, as described [here](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7).\n", + "\n", + "We will start by making sure Gym is installed:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Defaulting to user installation because normal site-packages is not writeable\n", + "Requirement already satisfied: gym in /home/leo/.local/lib/python3.10/site-packages (0.25.0)\n", + "Collecting pygame\n", + " Downloading pygame-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB)\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.9/21.9 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", + "\u001b[?25hRequirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n", + "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", + "Requirement already satisfied: gym-notices>=0.0.4 in /home/leo/.local/lib/python3.10/site-packages (from gym) (0.0.7)\n", + "Installing collected packages: pygame\n", + "Successfully installed pygame-2.1.2\n" + ] + } + ], + "source": [ + "import sys\n", + "!{sys.executable} -m pip install gym pygame" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's create the CartPole environment and see how to operate on it. An environment has the following properties:\n", + "\n", + "* **Action space** is the set of possible actions that we can perform at each step of the simulation\n", + "* **Observation space** is the space of observations that we can make" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Action space: Discrete(2)\n", + "Observation space: Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32)\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n", + "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n" + ] + } + ], + "source": [ + "import gym\n", + "import pygame\n", + "import tqdm\n", + "\n", + "env = gym.make(\"CartPole-v1\")\n", + "\n", + "print(f\"Action space: {env.action_space}\")\n", + "print(f\"Observation space: {env.observation_space}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's see how the simulation works. The following loop runs the simulation, until `env.step` does not return the termination flag `done`. We will randomly chose actions using `env.action_space.sample()`, which means the experiment will probably fail very fast (CartPole environment terminates when the speed of CartPole, its position or angle are outside certain limits).\n", + "\n", + "> Simulation will open in the new window. You can run the code several times and see how it behaves." + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", + "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", + "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", + " deprecation(\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[-0.01024284 0.23410203 -0.02896851 -0.2558368 ] -> 1.0\n", + "[-0.0055608 0.42962533 -0.03408524 -0.5575143 ] -> 1.0\n", + "[ 0.00303171 0.6252088 -0.04523553 -0.86073816] -> 1.0\n", + "[ 0.01553589 0.82091665 -0.06245029 -1.1672944 ] -> 1.0\n", + "[ 0.03195422 1.0167931 -0.08579618 -1.4788847 ] -> 1.0\n", + "[ 0.05229008 1.2128513 -0.11537387 -1.7970835 ] -> 1.0\n", + "[ 0.07654711 1.0191944 -0.15131554 -1.542374 ] -> 1.0\n", + "[ 0.096931 0.82618064 -0.18216303 -1.3004787 ] -> 1.0\n", + "[ 0.11345461 0.63377684 -0.2081726 -1.0699085 ] -> 1.0\n", + "[ 0.12613015 0.83095175 -0.22957078 -1.420047 ] -> 1.0\n", + "Total reward: 10.0\n" + ] + } + ], + "source": [ + "env.reset()\n", + "\n", + "done = False\n", + "total_reward = 0\n", + "while not done:\n", + " env.render()\n", + " obs, rew, done, info = env.step(env.action_space.sample())\n", + " total_reward += rew\n", + " print(f\"{obs} -> {rew}\")\n", + "print(f\"Total reward: {total_reward}\")\n", + "\n", + "env.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Youn can notice that observations contain 4 numbers. They are:\n", + "- Position of cart\n", + "- Velocity of cart\n", + "- Angle of pole\n", + "- Rotation rate of pole\n", + "\n", + "`rew` is the reward we receive at each step. You can see that in CartPole environment you are rewarded 1 point for each simulation step, and the goal is to maximize total reward, i.e. the time CartPole is able to balance without falling.\n", + "\n", + "During reinforcement learning, our goal is to train a **policy** $\\pi$, that for each state $s$ will tell us which action $a$ to take, so essentially $a = \\pi(s)$.\n", + "\n", + "If you want probabilistic solution, you can think of policy as returning a set of probabilities for each action, i.e. $\\pi(a|s)$ would mean a probability that we should take action $a$ at state $s$.\n", + "\n", + "## Policy Gradient Method\n", + "\n", + "In simplest RL algorithm, called **Policy Gradient**, we will train a neural network to predict the next action." + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import tensorflow as tf\n", + "from tensorflow import keras\n", + "import matplotlib.pyplot as plt\n", + "import torch\n", + "\n", + "num_inputs = 4\n", + "num_actions = 2\n", + "\n", + "# model = torch.nn.Sequential(\n", + "# torch.nn.Linear(num_inputs, 2),\n", + "# torch.nn.ReLU(),\n", + "# torch.nn.Linear(2, num_actions)\n", + "# )\n", + "\n", + "model = torch.nn.Sequential(\n", + " torch.nn.Linear(num_inputs, 128, bias=False, dtype=torch.float32),\n", + " torch.nn.ReLU(),\n", + " torch.nn.Linear(128, num_actions, bias = False, dtype=torch.float32),\n", + " torch.nn.Softmax(dim=1)\n", + ")\n", + "\n", + "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", + "# optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n", + "# optimizer = keras.optimizers.Adam(learning_rate=0.01)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We will train the network by running many experiments, and updating our network after each run. Let's define a function that will run the experiment and return the results (so-called **trace**) - all states, actions (and their recommended probabilities), and rewards:" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [], + "source": [ + "def run_episode(max_steps_per_episode = 10000,render=False): \n", + " states, actions, probs, rewards = [],[],[],[]\n", + " state = env.reset()\n", + " # print(state.dtype)\n", + " for _ in range(max_steps_per_episode):\n", + " if render:\n", + " env.render()\n", + " action_probs = model(torch.from_numpy(np.expand_dims(state,0)))[0]\n", + " action = np.random.choice(num_actions, p=np.squeeze(action_probs.detach().numpy()))\n", + " nstate, reward, done, info = env.step(action)\n", + " if done:\n", + " break\n", + " states.append(state)\n", + " actions.append(action)\n", + " probs.append(action_probs.detach().numpy())\n", + " rewards.append(reward)\n", + " state = nstate\n", + " return np.vstack(states), np.vstack(actions), np.vstack(probs), np.vstack(rewards)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "You can run one episode with untrained network and observe that total reward (AKA length of episode) is very low:" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total reward: 24.0\n" + ] + } + ], + "source": [ + "s,a,p,r = run_episode()\n", + "print(f\"Total reward: {np.sum(r)}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "One of the tricky aspects of policy gradient algorithm is to use **discounted rewards**. The idea is that we compute the vector of total rewards at each step of the game, and during this process we discount the early rewards using some coefficient $gamma$. We also normalize the resulting vector, because we will use it as weight to affect our training: " + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [], + "source": [ + "eps = 0.0001\n", + "\n", + "def discounted_rewards(rewards,gamma=0.99,normalize=True):\n", + " ret = []\n", + " s = 0\n", + " for r in rewards[::-1]:\n", + " s = r + gamma * s\n", + " ret.insert(0, s)\n", + " if normalize:\n", + " ret = (ret-np.mean(ret))/(np.std(ret)+eps)\n", + " return ret" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's do the actual training! We will run 300 episodes, and at each episode we will do the following:\n", + "\n", + "1. Run the experiment and collect the trace\n", + "1. Calculate the difference (`gradients`) between the actions taken, and by predicted probabilities. The less the difference is, the more we are sure that we have taken the right action.\n", + "1. Calculate discounted rewards and multiply gradients by discounted rewards - that will make sure that steps with higher rewards will make more effect on the final result than lower-rewarded ones\n", + "1. Expected target actions for our neural network would be partly taken from the predicted probabilities during the run, and partly from calculated gradients. We will use `alpha` parameter to determine to which extent gradients and rewards are taken into account - this is called *learning rate* of reinforcement algorithm.\n", + "1. Finally, we train our network on states and expected actions, and repeat the process " + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "def train_on_batch4(states,actions,probs,rewards):\n", + " rewards = discounted_rewards(rewards)\n", + " probs = probs[np.arange(len(probs)),actions]\n", + " # probs = probs.reshape(-1,1)\n", + " rewards = rewards.reshape(-1,1)\n", + " probs = torch.from_numpy(probs)\n", + " rewards = torch.from_numpy(rewards)\n", + " loss = -torch.mean(torch.log(probs) * rewards)\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + " return loss.item()\n", + "\n", + "def train_on_batch2(states,target):\n", + " states = torch.from_numpy(states)\n", + " # target = target.reshape(-1,1)\n", + " target = torch.from_numpy(target)\n", + " y = model(states)\n", + " print(y)\n", + " loss = -torch.mean(torch.log(y) * target)\n", + " optimizer.zero_grad()\n", + " loss.backward()\n", + " optimizer.step()\n", + " return loss.item()\n", + "\n", + "def train_on_batch(x, y):\n", + " x = torch.from_numpy(x)\n", + " y = torch.from_numpy(y)\n", + " optimizer.zero_grad()\n", + " predictions = model(x)\n", + " loss = torch.nn.CrossEntropyLoss()(predictions, y) # (y, predictions)\n", + " loss.backward()\n", + " optimizer.step()\n", + " return loss.item()\n", + " w.data.sub_(learning_rate * w.grad)\n", + " b.data.sub_(learning_rate * b.grad)\n", + " w.grad.zero_()\n", + " b.grad.zero_()\n", + " return loss" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0 -> 25.0\n", + "100 -> 21.0\n", + "200 -> 7.0\n" + ] + }, + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 88, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "alpha = 1e-4\n", + "\n", + "history = []\n", + "for epoch in range(300):\n", + " states, actions, probs, rewards = run_episode()\n", + " one_hot_actions = np.eye(2)[actions.T][0]\n", + " gradients = one_hot_actions-probs\n", + " dr = discounted_rewards(rewards)\n", + " gradients *= dr\n", + " target = alpha*np.vstack([gradients])+probs\n", + " # loss = train_on_batch4(states,actions,probs,rewards)\n", + " train_on_batch(states,target)\n", + " history.append(np.sum(rewards))\n", + " if epoch%100==0:\n", + " print(f\"{epoch} -> {np.sum(rewards)}\")\n", + "\n", + "plt.plot(history)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's run the episode with rendering to see the result:" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", + "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", + "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", + " deprecation(\n" + ] + }, + { + "ename": "error", + "evalue": "display Surface quit", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31merror\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/tmp/ipykernel_41886/1459719159.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_episode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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/tmp/ipykernel_41886/4189192208.py\u001b[0m in \u001b[0;36mrun_episode\u001b[0;34m(max_steps_per_episode, render)\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_steps_per_episode\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 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 8\u001b[0m \u001b[0maction_probs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0maction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_actions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maction_probs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdetach\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/order_enforcing.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\"set `disable_render_order_enforcing=True` on the OrderEnforcer wrapper.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m )\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/env_checker.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0menv_render_passive_checker\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_renders\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 216\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmode\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 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"human\"\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~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36m_render\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 298\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscreen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mblit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\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 299\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"human\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 300\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpump\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;31merror\u001b[0m: display Surface quit" + ] + } + ], + "source": [ + "_ = run_episode(render=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hopefully, you can see that pole can now balance pretty well!\n", + "\n", + "## Actor-Critic Model\n", + "\n", + "Actor-Critic model is the further development of policy gradients, in which we build a neural network to learn both the policy and estimated rewards. The network will have two outputs (or you can view it as two separate networks):\n", + "* **Actor** will recommend the action to take by giving us the state probability distribution, as in policy gradient model\n", + "* **Critic** would estimate what the reward would be from those actions. It returns total estimated rewards in the future at the given state.\n", + "\n", + "Let's define such a model: " + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": {}, + "outputs": [], + "source": [ + "num_inputs = 4\n", + "num_actions = 2\n", + "num_hidden = 128\n", + "\n", + "inputs = keras.layers.Input(shape=(num_inputs,))\n", + "common = keras.layers.Dense(num_hidden, activation=\"relu\")(inputs)\n", + "action = keras.layers.Dense(num_actions, activation=\"softmax\")(common)\n", + "critic = keras.layers.Dense(1)(common)\n", + "\n", + "model = keras.Model(inputs=inputs, outputs=[action, critic])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We would need to slightly modify our `run_episode` function to return also critic results:" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [], + "source": [ + "def run_episode(max_steps_per_episode = 10000,render=False): \n", + " states, actions, probs, rewards, critic = [],[],[],[],[]\n", + " state = env.reset()\n", + " for _ in range(max_steps_per_episode):\n", + " if render:\n", + " env.render()\n", + " action_probs, est_rew = model(np.expand_dims(state,0))\n", + " action = np.random.choice(num_actions, p=np.squeeze(action_probs[0]))\n", + " nstate, reward, done, info = env.step(action)\n", + " if done:\n", + " break\n", + " states.append(state)\n", + " actions.append(action)\n", + " probs.append(tf.math.log(action_probs[0,action]))\n", + " rewards.append(reward)\n", + " critic.append(est_rew[0,0])\n", + " state = nstate\n", + " return states, actions, probs, rewards, critic" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now we will run the main training loop. We will use manual network training process by computing proper loss functions and updating network parameters:" + ] + }, + { + "cell_type": "code", + "execution_count": 105, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "running reward: 5.82 at episode 10\n", + "running reward: 9.43 at episode 20\n", + "running reward: 10.30 at episode 30\n", + "running reward: 10.28 at episode 40\n", + "running reward: 11.00 at episode 50\n", + "running reward: 13.01 at episode 60\n", + "running reward: 21.78 at episode 70\n", + "running reward: 40.54 at episode 80\n", + "running reward: 73.70 at episode 90\n", + "running reward: 100.19 at episode 100\n", + "running reward: 159.20 at episode 110\n", + "Solved at episode 114!\n" + ] + } + ], + "source": [ + "optimizer = keras.optimizers.Adam(learning_rate=0.01)\n", + "huber_loss = keras.losses.Huber()\n", + "episode_count = 0\n", + "running_reward = 0\n", + "\n", + "while True: # Run until solved\n", + " state = env.reset()\n", + " episode_reward = 0\n", + " with tf.GradientTape() as tape:\n", + " _,_,action_probs, rewards, critic_values = run_episode()\n", + " episode_reward = np.sum(rewards)\n", + " \n", + " # Update running reward to check condition for solving\n", + " running_reward = 0.05 * episode_reward + (1 - 0.05) * running_reward\n", + "\n", + " # Calculate discounted rewards that will be labels for our critic\n", + " dr = discounted_rewards(rewards)\n", + "\n", + " # Calculating loss values to update our network\n", + " actor_losses = []\n", + " critic_losses = []\n", + " for log_prob, value, rew in zip(action_probs, critic_values, dr):\n", + " # When we took the action with probability `log_prob`, we received discounted reward of `rew`,\n", + " # while critic predicted it to be `value` \n", + " # First we calculate actor loss, to make actor predict actions that lead to higher rewards\n", + " diff = rew - value\n", + " actor_losses.append(-log_prob * diff)\n", + "\n", + " # The critic loss is to minimize the difference between predicted reward `value` and actual\n", + " # discounted reward `rew`\n", + " critic_losses.append(\n", + " huber_loss(tf.expand_dims(value, 0), tf.expand_dims(rew, 0))\n", + " )\n", + "\n", + " # Backpropagation\n", + " loss_value = sum(actor_losses) + sum(critic_losses)\n", + " grads = tape.gradient(loss_value, model.trainable_variables)\n", + " optimizer.apply_gradients(zip(grads, model.trainable_variables))\n", + "\n", + " # Log details\n", + " episode_count += 1\n", + " if episode_count % 10 == 0:\n", + " template = \"running reward: {:.2f} at episode {}\"\n", + " print(template.format(running_reward, episode_count))\n", + "\n", + " if running_reward > 195: # Condition to consider the task solved\n", + " print(\"Solved at episode {}!\".format(episode_count))\n", + " break\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's run the episode and see how good our model is:" + ] + }, + { + "cell_type": "code", + "execution_count": 99, + "metadata": {}, + "outputs": [], + "source": [ + "_ = run_episode(render=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, let's close the environment." + ] + }, + { + "cell_type": "code", + "execution_count": 106, + "metadata": {}, + "outputs": [], + "source": [ + "env.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Takeaway\n", + "\n", + "We have seen two RL algorithms in this demo: simple policy gradient, and more sophisticated actor-critic. You can see that those algorithms operate with abstract notions of state, action and reward - thus they can be applied to very different environments.\n", + "\n", + "Reinforcement learning allows us to learn the best strategy to solve the problem just by looking at the final reward. The fact that we do not need labelled datasets allows us to repeat simulations many times to optimize our models. However, there are still many challenges in RL, which you may learn if you decide to focus more on this interesting area of AI. " + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3.10.4 64-bit", + "language": "python", + "name": "python3" + }, + "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.10.4" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "916dbcbb3f70747c44a77c7bcd40155683ae19c65e1c03b4aa3499c5328201f1" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb index 71f925f1..6315a1ce 100644 --- a/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb +++ b/lessons/6-Other/22-DeepRL/CartPole-RL-TF.ipynb @@ -26,14 +26,10 @@ "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Requirement already satisfied: gym in /home/leo/.local/lib/python3.10/site-packages (0.25.0)\n", - "Collecting pygame\n", - " Downloading pygame-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.9/21.9 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n", - "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", + "Requirement already satisfied: pygame in /home/leo/.local/lib/python3.10/site-packages (2.1.2)\n", "Requirement already satisfied: gym-notices>=0.0.4 in /home/leo/.local/lib/python3.10/site-packages (from gym) (0.0.7)\n", - "Installing collected packages: pygame\n", - "Successfully installed pygame-2.1.2\n" + "Requirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n", + "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n" ] } ], @@ -115,27 +111,41 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.01453476 -0.23855041 -0.04445581 0.29491952] -> 1.0\n", - "[-0.01930577 -0.4330113 -0.03855742 0.57325697] -> 1.0\n", - "[-0.027966 -0.62757206 -0.02709228 0.8535481 ] -> 1.0\n", - "[-0.04051744 -0.43209147 -0.01002132 0.55247074] -> 1.0\n", - "[-0.04915927 -0.23683023 0.00102809 0.25664735] -> 1.0\n", - "[-0.05389587 -0.04172298 0.00616104 -0.03571114] -> 1.0\n", - "[-0.05473033 0.15331008 0.00544682 -0.32644385] -> 1.0\n", - "[-0.05166413 0.34835407 -0.00108206 -0.6174041 ] -> 1.0\n", - "[-0.04469705 0.15324724 -0.01343014 -0.3250622 ] -> 1.0\n", - "[-0.0416321 0.34855783 -0.01993139 -0.62195 ] -> 1.0\n", - "[-0.03466095 0.54395235 -0.03237038 -0.92084295] -> 1.0\n", - "[-0.0237819 0.7394964 -0.05078724 -1.2235206 ] -> 1.0\n", - "[-0.00899197 0.5450641 -0.07525766 -0.9471733 ] -> 1.0\n", - "[ 0.00190931 0.7411144 -0.09420113 -1.2625213 ] -> 1.0\n", - "[ 0.0167316 0.54731464 -0.11945155 -1.0007646 ] -> 1.0\n", - "[ 0.02767789 0.74381286 -0.13946684 -1.3284469 ] -> 1.0\n", - "[ 0.04255415 0.55069894 -0.16603577 -1.0824591 ] -> 1.0\n", - "[ 0.05356812 0.35811067 -0.18768495 -0.84614 ] -> 1.0\n", - "[ 0.06073034 0.55522907 -0.20460775 -1.1914812 ] -> 1.0\n", - "[ 0.07183492 0.7523274 -0.22843738 -1.5406975 ] -> 1.0\n", - "Total reward: 20.0\n" + "[ 0.00425272 -0.19994313 0.00917169 0.34113726] -> 1.0\n", + "[ 0.00025386 -0.00495286 0.01599443 0.05136059] -> 1.0\n", + "[ 1.5480528e-04 1.8993615e-01 1.7021643e-02 -2.3623335e-01] -> 1.0\n", + "[ 0.00395353 0.38481084 0.01229698 -0.5234989 ] -> 1.0\n", + "[ 0.01164974 0.18951797 0.001827 -0.22696657] -> 1.0\n", + "[ 0.0154401 0.38461378 -0.00271233 -0.51907265] -> 1.0\n", + "[ 0.02313238 0.5797738 -0.01309379 -0.812609 ] -> 1.0\n", + "[ 0.03472786 0.38483363 -0.02934597 -0.5240733 ] -> 1.0\n", + "[ 0.04242453 0.580356 -0.03982743 -0.8258571 ] -> 1.0\n", + "[ 0.05403165 0.38580072 -0.05634458 -0.54596174] -> 1.0\n", + "[ 0.06174766 0.19151384 -0.06726381 -0.27155042] -> 1.0\n", + "[ 0.06557794 -0.00258703 -0.07269482 -0.00081817] -> 1.0\n", + "[ 0.0655262 -0.19659522 -0.07271118 0.26807207] -> 1.0\n", + "[ 0.0615943 -0.00051497 -0.06734974 -0.04662942] -> 1.0\n", + "[ 0.061584 0.19550486 -0.06828233 -0.3597784 ] -> 1.0\n", + "[ 0.06549409 0.00141663 -0.0754779 -0.08938391] -> 1.0\n", + "[ 0.06552242 -0.19254686 -0.07726558 0.17856352] -> 1.0\n", + "[ 0.06167149 0.00359088 -0.0736943 -0.1374588 ] -> 1.0\n", + "[ 0.0617433 0.19968675 -0.07644348 -0.45245075] -> 1.0\n", + "[ 0.06573704 0.3958018 -0.0854925 -0.7682167 ] -> 1.0\n", + "[ 0.07365308 0.20195423 -0.10085683 -0.50361156] -> 1.0\n", + "[ 0.07769216 0.0083876 -0.11092906 -0.24433874] -> 1.0\n", + "[ 0.07785992 -0.18498953 -0.11581583 0.01139782] -> 1.0\n", + "[ 0.07416012 0.01158649 -0.11558788 -0.31546465] -> 1.0\n", + "[ 0.07439185 0.20814891 -0.12189718 -0.64224803] -> 1.0\n", + "[ 0.07855483 0.01491799 -0.13474214 -0.3903015 ] -> 1.0\n", + "[ 0.07885319 -0.17806001 -0.14254816 -0.14295265] -> 1.0\n", + "[ 0.07529199 0.01878517 -0.14540721 -0.47699296] -> 1.0\n", + "[ 0.07566769 -0.17401667 -0.15494707 -0.23344138] -> 1.0\n", + "[ 0.07218736 0.0229406 -0.1596159 -0.57071024] -> 1.0\n", + "[ 0.07264617 0.21989843 -0.1710301 -0.9091196 ] -> 1.0\n", + "[ 0.07704414 0.02745241 -0.1892125 -0.6747003 ] -> 1.0\n", + "[ 0.07759319 -0.16460665 -0.20270652 -0.4470505 ] -> 1.0\n", + "[ 0.07430106 -0.35637102 -0.21164753 -0.22448184] -> 1.0\n", + "Total reward: 34.0\n" ] } ], @@ -186,22 +196,22 @@ "text": [ "/usr/local/lib/python3.10/dist-packages/tensorflow/__init__.py:29: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives\n", " import distutils as _distutils\n", - "2022-07-24 16:22:33.879054: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:33.879079: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n", + "2022-07-24 16:50:47.597258: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:47.597280: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.\n", "/usr/local/lib/python3.10/dist-packages/flatbuffers/compat.py:19: DeprecationWarning: the imp module is deprecated in favour of importlib and slated for removal in Python 3.12; see the module's documentation for alternative uses\n", " import imp\n", - "2022-07-24 16:22:35.795765: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:975] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", - "2022-07-24 16:22:35.795964: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796020: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796070: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796120: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcufft.so.10'; dlerror: libcufft.so.10: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796169: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcurand.so.10'; dlerror: libcurand.so.10: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796218: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusolver.so.11'; dlerror: libcusolver.so.11: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796267: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796317: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory\n", - "2022-07-24 16:22:35.796325: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", + "2022-07-24 16:50:49.838826: I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:975] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero\n", + "2022-07-24 16:50:49.839078: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839143: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublas.so.11'; dlerror: libcublas.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839194: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcublasLt.so.11'; dlerror: libcublasLt.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839245: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcufft.so.10'; dlerror: libcufft.so.10: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839295: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcurand.so.10'; dlerror: libcurand.so.10: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839345: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusolver.so.11'; dlerror: libcusolver.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839392: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcusparse.so.11'; dlerror: libcusparse.so.11: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839441: W tensorflow/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libcudnn.so.8'; dlerror: libcudnn.so.8: cannot open shared object file: No such file or directory\n", + "2022-07-24 16:50:49.839449: W tensorflow/core/common_runtime/gpu/gpu_device.cc:1850] Cannot dlopen some GPU libraries. Please make sure the missing libraries mentioned above are installed properly if you would like to use GPU. Follow the guide at https://www.tensorflow.org/install/gpu for how to download and setup the required libraries for your platform.\n", "Skipping registering GPU devices...\n", - "2022-07-24 16:22:35.796558: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", + "2022-07-24 16:50:49.839649: I tensorflow/core/platform/cpu_feature_guard.cc:193] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] } @@ -321,53 +331,56 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0 -> 220.0\n", - "100 -> 499.0\n" + "0 -> 29.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2022-07-24 16:24:08.306764: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", - "2022-07-24 16:24:18.603528: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" + "2022-07-24 16:50:51.475024: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ - "200 -> 499.0\n" + "100 -> 135.0\n", + "200 -> 484.0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ - "2022-07-24 16:25:03.522510: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", - "2022-07-24 16:25:08.844014: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" + "2022-07-24 16:51:35.910774: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:51:37.151017: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:51:39.284311: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:51:42.235074: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:51:44.691458: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n", + "2022-07-24 16:51:48.381946: W tensorflow/core/data/root_dataset.cc:247] Optimization loop failed: CANCELLED: Operation was cancelled\n" ] }, { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABUUElEQVR4nO29d5gk1Xnv/z0VOk6OO7uzOcDuEpcVUWCiQEIGhYsuSsYWEvfK2ALLsi0s+1qyjS3bkvzzlSVb2JKMdLEAJYNkBCIIhERcwsImNofZmZ20k6dj1fn9UXWqT1VXh5npng77fp5nn+2uru4+1d3zrbe+73vewzjnIAiCIOoLpdIDIAiCIEoPiTtBEEQdQuJOEARRh5C4EwRB1CEk7gRBEHWIVukBAEBHRwdftWpVpYdBEARRU7zyyisjnPNOv8eqQtxXrVqFbdu2VXoYBEEQNQVj7Eiux8iWIQiCqENI3AmCIOoQEneCIIg6hMSdIAiiDiFxJwiCqEOKEnfG2GHG2JuMsdcZY9vsbW2MsccZY/vs/1ul/e9ijO1njL3FGLu2XIMnCIIg/JlL5H4F5/wczvlW+/5nATzJOV8P4En7PhhjmwDcDGAzgOsAfJ0xppZwzARBEEQBFlLnfiOAy+3b9wJ4GsCf2Nvv55wnABxijO0HcD6A5xfwXgRB5OC5AyN44cAorji9C+eusC6gXz82jqd2D+LCNe24eF0H9g9NYWgqgZ7mMPrGZrGqPYoDw9NY09GAH77aB845VnVE8b4tvRiaiuN7Lx6DYZq+79cU1vHB81fgO88fQSyZBgCEAxp+++JV+Okb/bjhnKUIaip+9Gofrt28BE/sHsQVp3ehKaRnvdaTuwexaWkTeprDzrZn9w1jaUsYazsb8Oy+Ybx86CSu2bQEZ/Y2Y/uxcTAGnNXbgl39k4ilDAQ1BT/feQJbVrbi8tO6Sva5pgwTP371OP7Heb1QFIa0YeJbvz6ElMFxy8Wr8P1txzA2k4SuKvjIhSvxyI4BDE7EneczxvDus3rw2tFx9I3H8P4ty7CyPVqy8RWiWHHnAH7OGOMAvsE5vwdAN+d8AAA45wOMMfGpLgPwgvTcPnubC8bYbQBuA4AVK1bMc/gEQdz937uxs38S2/smcO/HzgcA/N8n9+GpPUN4YvcQHrnjUlz9lV+6ntMc1jERS+HWt6/GN391yNl+3RlL8INX+vCPT+wFY9nvJZZ/mE0a+Mrje12PaQrD3Y/sRnNYx8aeJnz6we343LuSuPuR3fjb952JD56f/Xf+u/e9ik9cugafufY0Z9tHv/kSAODwF6/HX/90N94anMJbg1P4xke34sav/dp57Es/fwsj0wn0tobxyJsnsKYjWlJxf+7AKP74h29gXXcDtqxoxcuHx/A3j+wBACiM4e8e3ePsO51M4xvPHAQA53PjHPjqU/tg2p9ZLJnG567fVLLxFaJYcb+Ec95vC/jjjLE9efb1+Ukga0UQ+wRxDwBs3bqVVgwhiHkyk7Ci55SRibTF7Xja8H3ORCwFANg/NI3VHVHcefV63HH/6+gfj+H4WAytER2v/Z93ZD3v5cMncdO/Po/DIzMAgKc/czkm4ync8M+/xlTces1YysBs0nrf0ZkkACCZzr4K4JwjkTaRNPyvEDjnznGkjGyJmE6kEU8ZiKesfXK9znyZtD+juH0sh+xjBoDR6QQA4BsfPQ933P8anj8wCgD47q3n49L1VjeAExNx/MXDO3DJug58+ed7fT+DclKU584577f/HwLwY1g2yyBjrAcA7P+H7N37ACyXnt4LoL9UAyYIws2MLT5pMyOAhn1bCEpAc/+pa4oVg+3sn0RnQxBLWyxb5Ph4HAMTcZdNItMctqyVoydnnfuq/VoJ+70SadN5X3HikcfmHaPh8xhgianJc++TSBlISu+V9jkBLIRZ23ISJ41DI9POY+LkGNJV9LZGsOP4BACgtzXi7LOkOYRvfHQrfuuiVdBVhlSO4ywXBcWdMRZljDWK2wDeAWAHgIcB3GLvdguAh+zbDwO4mTEWZIytBrAewEulHjhBEBYxIe5S5CrEVAjuao/X2xIJAABGphPobApimRD3sRj6x2NY2hLyfS/hmwtxbwxp0BTF9V7JtImkYY1JiLuff58uIO6vHBmDYYu76bMcaDxlImXwjLiXWDxnEtYxiNc/NDKLzsYgAEncNQW9rWHHesn1uWmK4vp+FoNibJluAD9mlpGkAfhPzvmjjLGXATzIGLsVwFEANwEA53wnY+xBALsApAHczjn3vzYkCGJBcM6dCFMWSdMTubdG3cnMprCGEdta6GoMoqsxCFVh6B+3xP1tq9p8309E7kNTCTQENWiq4kTu8ZT1Z25F7tb7TzmWUbbw5hL3oKYgkTbx+rFxiHOC3wkgljJctk46RwJ4vsx4xn5oZBqnL2nE8FTCEfegrqK31ToxdjcFEdT8CwM1lZX8yqIQBcWdc34QwNk+20cBXJXjOXcDuHvBoyMIIi+JtOlEjXLkmvaIu1dYGoKZP/3OxiA0VcGSphD2Dk5hMp5GT44INKQrCKgKkobpCL3msWWSkuBOx7NPPM4Y7X0MT1QuovSZRNp5njcqT6QNxFMGUkb5bBlhd6UME4bJcfTkLK7a2I1n941ItoyCZS2WFSNbMl40hZX8yqIQVdHylyCIufP4rkGokrHqity5sGVsa8FjCShSKUxXoyXky1rDeOXIGABgaQ7PnTGGprCOkekEmmxxz47cjYznnsztuYuI2PQ85kT0PCP83n2m42lb3DNJ11JH7o7nnjZxfCyGlMGxrrMBusqcZGtQy0Tu4n8/NFUp+fgKQeJOEDXKJ77jXgNBrpYRQm9yK0JOpk1cvbEbl6xrxxd+sssRLsCyZQBgWUsYLx06CQDoafaP3AGg2bZ0msOWfOiqj+du357O47n7JVQNkzvllqbJHVH3RvdWpYwJk/OMLVPiyF2MPWmYGJyy6td7WkIIaqorci9K3BXma02VE+otQxB1gKqwLJEUJA0TKcNEUFccT1gkCwE4SUJZnET1jB/Cjmn2RO7iKiEhJVSFLeMnvOJkZLjsJPcJKlfkPhFLIWmYSJvcuWJImxzcJ/E6X2alhKpIWkcCKkK64lg2IU3Fmo4GNAQ1nLmsJedr6Wp1JlQJgqhymkKabykkYIlTyuAIqIpTEimiUiATuX/0opXYPTCFkzMJLMkbubvFXXNsmdyRe95SSO4/boNz330AYHQ66dyelU5UaZNDV/2m2swdYSmlDBMx+wQS0lVX0jSoK4gENGz7s6sR1HLHyppKnjtBEPOgMaS7JsnIIinqznWVOcInKkF0laHVLovsagzh32/ZikIIr12URaqqN3LPeO5iMpNvQtXMjtxl68KULBpv0DtsV/oA1uxQ+bj1EnWykieHiauDsK4iqGdEXAh9qMCb6oriss0WA7JlCKIOaAp7InfujdxN6KpV6QJYEe4Zy5rwpZvOhqLMLdLNFbknpMg9kXYLmV8y0UmoFhO5e54/PJURd84z1lApBVScmGRbJhzIRO66ypz3LUQlSiFJ3AmiDmgM6i4BNCR7QtSCBzTFNVP1tO4m3HhOVtungjjiHhHi7k6o+rUU8BM2v4Rq2vD33L2R/4gUuQNAxI6cSymgM84M1YyvH9Isz13cLha1AqWQJO4EUQc0+njuYVvwROQeUBWnsgUAAtr8vOncnrs8ickbuRebUHWXc4pEqtgsTlgjkucOWBE1AKRKWG4oz1CN2VclVuRufYayPVMIvQKlkCTuBFEHNIV1V9RqmByRgJVSEx64rrojd1no5/pe8v+KwsBYRtzFyUTGz3PPVQop3/ZG7mLMI1PuyD1qT8rK1cpgPsieu0ioBjXF8ddzzUb1Q1PIliEIYh40hfQsYYzY0WwsZcDkljC6Ivd5intHg5WAbY8GnG2awiRbxigycs9MVspsc9symYSqW+S9tky4xLZM2sjkDURCNayrYIw5dsxcI3dKqBIEMScUZtVfu2rEOXciTGEvBDTFJeh6ntK9fFy2vhP/8uEtOHNZs7NNlcQ96WPL+DcOs7aZOSJ3V+WMp4FYlucubJkSCaioYwcyCVVh/QTn4blXohSSxJ0gapxIQIOmMpg8I5Ry5D6dsGZT6ioriS2jqQreeWYPmNTCQCRVAf+EqizUYzNJpO0JSIC7kibtEvfs0k7x+NhsyvX6kRLbMvIM3qRty4irg5BT/lj852d1hSRxJwhiDoQDqpPUlDsthh1xz0Tu8gSffJNu5oomva5fKaQjzoaJy7/0NH7wSp8jdnJQLwugN4cg1717EdUypZriL8/gtRKqhhOxO//P1XOnhCpBEHMhGlCh2VG47E2HHVtGTFjyJlRLM5MTyFTMAPmrZRJpExOxFAYnE75dIYUAWr1Y3DaTd5aqjLhKKZWAzkgzeFOGiYQcuevziNyrseUvQRDVTTigSZG7CUB12zJxSdxLkFD1Qy0g7sJzFyKfkmwZv1LIoKa4rB3D5Hktl0iwxJF7UhZ3qzlZ2KmSmXvkTglVgiCKQm6QFQmojrimnQoUjrBdCin6u3gnMc03oeqH23M3cnruhkvcferc7f0CWkYMVYXBlMS9JeJeeASAU/ZZKs/dmZGqq1kJ1XlF7jSJiSCIYpB1IiLZMmnJmxaRpiPuKnMlUeebUPVDjtz9q2XcydOkYWZORD7VMpa4W7c1hblsmWU+HSszpZCliY7Fe0eDmp1QNaX69nl47iolVAmCKAJZEHtbw44tI0/8EbaM7LnLgl7ShGqRnrvhY8vIvWXEDNOgpiIlFvdWFZhmphLIT9yjwpYpUXQsTkKRgOqqcwespfWAuUXu1gLZ7s/k+QOj2D80neMZC4fEnSBqECGIn7pyHT5/w+aMLWOajoBmqmVkcc+IcCkjd82TnJXrxAHJc7ej11SaZxKqcuQu2TLC2glo1tR9cTJY5rMohrCgShW5i3FGApIt45RC2nXuc2g/qSoMnLuP9a4fvYGvP72/JOP1g8SdIGoQIRLRoIagJpVCGhlvWlOsFr9T8YznzhhzEqmlTai6X0vU1gu8FowroepTLROUPHddVWBKwugXuTuNw0oUuYv3diL3tOFE6kGPPVMMumObZU4+8VSmlXA5IHEniBpERO5iLVTZcxdiqSqWkMu2DAAnqVrahKo7chcnFIF3wlIuzz0tee5OszDN3c5XXtxb4JRClqr9gHTyFJF7KOCO3INziNw1T8Lbeg8TyXT5fHgSd4KoQUQAKHqxy5678KZVhSGoq1JC1RZ120IpZZ27t6/5tEfcvTNMc5VCOglVn8SvSHL69VAXM1RLVecu7J2wriJhT8ryeu5zidydk68k7kmfmbylhMSdyMlXHt+L2+97tdLDIHxwonNb5+TFKtKmO3J36tw1Ieqi2qN8kXva5JC6Ezii63juRsZzl3vLCAGXo2LdtnxEklZVGM5e3oLTlzQ67xstceSekjx3cRWyEM9dnEhTnlYLqTSJO1EB9p6Ywu6ByUoPg/DBMN1RrF/krjCrl4xYhi7gtWXKmFAFgGggY5/4ee4pH89dJF7dDc6s15bF/aHbL8Gjd17mHEu4xDNUM0lpzYmuM43D5hG5K9mRe8rIbo1cSmiGKpETs8CUb6JyOJ67ku25p6WEalBTnH4suieRGijTJCZBQ1DLWiBb/J9Mm46Q+3WClNvpivEmDSv5KNsy1jEZziSmUs1QTUmlkAIRqTfYZZdRH+8/F5p0ZfXxe1/G29d1ODNfywWJO5ETk/NFn3hBFIcTubPsyF08pijuLpDidjkidz8fvCGkAZPu8bqqZfJMYgr6eO4i+ahKfo84lkxCtbSlkFEfcV/b2YCvfOBsXHl6V9GvJ65sDJPjlSNjTlLYOx+glJC4Ezkp1M+DqByygAOQ2g+YTlSvKf4tfr0RfCnweu6Au6pFiK6wTVIG902oytUyAnE7KbUjcB5T3f53qUohxXhl71947owxvG9L75xeT5NKIRNp05kHUE5bhjx3IicmL90fC1FahNUioliRsJNtGZFQFYh9vBF8KfB6/4Bb3DMtf+XI3U6oSj8xR1R9TkqptI+42wuQyMdfClKmtcC4PA7ZopkrumPLcCTTptMvnqpliIpgcu67gg5ReQzHc7fui0lE3oSqHHlm7Bh31UwpELaD7EOLlgBApi2AEPmklFD1W6zDrzVxKkfkHtAUKWFZulJI1XPl4zd5qlg0x1qyqplEv/gU1bkTlcDknCL3KsWQBBxwJ+zkhKorclc8tkwZEqrruhqcbQ1BewFt5l/nLloNyPGD47lLTbkcYfQRd12zZuFqUmRcClIGh664e/H4tT0oFnHym7XtGBG5ky1DVATy3KsXU5qFKv/vTaiKRaw1hTn+fNATwZcCp948qOGs3mYAmaqSSECzF7vOXAmm0typSHG1HzBMMOYurRQnqISfLWNH7orCXCeRhWKYHJrqtbXmL5fixCpmC4vIvZwJ1aJHyxhTGWOvMcZ+at9vY4w9zhjbZ//fKu17F2NsP2PsLcbYteUYOFF+5H4eRHXhrZaRPWc5obq+u8HZLnASqz7li/NF9twv39AJADgxGQeQqQ83pHxAyjCzKmjEODWFuStiJEsDyK6WEVcgmqpkdV6cL2nThKYqTouGpc2hBb2e+HzEIiDV5rnfAWC3dP+zAJ7knK8H8KR9H4yxTQBuBrAZwHUAvs4Ym38mgqgYJkXuVUt2tUzGc09Lj63vbsx6rlhLVfGpcJkvItLWFIZbL12Dqzd24yMXrgQgL4HHXZ67XGZrSraNqrjH5u0t461zz5ysSreUnWXLZCL3pQvw24HMyVcsAlI11TKMsV4A1wP4d2nzjQDutW/fC+A90vb7OecJzvkhAPsBnF+S0RKLivDcOU1kqjocW8bHczelqH5Dd0PWc7193UuBE7mrDM1hHf9+y1a8fV0H/uja03Dd5iUA7EoeqVpGFjZnkpPtdWdPVHLPUBU0BDVnJqymKiULRtKGFbmLCLtngeIu8gZC1MWxmLx0SeCs9yxyv/8PwB8DkMOAbs75AABwzgcYY6KifxmAF6T9+uxtRI0hgiCTZ3qYENVBVvsBaZKMnFBd0pRtJ1iRe2nFXSRU5da/jDHcfsU6fOtXh6yxGdxV5y4LsThZGaYJVfW3Zfwi9z++7nRHgL2Lai+ElO25T8as1sUr2yILej1x8p1NpLMeSxkcc1jUqfj3LLQDY+zdAIY4568wxi4v4jX9ZCDrdMoYuw3AbQCwYsWKIl6WWGwyl8omVIWctWpC6KLQwMxiHVIppMLAWPaf403n9WJTT1NJx6Mp7isI12NOPsDdCdK7ADZgi6qiuG2ZPJH76o6o631K1vLXMKEpDB9423L0T8Txu1esXdDr6Z7IXSaZNp28RCkpJnK/BMANjLF3AQgBaGKM/T8Ag4yxHjtq7wEwZO/fB2C59PxeAP3eF+Wc3wPgHgDYunUrXfdXIZloir6easNbLaNJnrshJVQB4I+uPQ394zHnueeuaMW5K1pRSlTVXbXjekw68ci/pZgkdGLMhiESqpnnC2FM+ETuMppSuoSqYZ9kIgENf/qujQt+PXGCm/GJ3MuVVC14bcY5v4tz3ss5XwUrUfoU5/wjAB4GcIu92y0AHrJvPwzgZsZYkDG2GsB6AC+VfORE2fGrZiCqA2+1jF/LXxH93n7FOtz93jPLOh5xIvErr9QkcZcj61lZ3IUXb1qTh7y17EBmwo/f1QFgCWipfqspg5elVFRUy7jfq7Keux9fBPAgY+xWAEcB3AQAnPOdjLEHAewCkAZwO+e8fGtJEWVD5FFJ3KsP0yPguuS5mx7hXwxUx3P3E3f7qsLjs8dSPpG7Pe1ftmW8XSGVHMellbBaRpRClgrxWrMJf1umHMxJ3DnnTwN42r49CuCqHPvdDeDuBY6NqDDiD45mqVYfRo5JTLL1kcu+KAeaxx5yPebjuQNuW8ZbCimfmDK9ZfIfl64qpUuo2vZQqRC9ZWZ91kwtV+ROM1SJnJDnXr1ktx/ILAZREXEvwnO3Zs9mhGxWsiicQMIwoav+CVW/ahnv+5SyK2Rpe++IyL2KPHfi1EWOpojqwptQFXpnmGZWQnUxyFstI/V9kX9L8VR2tYzhG7lbtwsmVFWldOJuj6NUiJPftJ+4l8mWIXEnciJXMBDVhQiAhQgyZjXQkm2ZUs5ALYTw3P2W25MreVwLRPuVQopqGU9bX8C/FFLGmqFaOlumlAlV0eph1qcUslTNzryQuBM5EQJCS+1VH+I7kXOLqsJcjcMWM6GqOd5/tqSoOTx3IDN+OXLXctgyfr1lXGMoYZ27YZq++YP5Ik5Is4tYLUPiTuREnjVIVBemj6+uKYpr5udieu5+i3VkxuXvuQOZDpWmk7w3cydUbRHMJbqaopRsgey0wX2vQuaL7tS5L161DIk7kROTqmWqFm+1DCDqvM2KiLteREL1yT1DGJtNuR4TfdtF8Jq27RA5lyleW4hgroBaU0uXUE2ZpU2oMmZZTTGfaplyJVRpDVUiJ/IfHFFdeKtlALvO22eG6mLgeO4+7ylE8l+ePpD1mIjcRcSdNjkiiuI6Lm9vmXyRe6n863SJSyEB67PxqzyjyJ1YdDiVQlYt3moZcVsuhVzMhKpTLeMT7ea7ggjqti0j8jtmdkJVdxbIFseVewylTKiW0pYBci/2UY0zVIk6hyYxVS+Gp1oGsCLXB7YdA7ZlP1ZuivHc/RBRufitpeyGXf4JVcvSyJdQLVnL3xInVAFrTVm/UkhKqBKLDvWWqV4y7Qcy27yRplriyDMfmWqZ3J67HxnPXa6W8a9z91tDVSakq5iMp0uy/kCpE6oA0BoJ+G4nW4ZYdKi3TPUibBnZm055RKJaIvd8iUlhy8gLaKuexTrkZfYUBt82xgBw7ooWjEwncGB4en4HIZEucUIVANqiOcSd6tyJxYYi9+rFr1qmfyLu2mdxq2VyNw7zbgvrmd7lq9qtfuwZcTehK8x10sqUQvK8Vsll6621W5/ZOzKfQ3BRjoRqq0fcQ7o7UVxqSNyJnMi1x0R1YfpUy3ipRJ27X7TrFUl5YYqzepsBSHMqDO7T8leK3PMo1vK2CNZ0RPHLvcPzOwgbbi8vWcqukADQ5rFlxPKAZMsQiw41Dqteiqllr8wM1blF7qctsVbuNEyOlGFiKp5GUFf869yNwknO81a2YtfA5LyOQSAKCPQyRe7i8wjpKhRGkTtRAYSmU7VM9SFs2nwCvri9ZfJVy7hlRtgRQEboDc7x852DmEqkceXpXW5bRnF77vloieiYjmdXpMwFMa+j1AnptogOIHNi1lUGXVWoKySx+JDnXr34VctcvbErx97lJ1/LX2+wLdsyTjtgg+O7LxxGb2sYv7Ghy9XtUhbZQlZTY0hHLGUsKBoWS/XpJS6F9HrumqogoCpkyxCLi1xORuJeffglVP/9lrfhb99X3uX0ctEeDYIxoKMxmPVYV2MI//nxC3DB6jYAQEhTcdN5vbjv4xc4EbrBObYfm8A1m7qhSglVb58Zv8ZkMg1By8feOziFFw+OzutYRORe6lJIb7WMrioIaKVbYMQLiTvhiyzoJO7Vh18pJABEpKh4MVnVEcXzn70KW3IsvH3xug6nzltTGf7hprNxyboO5+QUSxqIpQx0NFgnB0VqZeyehZt/HI0hS9z/4bG38Mn7Xs277/HxGL765L6sunhRQFDqhKq3zl3YMmKFqVJD4k74Irf5Jc+9+shVLRMJVG7S+ZLmUN7HRU27XFEjPPqR6QQAyzMHpOUDGfP0z8kvWULcD43MYHw2mXdC06cfeB1ffnwv9pyYcm0XkXupE6p+kbuuMfLcicVF/puglr/Vh9N+wCNA0QpF7sUQsmejymMWSd/RmSSATHQr9N9bFlnIBm8MWSeH42MxmNx/cQyBuPqZiLk7VWZsmfJG7prCLM+dessQi4lsxVDkXn0Yji3j3h4JVu+ftKiSkStqhJ8+KiL3sCXOIlpXmPsYi43cxW92OpFGNMdn0mSfCCY94i4SqqWexBT2nHgDmoIfffIS6Fp5qpoocid8MSmhWtWYJvedil8pz70YQnp25C5uj05bkXtLxF0LrirM5bsX0tsGj5BP5SmLFCeC8ZyRe+lF98/fvQnf/98XQVMYNIWhOaKXzUqr3tM8UVFkJ4bEvfowuP8CztUs7kEfcRe2zIiwZaLuyF323g0UXrRa2DICvy6M3n1P2u8tKNQ3fiHc+vbVAGy/vcS2jxcSd8IXityrGyty9xP36v2TFraMvPiLprhtmVZP5O7YMwoAo3AppIjGBX4TmoYm43h234h01ZBwPZ6WJhmVi4CmOG0VykX1/hKIikLVMtWNYdZe5B7ytPcFMuI9Op1ESFeyrBsngnci+fzvEdQU6CpzVmSaiqey9rnl2y9j98Akrj+rx3lvGaNMpZAyuqqUvBrHC3nuhC8m1blXNSb3bxoWLHM0uBCEcKek35NT554yXNUkXltGcTz4/MfHGHNZM1M+tsxBuyXwrP3YsCdyT5WpFFJmWUsIS5rDZXt9gCJ3IgeyntMaqtWHyblvcjFXr/NqIOT0bs8kdOTZpy2SuGdE3X2/GKekIag5PrqfLZOwp/uLZKs3cnd6y5RR3O+/7aKyd+0kcSd8MVyeO9W5Vxu5bJlqxoncpWBB7hvTGslE3KrHjnHWaC0iySn77vkSqo64z3gi90WwZbxlkeWgeq/hiIpiUp17VZOrWqaaySRU/SN3ly2jiP99EqsFkMsh84u75cePTrtnsjozVBdxmcJyQOJO+OKqlinBmpREaclVLVPNiISqHCzIYt0sR+6KN5Gau+ukF+G5t0R034SqQETuaZO7Zqm+2TcOxoCeMnvi5YZsGcIXOVg3yHOvOmrRlgk6y8pJtox0glrVHnFuZyVU7fthvbBkNYU0RAMq2iKBvJOY5GTrRCyFWMrAd54/gp9s78clazvQ6dPhspYgcSeyeODlo3jlyJhzn2yZ6uJLj72Fh7f3Ox0UvfzeFevK1q9kIQSdUkjJlpFOUGf3tmRtZ053SGv7ms5owfe5/PQuRIMatveNZ9kyuRqJTcbS+PvH9uDZfdb6q3devaHg+1Q7BcWdMRYC8EsAQXv/H3DO/4Ix1gbgAQCrABwG8AHO+Zj9nLsA3ArAAPApzvljZRk9URYeefMEnjuQWWSYSiGri++/cgyJtJkzcv/Mtact8oiKQyRU5eorubrnjGXNzm1vXfsJe/HvtUWI+w1nL8UNZy/Fh//9haxqmRlPI7HGoIapRBqP7BjAs/tG8NsXr4KuMlx/Zs8cjqw6KSZyTwC4knM+zRjTAfyKMfYzAO8D8CTn/IuMsc8C+CyAP2GMbQJwM4DNAJYCeIIxtoFznrs9G1FVWOtZUkK1WomnrMi3xlwZJ0GZylF9JTf4Ujyeu/gNru1sKPr9GoIaRqdnXdvGZ91lj+0NAUwl0th+bBwA8PtXrkN7jiuiWqNgQpVbTNt3dfsfB3AjgHvt7fcCeI99+0YA93POE5zzQwD2Azi/lIMmyot3ZRgqhawu4ikrTlrMNVJLgSgtLHbehKqwrGOcm7jrWZ77+Kw7wSqE/NiYdRJoDrt709QyRXnujDEVwCsA1gH4Guf8RcZYN+d8AAA45wOMMbGA4zIAL0hP77O3eV/zNgC3AcCKFSvmfwREyfHaMFVo356ycM6dSTj5FseuRkSJ4paV7tWavvHR87Cppylrf5WxrGP0rkOaj8aQllUtkyXu9uv1j8fRGNTKWtu+2BQl7ralcg5jrAXAjxljZ+TZ3e8Xl3Wq5pzfA+AeANi6dStd91cRqSxxJ3WvFhJp/2RkLdAc1vGzOy7Fqna3b37t5iW++yvKwq5OQrrq+rwAYDyWbcsAVkDTEq2fqB2YY7UM53ycMfY0gOsADDLGeuyovQfAkL1bH4Dl0tN6AfSXYrDE4pD2hOrkuVcPwpIB/HvLVDsbfSL0XFhL7Fm37/v4BU5CtliCmoJE2gTn3EnceiP3kK4iGlAxkzTQEi7+qqAWKHgNwhjrtCN2MMbCAK4GsAfAwwBusXe7BcBD9u2HAdzMGAsyxlYDWA/gpRKPmygj2bYMiXu1IJKpQO1F7nNFkZbYu2RdB87z2DmFEHX1clmod0m9gKa4Jj3VE8VE7j0A7rV9dwXAg5zznzLGngfwIGPsVgBHAdwEAJzznYyxBwHsApAGcDtVytQW3oQqRe7VQyKd+VMy63zmsKqwBV2dBGz/PJE2nRr7eMqAwqzkbjJtIqgqaAxpODHpblxWDxQUd875GwDO9dk+CuCqHM+5G8DdCx4dURG8Yk6Re/UgR+6xVH3HTCpjC7o6ESs/JVImELK2xZIGQroKTWFIpk07crdksKWOKmUA6i1D+OAtVaPIvXqQPfd4sr7FXVGyq2XmguhtL1/txNMGwrrqCH9AU9AUPnVtGeIUI+2pjjFJ3KsGWdxPhch9IdUyGXGXrnaSJkK66jQsC6gZz72eatwBEnfCB+8al16xJypHPH0K2TILjtwlW8YmnjYQ1BXHy9clW6b1VPPciVMP2YbRVYU89yrCZcuk6vuka9W5z//5olomkTYwMZvCwZFpxJOWLSMIqAqa6rRahjx3Igu5zl1XGXnuVcB0Io2UYbrEvd4JqIpT8TIfZFvmP547jP95zwuYtROq4jFXQrXOxJ0idyILeYZqQFMpcq8CfvOrv8INZy/FspbaXkBiLvzNe89E2xzaDXhxbJm0iZMzCSTTJsZmk+hoCDplpEFNQZMj7vVly1Dkfgryy73D2Nk/kfNxWcwDKqMFsitMPGXg0MgMjozOuCo/6p0L1rRjfXfjvJ/vRO4pA9MJ63MbmU4ipCuuyP3y07rwWxetxMq2SM7XqkVI3E9BPv+TnfjXZw76PsY5d4u7ptT9ZJlqR/QyH4+l6t5nLyUhPWPLzNiLdpycSSCoq05UH1BVLG+L4C9vPKOumoYBZMuckiRSJpI5IsCUJ0oPaAp57hVmQIj7bOqU8twXimzLiBWZTA6EdRUpxTpJBrT6EnSZ+j0yIicpw8xptXj9dV1VshqJEYvLickYAKsvSjxt1H1PmVIhT2KSl9sL6YqzWDeJO1FXpAwzq62v85inpl1XFRhky1SUExMJALa4p0yE6liQSolc5z4jibs1Q9X6DMXqUPUI2TKnICmD54zGvRG9rjLQHKbKcmLCitzHZ5OIpQwEdRVfuulsLGkOVXhk1U1Q8tzdkXumzj1YxydKEvdTkHy2jHc2qqZQQrXSCM/d5MDIVAIhTcE762AB53KT6QrptWVUiJ90QJ1bj/haon5PW0ROLFvGLeJ/+uM38Wf/9WZ25K5ZM1RfOzqGH77St5jDJGxOTMad24OT8TkvWnGqoigMAVVB3GPLeCcx1SsUuZ9iGCaHybMTp7sHJqEr2a0GAiqDyTne+/XnAADvP6930cZKWAxMxNEWDeDkTBKDk4k5rSN6qhPUFEzEkpB/1iFdgWlSQpWoM8RCHN6Sx5RhIm2aWQt1aB7B55JF8+PX+vDer/+6jKMlOOcYn01ibae17ujgVNyp3yYKE9QVjE67100N6yresbkbd169Hq111nJAhn4lpxhiyTFvQjWZNpE2eVZNu7BlBLJ3uat/Eq8dHaf2BGUkkTaRMrjTdoBzOGV8RGGCmoqTM25xD+kqVrZHcefVG5y1VesREvdTjJTdMtYr4lYFDc/23BXmuqSVFxgWfbJpYk35ECfTZa2ZnjIUuRdPUFMwmiXup8bnd2ocJeEgRN1rvyTTJgyTZ1XLiJa/oh5YXmBY9Mmu977ilWQ6bot7S6bvCSVUiyegKRidTri2nSqfH4n7KUZSRO6eCD3peO7u7ZrKYHDurFbjEne7hUGszpd7qyQicu9oCDilffVcm11qgrqKSfsEKZKnJO5EXSIidm+EbiVUuW/7AdPkTs9rsmUWlylbmBpCGi5c2w4AOKu3pYIjqi3kE2F3UxAAXIt11DNUClmnfPSbL2LH8Ql8/obNuPGcZc52EZl7Pfdk2rQ9d7foBzSr/UBD0Bb3WMa/FKJOtkz5EJF7Y1DHdz52foVHU3u4xL0xhGMnYxS5E7UL5xzP7hvB2GwK2w6PuR5zInefUkjD5Fk9ZzSFgXNkxN03cqf+BOViOmF93g0hisPmQ1CqLOpusto1nCqRO4l7HZKrdBGQ69wzgsw5t6plTBOGT0IVgNOJ0O25U0K13IhFJsTJlZgbor8MY1beAjh1qmXoF1OHJCXhFp6tQLZlxmaS0FTmJJrSJs9KqIoqGZGIHZ/N2DKUUC0/olqmkSL3eSFsmdO6GxG1T5Cnii1Dv5g6RAgxAFdPDSATsRsmx//+f6+gtzWCL9y42drmU+eu2svPi+f5lUJSQrV8TCdS0BRGFTLzRJwcr928BBeuaUf/eOyU+SxJ3OsQWdy9towc1Q9MWE2oktLEJrmKRlUYxMpjIqL389zJlikf0/E0GkJaXc+kLCfbjlg5p3ds7sbmpc24yK44OhU4NU5hpxiJfJG79NhsMo1k2nSVR8qRu8IAxRYV38idbJmyM5VIk9++AP72fWfiytO7sKmnqdJDWXToV1OHiOg8ElAx5RF3uQRyNmkgaZg5I3eFMSeRKsT92MlZ7B6YxMaepky1TI71WImFMx0ncV8I125egms3L6n0MCoCRe51iBDi1kjA8Ry9jwGWuKcM0zkZcA4kpcjdsmWEuFvNq6JBDbd9dxuAjNcep8i9bExT5E7MExL3OkRE4u0NAcRShqs0UvbjxX1Z8BOSf64w5ni9ScPExp4mfOTClTh2MoZE2iDPfRGYTqSpxp2YFyTudYgQ8DZ7UQc5qeotdZRtGSDjn+sqg8IAVfLcVSUzhbt/PO4sVUbiXj4ocifmS0FxZ4wtZ4z9gjG2mzG2kzF2h729jTH2OGNsn/1/q/Scuxhj+xljbzHGri3nARDZOOIe8RP3ApG7/dyQpkKRqmWSaROqwtBlz/I7enLWeU4sSTNUy8EH73kBB4dnTpkZlURpKSZyTwP4Q875RgAXAridMbYJwGcBPMk5Xw/gSfs+7MduBrAZwHUAvs4Yo1/nIpIw3JH7TB5xTxkmkulMNC989FBAhcqYq1pGYQxdjVbkfkwSd6pzLz2JtIHnD44CAJrC9btaEFE+Coo753yAc/6qfXsKwG4AywDcCOBee7d7AbzHvn0jgPs55wnO+SEA+wFQx6NFRJQ7irU25VmqWbZM2nTVvovKl5CugDF3QlVTmNOfg8S9vIjv7PqzevDJy9dWeDRELTInz50xtgrAuQBeBNDNOR8ArBMAgC57t2UAjklP67O3eV/rNsbYNsbYtuHh4XkMnchF0sjnuXsjd+6qfY+nTCgMCKgKVCXTUwawVpNviwSgKQzHxiRbhsS95Eza8wnesakbHQ3BCo+GqEWKFnfGWAOAHwK4k3M+mW9Xn21Zi2xyzu/hnG/lnG/t7OwsdhhEEXgTqvlsmazIPWVAUxToqgJFsmUAK7mqKAydjUG3555H3GNJAz97c8C1sDZRGLHARFOILBlifhQl7owxHZaw38c5/5G9eZAx1mM/3gNgyN7eB2C59PReAP2lGS5RDE4ppIjcJVsm6RV3T7VMIm1CUxk0lbkmMQGZKL6rKYSjo5a4B1Ql7wzV/3r9OD5536t49ej4wg7qFENE7k1hqpQh5kcx1TIMwDcB7Oacf0V66GEAt9i3bwHwkLT9ZsZYkDG2GsB6AC+VbshEIYSAO567HLmnsyPoWUmc4ykDqsKgKQpUxR25K0LcG4NOZNkc0fN67vsGpwEAz+wl620uTMZtcafInZgnxUTulwD4KIArGWOv2//eBeCLAK5hjO0DcI19H5zznQAeBLALwKMAbueckym7iIhIvDWSbct4l9fzPh5PGdBVJVPnrrhtGSBT6w4ALWE9ry1zYNgS91+SuM+JyZhty1ClDDFPCl7zcc5/BX8fHQCuyvGcuwHcvYBxEQtA7i0T0hVMJ9L4u0f3YMuK1izPHXAnXBNpE5oduct17kBG6Je2hJ1tLREdg5PxnGMR4r69bxz3vXgEHzp/BXU4LAKK3ImFQoZeHSIi94CqoCGoYyqexvdeOgoAeP+W3qz9vZG7pmQ8d5ctY9/ubY0425rDAcTT/pOYYkkDx8dj+OD5y/H6sQl87sc7sGVFKzaegh365spkLAVdZafMqkFE6aFfTh2StKNvRWFoCKp5SyEBYCaZeTyWMqCpCjSFQc1KqFr/97ZmIveOhgCSadPXdz80MgPOgUvWdeCv33MGAOSN8okMk/EUmkI6XeUQ84bEvQ5Jpk1n6byGkIbR6YTzmDXT1L2/WKcTsFZX0lSGZa1hLGkOOT47kFmVSRZ3cXt4ynqPkekEfvBKH4CMJbO2s8GZ2Sr2I/IzGUuT304sCLJl6pCkIYl7UMMJKVpOGRyRgOaK5r22TEtEx+d/czNMDrx6dMx5TETundKkmuVtlkUzNJXA8rYIPvGdbXjt6Dgu29CBI6MzAIDVHVGnydjwNIl7MViRO/15EvOHIvcagnOOH73aV3Dlo2TahK5mxH1wQhZ3M2uBYFno42kTmqJAUxUENMW3Wka2CoT/PjxlvcfOfmt+20zCwOHRWXQ3BRHSVYQDKhqCWtVF7t/+9SH8xUM7Kj2MLCZjKYrciQVB4l5DHBqZwacf3I7Hdw/m3S9pmAhI4j4jnQxSholIwC3ucuRunRiyk6hAps5dxmvLiGTuZCyFI6MzWNkedfbtbAxiZDqZ/yAXmSd2D+LRnScqPYwsJuNpqpQhFgSJew0hJhsVWvkomTadFd6jnl7ghcQdgBP1A/517jIdDUEozLJlZKbiaRwZncXKtoi0b8CJ8KuFockETs4kq649ghW5ky1DzB/69dQQYkHqhE/Fi4w3oSpQmLWMXtgr7p6Thfy4HKzLkftjd16GV4+OQVUY2huCGJpMuCpxBifjGJpKYFWHO3J/68RUocNcVAYn40gZHJPxNJqryAYR1TIEMV8ocq8h4ilLPFM56soFckK1UYrcA5qCVLpw5B7UZHHP7i0DAKctacQHz18BwGpHMDydQP94zHl8R/8EAGCFFLl3NgTL5rn/xUM78OPX+ub0nHjKcNoonJypHrsokTYQT5nkuRMLgsS9hhC15N7mXynDxJVffhqP7rC842Q647nLtkxAVZA2TYR19wXbbNJwbBwArokzhWwZwIrIh6birk6RO45b4r5K8tw7GqyeNOXo/37v80fwBw9sn9NzhiYzJ5rRKqrimXI6QtKFNTF/SNxrCLEEnneR64lYCgeHZ/Dm8XHncblaRhDQVKR8bBnAbcXIy7p5+7n70dVoReTHTmYi9z0Dlv0i18R32rXuIyUWUtkvN8383vm3f30IX/zZHnDOMSj5/6NVFLlnOkJS5E7MHwoNaggR8XpnmYqWvmOzKedxEbE3StGfqgCJlIGQpkBhgKyDEV3FOKzny6WSsi2j5RT3EEamkzgwPI2ApkBXGKYSaQQ0BS2RjECJVZxOTMRdLQwWitzV8vDoDNZ0NuTc9ws/2QXASu72NGdOPH/937vwvZeO4j9+p/KLhlEvd6IUUOReZZycSeL3v/capuzGUTK5IndRpz5hi3tCSqjKtkzK4IinrTp30WJA4IrcA3OL3Fe2R2CYHM/sHcaq9oiTmOxqDLpq4kVy9fDorO/rzBe5fcIbfRN59z19SSMA4Aev9LlaIRw7GcPTbw1XRR0+9XInSgGJe5Xx+rEx/GR7vzMZSCaX5y7EfWw26Twuz1AVpOweMEE7upYraeT9QpL/rrLCnvuGbksw9w9NY3VH1LETRKQu6G0NQ1UYDo1YbQlSholv/uqQUwU0X2ak9gnyjFoA+MVbQ3jBXmgayHxW47MpDE7FoavMZUO9eGgUiwXnHF/82R5c/LdP4qdvZNazoY6QRCkgca8yRFTu1yNdVMt4I/eZhNuWSaZNBH0894RhibuI3OXHZCEOyaWQrpa//mNe15WxQVZ3NDhWkOgnI9BVBSvaIjg0YrUleP7AKP7qp7vwwsGT/i9cJHK1z6M7TsCQ/Kbf+fbLuPmeFzBk++ti35OzSQxNJtDVGHJ91vKJoJy8fmwcB0dm8K/PHMDITBJ//l87nIod6uVOlAIS9ypDWC9+LQZEhJvLlhkXkXuOOvdk2oTJrWoYXWUucZd7tIe0HLZMjsg9GtSwzH7+6o4IGkP+kbv1eBSHRixb5oTdFsHPgpoL4vg/fMEKDE0l8PwBS6Blkf/Hx/cBsKJ8hVmfxaGRGXQ1yX1ywnjuQPnF/eDwNN7ztV/jm786BAD442tPw9hsCv/12nEAFLkTpYHEvcrIJ+5OnbvHlpmKZ2yZvYNTmIqnfatlBCFdhaYornp3WYhdnnuOOncvG7qt6N0VuTcFs/Zb3RHF4ZEZcM4xYIu7vMbrfJi1Pfcbzl6KhqCGR3cOAICrYdobfeNIpA0kDdOpvd87OIXuxsxx33LRKhwcnnGuLMrFbruSSFwlXH5aJ8K6iuP2PAHq5U6UAvr1VBn5bBkncjf8bZl4ysQ7/vGXiKWMTEI1kC3uQbshmDxZqadZsmUkUVGUYsXd8t1XdUSciFMWTsGqjihiKQODkwmcmLTEbDqxMHEXLYvbGwJY0RbBiYk4Pv/wTtz1ozcBAGs6ougbiznevOhkOZs00N0UxD9/6FzcefV6XHfGEgDA47vK02tmZDqBG7/2a8dfPzhsnUS6m0LoaQ45VzLUy50oBZSOrzJE5O430Sfjubtruf3E8fiYJZyKwhANqK4WA0Fdha4y5wQAuKNsly3jsxKTHx++YCV6mkPoagzljdxFr5ljY7OZyH2B4i5ObtGghrZoAKMzSTyxe8h5/KK17bjvxaMYmLA+k+XSrNmuphDefdZS5/7mpU14bOcgbrts7YLG5MfP3hzA9mPj2H4ssy0aUNEY0rGkOeSMj3q5E6WAIvcqI5nPc89RLTPlsTVO627Ehy9c4dz/4PkrcNmGTud+SFeh2y19BXKPdndCtXCdOwCsaI/gty9ZDQB5PfcO+31GpxNOpLpQWyZL3KXOkwoDzl/dBgBOX5vlUo29N+l7xWldeP3YeFZLhlLw813Z3TzFZ7SkOYTj4zF8/N5teHTHCZqdSiwYEvcqI78tIyJ392NeIfrpp96OS9dnxPzP3r0J15+5xLkf0hTcefUGfMwWYyAze9R6fG517l429jRiaXPINTtV0NEQAACMTCcdT1yuU58PIvKP6CraogH0jWXq6Je2hJ0WCI64t2XG1eU5AZ23qhWGybG9b3zO43ijbxzn/uXPfZcSnIil8PyBUWcOgLgIEuLe0xzC4GQCT+weRNKgvjLEwiFxrzKEr+5fCmltm0kY+Pi927DTbs41nUi7ujfqPjWL8ragruL6s3pw0dp2Z5vcETFnQrVID/jy07rw3F1XIeLj97dGLXHvG4th3C7d9F55zJXZpIGQbi0w0hYNuGbermiLOCeZPba49zSHnZNWt8c62rK8FQDw6hF3vXwxbO+bwNhsCrsGrDkKw1MJ/Pa3X8LwVAL/9dpxpE2OP7t+IxgDLlxtffZL7FzHEs9JhipliIVC4l5l5LVl7Mf2nJjEE7sH8anvvQbAEnevOHiRLRh5kpJATt65E6qZffIlVItFV62WBOLEBMzdc+ec491ffRY/tNdqnU6knaqgNvvkAQDv39KLT1y6Bm3RAMK6ij0nLNFtDGlojVj7eZO+zREdG7ob8EoR4j48lcC/PnPA6WcjVrzqs/Mdzx8cxdNvDePlwyfx3ReO4OzeZty0dTme+PRv4GNvt66aRF5iSbP7KsdrvRHEXCFxXyTe7JvAn/zgjYKNrRJ5JzGJ3jLWa4iuhtOJNHrtJOE1m7p9X1eO3L3L7HlxNQ4rsBLTfGiPBpyukbrK5uxvT8RS2HF80pmNOpNIO20WZHH/5OVrcMXpXWCMobc1jEH782oIamiL6gio7t43gq2r2vDioZMY8rFXZB7e3o8v/mwP9g5ZVwTCjhG20GG7pPKJXYPYPzSND1+wEoC1YLiYF7BEsmUAOOM5MDQ9p8+EILyQuC8Sz+4fxgPbjjkTVHKRL3KPe7z2KVsUp+NptEcDePIPfwNf/eC5vq/ritwl8W6LBrC2M+raN5SjK2Sxtkwh2huCzmzajT1Nc7ZlRJXN8FQCH7znBTz0er9T8imLe4eUJF7ZnkmiRoNW5N7p6X0j+MSla5A2Of7yp7vyjkP0rxcljScm3ZG7qJd/dv8IAODcFS3Oczd0N+B3LlnlnIyFuP+PLb0AgPeeuyzvexNEISglv0ik7PLFmaSBljwNEcXluG9CNeV/qS5sibV5uiEGZM9dEvptn7sa3msJOaHKXJF77nHPBZFUjQZUrO1swMuH59Z+QFTZHD056/jowpZpt8VdV5krj7C2s8Epj4wGVFx+WlfOJmGrO6L4nYtX4Z5nD+LuWCrnCk2idFFE2YMecT9oi/vwVAKMuUswNVXBX/zmZud+e0MQ/3TzObhkXQf+5J2n561MIohiIHFfJMSs0tkCFoRIqPrWufs02BqfTWJasiVykcuW8bNaQgG3iqsKg2Hy0kXuUSuiXtvVYC3gPUdbRkTu+yTrImjnCUTCtj3qjsrXSv1vNFXBJy/PX8d+xeld+MYvD+LlQydxdQ6rq3/cGscD247hJ2/0Y++gNZ49A5O478Uj2DOQaf62pClU0A678RyK1onSQbbMIuGIexGLWwPFR+4HR2YwnUi7+rb7Ecix0pLvvp5qGyHqpUioAhm7ZG1nAxpCGqYT6TktUH3Cjpjl3jEiWm6NBMAY0NEYcD0n31WNH+csb0FAU/D4rkEcHPb3v0Xk3jcWc4S9MaghkTbxuR/vQCJtOiWPsi1EEIsBifsiIeyWQjXd+XvLZG/b1T8JzlFE5C5Xw+SPIL0+tLBjSiXu7bYts7YzioaghpTBneMuhhM+iU7hb6sKQ0tYd/nt4r3mQkhXsbGnCQ9sO4Yrv/xM1mefMkwM+dg6G5c2ue6fvsS6v7Jtbu9PEAuFxH2REBH5bCJ/5J5X3H0EUESshcRd9tm9kXkhSh+5C3FvcLzyuVgzwpYRtEUDuOudpzv3L17X4cxKFbRE3JF8MXz4/Mws3/2e6pXByTg4z65Pv+WiVfjMOzbgxT+9Cp95xwbc/LblAICVHRS5E4sLee6LhGPL5Fkc2jR5TluGc57V6heAkxSM+qyLKiM894CmzLmkUeyfr7fMXDhvZRuu2dSNC9e046k9VpJzOpFGe0N2Lxo/TkzE0RjUMJVIo6MhiG1/drXr8a99aEvO5/p1yczFB962HFtXteLKLz+DXQOTOGNZs/OYOMH85Y2bEQ6o2Ds4jb/66S5s7GnE9Wf1AAB+78r1eGbvMACK3InFp+AvnTH2LQDvBjDEOT/D3tYG4AEAqwAcBvABzvmY/dhdAG4FYAD4FOf8sbKMvMYQtem5EqoPvX4cd9z/ulPK5xV3EdELUQvrKtKm6Sw27TcbVEZ47n4TmAohIvZSRe6djUH8229tBZC54sg3kWnv4BTGZpI4d0Ur9g5O4fh4DGf3tuD5g6NY2pJ/8pbMji9cO+exrmyPIqyr2OVZGUuUQa7uiGJ9dyPevq4D15/Z48w4FVy4pg2fumo9rji9EwSxmBTzl/4fAK7zbPssgCc55+sBPGnfB2NsE4CbAWy2n/N1xlj+kPIUIZknoco5xx33vw4Azmo88ZTpmvAkkqkicRoJqIgEtEzkHiwuci/kt/tRaltGRhxPruZhQ1NxvPOfnsX/vOcF/M0ju/H+f3kODMD7z7PqwXuaixf3hqA2p8gdsI759J5G7B5wi/tDr/ejJaI75Y2MsSxhB4CgpuLT12woePIliFJTUNw5578E4C1EvhHAvfbtewG8R9p+P+c8wTk/BGA/gMovJ28zOp3IWuhisUgJz90nofp8jqXd5CSjKIMUHRcjQRXRgCpF7sWJe3AeC0CU2paRKRS5v3pkDIbJ0RYN4D+eO4xE2sQPf/divO/cZQhoCnpby+9lb+xpwq6BSaei542+cTy1ZwifuHTNvE6WBLEYzDeh2s05HwAA+/8ue/syAFK3avTZ2yqOYXJc+eVn8L2Xjlbk/VNOtUx25O7XRRBwWzOiWsOJ3HUNkaCGUTvSLxQZBh1bJrcYPXrnpXjkU5dmbS9n5C5yBblKRLcdHkNAU/AHV68HYAnt6UuaoCgM37rlbbjtsjUlH5OXTfYsWrFS0ov2mq8iWUoQ1Uipq2X8/vp9C5gZY7cxxrYxxrYNDw+XeBjZJNIGJmIpZ3bjYiM8d78qmFjSfTUhervIUb6I4kUr2HDAitxFrbffiksyxdgypy9pwiZPKR8gee5ljNz9rmgA4JWjYzi7txk3nLMMrREdH7ogU8Hy9vUdvj3jS83GHuszEb67KGedTwUOQSwW8xX3QcZYDwDY/4tlb/oAyOFML4B+vxfgnN/DOd/KOd/a2Vn+ZJNYxchvctBi4NS5+9gP3jGJ6e7xPJF7NKi6ovVIAc9dVRhUZX7rcoo691K1H5ARJ6UZnxLReMrAjuMT2LKyFc1hHS997mp8RBL3xeL0JY1gLLP2qWgxXI4rGYIoFfP9c30YwC327VsAPCRtv5kxFmSMrQawHsBLCxtiacg3rX8xcOrc80xOEmIhOgPKEb1TLWOLe1jXXEnUQpE7YE1kCuaxZXIhInatDOouesf7nfSGpxJIGRxrO6zZpbqqVGRd0WhQw6r2KP7xib145z89i8lYas6JWYJYbAr+tTLGvgfgeQCnMcb6GGO3AvgigGsYY/sAXGPfB+d8J4AHAewC8CiA2znnlVFTDyJyj+dovlVuMu0HskUsnjLAGNBqi7qI3OXZrJnI3XpMjtwZK9xSALAmL80vcrcTqmWI3AOagoCq+OYiRAfNpnDlhVSUqO4emET/RJyqX4iqp+AvlHP+wRwPXZVj/7sB3L2QQZUDZ4WjAr1dykW+hGo8ZSCsq05ULZa8m4hl2gP7lUIKogGtqIg2oCkILqQUskxRcySo+p70RCvgxipYleidZyxxFvAYnIgXrE4iiEpzyoQflfLcd/VP4tEdA3n7tMdSBkK66pQpiiTh+GxmoWdRCimWX4sENIheW8UKTWNIz9m+Nh+lnsTkJRrQfD33jLhX/mf6sUtWozUSwB9+fztOTMaxvmtujcgIYrGp/F/NIiFsjcUW95/tGMBXn9rvNLLyaxwWT5muyF30KxELWoh9AP/IvVhx/8ZHz/NdeagQor69VCsxeYkEsiN3zjkm7SuXalhPVFEYltqrJ03EUoiQ505UOafML1QkJBOLLO4iIp2y/ePZhIG0YaJvLIZVHVa/kVjKQFBXnFr05oi1BNy4JO4Jn8hdUKz/u6G7cV7HUM5SSACIBDWXXXVyJonL/v4XzgLe1RC5A+5xFOrlQxCV5pTpClmpyF1EpAlphur/fWo/Lv/S0zgyarWpTdieu0h2BjVrbU+XLeMTuYtqmUKtBxaKUnZbRnX13NkzMInpRBov2jN3q8FzB9xXEIW6cBJEpTllxD3fwtPlxJtAnU0a2H5sHACcBR5inoRqUFPQGglgTBJ3EbmLqo2msOZE7OWu3BCaXo72A4A1fvlzEsvTTcbTCOmKa6GRSkKRO1FLVMdfzSIgIvfFLoX0doFMm9zxvcWiE/GUaSVUbRHj3LJm/Dz31R1R/NtvbcU7z+hxBKbckXumzr084t7gqZYRC28A1RO1A0BDSJ40RpE7Ud2cMr9QEbnHF7kUUk6gNoY0TMXTTgR8xBaxWNJAayTglCkm0iZaI7pL5BIpA0HNmsRzjb2mpxCYskfuSpkTqkGrWubHr/Xhbx7Z46ooqha/HbAmUYV0BfGUSZOYiKrnlIncExXz3DPv125bKqK/jRDveMqazi4i90TasG0ZOaFqulZTAjLWQLktApWxsk61F90t/+CB7RieSrg6RFZT5A5IXTnJliGqnJoX95HpBH7jH36BvYNTefcTkXva5Atq+/v3j+7BH31/e9H7y9PqxUpDYmFlWdzDuorrz7RW8DmrtwUtkQDGZ5NOm9m4XQsv43juZY4iVYWVrVIGcF95nNXb7HqsqYoid0Dq7UMzVIkqp+bFff/QNI6MzjpJylz4NeHKx8HhaUeEZZ7dN4L/fnPA6cZYCDlyF8lQsUTb0ZOzSBumM4npitO7cOBv3oWNPU1ojehIGdx5fiJtZvVid6plyhxFKgorS+sBgZwz+N3L1wLIdMashhp3mUz7BxJ3orqpeXEXU/TFCka5kBe+KGTNJNMmrvzyM7jhn3+d9djARAyzSSNrweRcyOIuFoaWryL2nJiyJjHZAi3sj1a7nayomImnjKxe7EJgyi00KitfjTvgjtyvO6MHD91+CT59zQYA1eW5A5kriUJdOAmi0tS+uM8WJ+6uyN3TP/1fnzmAX+0bce4/tvMEgMzi04JE2sDItPU+ha4UBHIViIjcAeDcFS1gDPj5rkErcvf46aKiRkxk8rNlOhqC+Pv3n4XfPHtpUWOZL6rCypZMBTKRu/h8zl7egm57ybpqE3eyZYhaoebFfTxmia0Q3Vy4xD3tjty/9ov9+OGrfc79+1/OrNYknzTkhT629427XuPg8LSz0r0gmTadRToAoC0adG6vbItg68pW/PQNq919yGOttNtR/tCU9Z5+CVUA+MDbljutDcqFUuaEqojcxZWNfLvqbJlgpisnQVQztS/uTuSeyLufy5axrZJ/++VBvHz4JKbiaZeIHxqeQXeTJZh7TmQWRu4ft4Q2pCvY0e9eMPlrvziA3//PV13bvP1S2qXIPRrUcM2mbhwctpKqYU9UvsbuYX5gSK6oqYyglDuhqqvWa4tumADQaZ+wKHIniPlR++JepOcuR+6xlAHOOf7hsbfwrV8dAgDXbNCx2RQuWmP1NXnrRKYKRyRYN/U0YcRj2fSPxzAZTzs9yIHs2akhXXVK6BqCGs5Y1ux6TKY1GkBHQ9CpAsoVuS8GilLeyF10zFzZHnW2rWyP4jfPXopL1nWU7X3ng7xAOUFUMzUv7iKhWsiW8SZU4ykTScN0yhHFySGeMhBLGVjf3Yj2aADfef4IfvbmAABLwAFrTU251zqQmW0q9vnuC0dwyRefcu0T0Ji0TJ7mEjNv5A4AG7obsNdO3FY0ci+zLXPVxm7cefV6/Om7NjrbApqCr37wXKyfZ7OzcnHGsias6YyiJUzrpxLVTe2L+xwSqkJYEynDEefDdvOuMfv5wuZpiei4+fzlODQyg2//+jAAoH8ijrZoAEuaQphOpJ2Ik3PuRPXHx6z/Xzs6ljUGXVVcpXQ90uLOfiskbehuxP7BKXDOEU9ll0IuFprCytZXBrA+lzuv3lATsz6v2tiNp/7w8qrpd0MQuaj+v6YCiIRqLGVgNpl2ldWdnEliy189jq99aIs9pT+AqXgaMUncRc+WmaSBB14+6iRAWyMBfPiClTgwNIMDw1b0fGIijiVNIaeSZSKWQmdjEJOxtPM6InIXIi+jq4pTStcQVF0VKH5R+bquBswkDfRPxG1bpjKR+4cuWIG3r68ue4QgiPzUvrjPpqAwwOTA6HQSkbbMIT1i2ynff+UY4ikTLREdR09aC097bRUAuOtHbzrRoxDwloju+Poj0wl0NgbRbNegT8SS6GwMYmAyI+R9trj3SxOgxPjkyL0hmJnGPpv0t1xE//V9g1NI2C0KKsHWVW3YuqqtIu9NEMT8qPlry4nZFHpbIwCyrZmfbLfKDHuaw0ikDWeJubgUucuY3GozC2QmEcltAEank2hvCKDFfh3R+2VAKpH8xjMHceM//woD45lton47oCqS526JeZddIeIn7ms6LU/+0MhMRSN3giBqj5oW97RhYiqRdkRwZNqqYImnDHzo317Ai4dOOtsTKRMttmDHUoazhFsuhLiLNgAzSQOjMwm0RwPOY8KfF/XvwnLZ3jeBtCnXt9virsmRu7WvODH5tURojwbQGNRwYHgaScOsWOROEETtUdNqIaLs81a0IqAq+NV+a5bp47sG8dyBUdxx1XpcsLrNEve0lVAN6QqGpxK+kbuMsGWEkPePxxBPmWiLBqXZo9aVwsBEHIwBS5pDvq/Vbk9e0lXmnABEy4Av3XQ2PnLhCpy3sjXreYwxrO6MYs+AVQ5ZqWoZgiBqj5oWdyGuy9siuPL0Lvxkez/ShomHXj+OJU0h3HHVevQ0hzAynbAWxNBUnLeyFS8dOukSd2/lQ0hXHCEVQn7ALklsbwigWUqoApZt0t0Ywtc/vAX//KFzsxp5tdmzLXVVQVPYHbkvaQ7hr99zJnTV/6tY1R7FHrvWvlJ17gRB1B41rRYi0dkc0fGec5dhZDqJR3eewNNvDeOGc5ZCURg6GoIYmUo6PdMvXN2O3ScmcezkrPM6y1vDrtcV0ToAx8oRFTPCKlEVhrHZJGaTaTy1exCXn9aJdV2NePdZS3HuCisK/+6t5+N/XbbGidYDmoJV7VE0BDVXn5l8rO6IOv3NKXInCKJYarpaZlNPE5749G9gSXMIKmPQFIav/eIA0ibHFad1AbB6qIsukEFNxYVr28EfB556awiqwmCYHO0NQYxMJ9HTHMKeE1OOoAOW5w4AB+w2AW3RABhjaAnrGJ9N4dEdJzCTNHDjOcuc59xw9lIYJsel6ztx6fpOfOEnOwFYkfu7zlyCy0/rLLqTo8gnWOOv6XMxQRCLSE2Le0hXsa6rwbm/aWkT3uibgKownLO8BYC7GVVPSwhn9TYjpCsYn01hVXsEh0dn0RzW8dsXr8KG7kZ86v7XHEEHsiN30aSrOaLjvheP4r4Xj2JlewQXrM6UCn7gbcvxgbctd+6L2ae6ysAYm1OL3s1LMy0K/GaxEgRB+FFXoeAW2w7ZvLTJ6Y/eITWjumhNO4K27w5YJZIBTUFzWMcfXLMB15/Vg97WsKuBlddzF3ZKwp60dPXGLnz/f12UtyVuc1iHprB5zWpc19WAH/3uxfjUVetpIhFBEEVT05G7l62rWvEfzx12VZ50Su1we21v/cLV7fj1/lE0h3V89MKVuNBuEgYA//Lh89AUznwsuqqgMahhKpFGUFOcxl+il8z/efdmdDX5V8kIbj5/BbasbJ13nfqWFa3OiYsgCKIY6krcL1jdjvZoANds7Ha2yb3Omd0f5cK17cDjQFNYw5+/e5PrNTYtbcp63eaIjqlEGh0NQec1vvux89E/EceK9kjBcTWHdbyNZngSBLGI1JW4dzYG8cqfX5O17R2buvE7l6x2tp3V24ymkIalLWHvS/jSGgmgbyzmqnC5uMpa0RIEQcjUlbj7oSoM9/zWVte2oKbisT+4rOi2rR+/dDUe23kC125eUo4hEgRBlJy6F/dc9DQXF7UDwI3nLHOVOhIEQVQ7ZauWYYxdxxh7izG2nzH22XK9D0EQBJFNWcSdMaYC+BqAdwLYBOCDjLFN+Z9FEARBlIpyRe7nA9jPOT/IOU8CuB/AjWV6L4IgCMJDucR9GYBj0v0+e5sDY+w2xtg2xti24eHhMg2DIAji1KRc4u43XZO77nB+D+d8K+d8a2dnZ5mGQRAEcWpSLnHvA7Bcut8LoL9M70UQBEF4KJe4vwxgPWNsNWMsAOBmAA+X6b0IgiAID2Wpc+ecpxljvwfgMQAqgG9xzneW470IgiCIbBjnvPBe5R4EY8MAjizgJToAjJRoOJWkXo4DoGOpVuhYqpP5HstKzrlv0rIqxH2hMMa2cc63Ft6zuqmX4wDoWKoVOpbqpBzHUlf93AmCIAgLEneCIIg6pF7E/Z5KD6BE1MtxAHQs1QodS3VS8mOpC8+dIAiCcFMvkTtBEAQhQeJOEARRh9S0uNd6z3jG2GHG2JuMsdcZY9vsbW2MsccZY/vs/6tyZWzG2LcYY0OMsR3StpxjZ4zdZX9PbzHGrq3MqP3JcSyfZ4wdt7+b1xlj75Ieq8pjYYwtZ4z9gjG2mzG2kzF2h7295r6XPMdSi99LiDH2EmNsu30sX7C3l/d74ZzX5D9YM18PAFgDIABgO4BNlR7XHI/hMIAOz7a/B/BZ+/ZnAfxdpceZY+yXAdgCYEehscPq6b8dQBDAavt7Uyt9DAWO5fMAPuOzb9UeC4AeAFvs240A9trjrbnvJc+x1OL3wgA02Ld1AC8CuLDc30stR+712jP+RgD32rfvBfCeyg0lN5zzXwI46dmca+w3Arifc57gnB8CsB/W91cV5DiWXFTtsXDOBzjnr9q3pwDshtVqu+a+lzzHkotqPhbOOZ+27+r2P44yfy+1LO4Fe8bXABzAzxljrzDGbrO3dXPOBwDrBw6gq2Kjmzu5xl6r39XvMcbesG0bcclcE8fCGFsF4FxYUWJNfy+eYwFq8HthjKmMsdcBDAF4nHNe9u+llsW9YM/4GuASzvkWWMsR3s4Yu6zSAyoTtfhd/QuAtQDOATAA4Mv29qo/FsZYA4AfAriTcz6Zb1efbdV+LDX5vXDODc75ObDan5/PGDsjz+4lOZZaFvea7xnPOe+3/x8C8GNYl16DjLEeALD/H6rcCOdMrrHX3HfFOR+0/yBNAP+GzGVxVR8LY0yHJYb3cc5/ZG+uye/F71hq9XsRcM7HATwN4DqU+XupZXGv6Z7xjLEoY6xR3AbwDgA7YB3DLfZutwB4qDIjnBe5xv4wgJsZY0HG2GoA6wG8VIHxFY34o7N5L6zvBqjiY2GMMQDfBLCbc/4V6aGa+15yHUuNfi+djLEW+3YYwNUA9qDc30ulM8kLzEK/C1YW/QCAz1V6PHMc+xpYGfHtAHaK8QNoB/AkgH32/22VHmuO8X8P1mVxClakcWu+sQP4nP09vQXgnZUefxHH8l0AbwJ4w/5j66n2YwHwdliX728AeN3+965a/F7yHEstfi9nAXjNHvMOAP/H3l7W74XaDxAEQdQhtWzLEARBEDkgcScIgqhDSNwJgiDqEBJ3giCIOoTEnSAIog4hcScIgqhDSNwJgiDqkP8fSGijqAmoc1sAAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -406,7 +419,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -416,8 +429,8 @@ "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31merror\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_37078/1459719159.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_episode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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/tmp/ipykernel_37078/3855001447.py\u001b[0m in \u001b[0;36mrun_episode\u001b[0;34m(max_steps_per_episode, render)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_steps_per_episode\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 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 7\u001b[0m \u001b[0maction_probs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0maction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_actions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maction_probs\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/tmp/ipykernel_44248/1459719159.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_episode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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/tmp/ipykernel_44248/3855001447.py\u001b[0m in \u001b[0;36mrun_episode\u001b[0;34m(max_steps_per_episode, render)\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_steps_per_episode\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 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 7\u001b[0m \u001b[0maction_probs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 8\u001b[0m \u001b[0maction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_actions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maction_probs\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", @@ -454,7 +467,7 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -479,7 +492,7 @@ }, { "cell_type": "code", - "execution_count": 104, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -512,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -594,7 +607,7 @@ }, { "cell_type": "code", - "execution_count": 99, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -610,7 +623,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ From 3498ad5dcdec14ae7d12863730741c528dafe977 Mon Sep 17 00:00:00 2001 From: anxieuse Date: Sun, 24 Jul 2022 19:47:56 +0300 Subject: [PATCH 06/11] Finish notebook. Update readme. --- .../22-DeepRL/CartPole-RL-Pytorch.ipynb | 477 ++++++++++-------- lessons/6-Other/22-DeepRL/README.md | 1 + 2 files changed, 263 insertions(+), 215 deletions(-) diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb index c6e59995..5cdf7305 100644 --- a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb +++ b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb @@ -6,7 +6,7 @@ "source": [ "# Training RL to do Cartpole Balancing\n", "\n", - "This notebooks is part of [AI for Beginners Curriculum](http://aka.ms/ai-beginners). It has been inspired by [this blog post](https://medium.com/swlh/policy-gradient-reinforcement-learning-with-keras-57ca6ed32555), [official TensorFlow documentation](https://www.tensorflow.org/tutorials/reinforcement_learning/actor_critic) and [this Keras RL example](https://keras.io/examples/rl/actor_critic_cartpole/).\n", + "This notebooks is part of [AI for Beginners Curriculum](http://aka.ms/ai-beginners). It has been inspired by [official PyTorch tutorial](https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html) and [this Cartpole Pytorch implementation](https://github.com/yc930401/Actor-Critic-pytorch).\n", "\n", "In this example, we will use RL to train a model to balance a pole on a cart that can move left and right on horizontal scale. We will use [OpenAI Gym](https://www.gymlibrary.ml/) environment to simulate the pole.\n", "\n", @@ -26,20 +26,15 @@ "text": [ "Defaulting to user installation because normal site-packages is not writeable\n", "Requirement already satisfied: gym in /home/leo/.local/lib/python3.10/site-packages (0.25.0)\n", - "Collecting pygame\n", - " Downloading pygame-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (21.9 MB)\n", - "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.9/21.9 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m00:01\u001b[0m00:01\u001b[0m\n", - "\u001b[?25hRequirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n", - "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", "Requirement already satisfied: gym-notices>=0.0.4 in /home/leo/.local/lib/python3.10/site-packages (from gym) (0.0.7)\n", - "Installing collected packages: pygame\n", - "Successfully installed pygame-2.1.2\n" + "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", + "Requirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n" ] } ], "source": [ "import sys\n", - "!{sys.executable} -m pip install gym pygame" + "!{sys.executable} -m pip install gym" ] }, { @@ -54,7 +49,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -78,8 +73,6 @@ ], "source": [ "import gym\n", - "import pygame\n", - "import tqdm\n", "\n", "env = gym.make(\"CartPole-v1\")\n", "\n", @@ -98,7 +91,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -115,17 +108,37 @@ "name": "stdout", "output_type": "stream", "text": [ - "[-0.01024284 0.23410203 -0.02896851 -0.2558368 ] -> 1.0\n", - "[-0.0055608 0.42962533 -0.03408524 -0.5575143 ] -> 1.0\n", - "[ 0.00303171 0.6252088 -0.04523553 -0.86073816] -> 1.0\n", - "[ 0.01553589 0.82091665 -0.06245029 -1.1672944 ] -> 1.0\n", - "[ 0.03195422 1.0167931 -0.08579618 -1.4788847 ] -> 1.0\n", - "[ 0.05229008 1.2128513 -0.11537387 -1.7970835 ] -> 1.0\n", - "[ 0.07654711 1.0191944 -0.15131554 -1.542374 ] -> 1.0\n", - "[ 0.096931 0.82618064 -0.18216303 -1.3004787 ] -> 1.0\n", - "[ 0.11345461 0.63377684 -0.2081726 -1.0699085 ] -> 1.0\n", - "[ 0.12613015 0.83095175 -0.22957078 -1.420047 ] -> 1.0\n", - "Total reward: 10.0\n" + "[-0.03742469 0.21191828 -0.01393784 -0.2686444 ] -> 1.0\n", + "[-0.03318632 0.40723634 -0.01931073 -0.56569064] -> 1.0\n", + "[-0.02504159 0.21239054 -0.03062454 -0.2791534 ] -> 1.0\n", + "[-0.02079378 0.01771855 -0.03620761 0.00371545] -> 1.0\n", + "[-0.02043941 -0.17686592 -0.0361333 0.28475815] -> 1.0\n", + "[-0.02397673 -0.3714544 -0.03043814 0.56582946] -> 1.0\n", + "[-0.03140582 -0.17591895 -0.01912155 0.2637147 ] -> 1.0\n", + "[-0.0349242 0.01947064 -0.01384726 -0.03493749] -> 1.0\n", + "[-0.03453479 0.2147884 -0.01454601 -0.331957 ] -> 1.0\n", + "[-0.03023902 0.01987648 -0.02118515 -0.04389644] -> 1.0\n", + "[-0.02984149 0.21529572 -0.02206307 -0.34318748] -> 1.0\n", + "[-0.02553557 0.4107245 -0.02892683 -0.6427453 ] -> 1.0\n", + "[-0.01732108 0.21601741 -0.04178173 -0.35931018] -> 1.0\n", + "[-0.01300073 0.41170764 -0.04896794 -0.6648696 ] -> 1.0\n", + "[-0.00476658 0.2172998 -0.06226533 -0.38799822] -> 1.0\n", + "[-4.2058565e-04 4.1324776e-01 -7.0025288e-02 -6.9964474e-01] -> 1.0\n", + "[ 0.00784437 0.21916293 -0.08401819 -0.42980158] -> 1.0\n", + "[ 0.01222763 0.41536793 -0.09261422 -0.74774325] -> 1.0\n", + "[ 0.02053499 0.22163741 -0.10756908 -0.4855825 ] -> 1.0\n", + "[ 0.02496774 0.02818474 -0.11728073 -0.2286451 ] -> 1.0\n", + "[ 0.02553143 -0.16508296 -0.12185363 0.02486342] -> 1.0\n", + "[ 0.02222977 0.03155665 -0.12135637 -0.30364525] -> 1.0\n", + "[ 0.0228609 0.22818024 -0.12742928 -0.6320028 ] -> 1.0\n", + "[ 0.02742451 0.03504482 -0.14006932 -0.38201147] -> 1.0\n", + "[ 0.02812541 -0.1578393 -0.14770955 -0.13656472] -> 1.0\n", + "[ 0.02496862 0.03905562 -0.15044086 -0.47195992] -> 1.0\n", + "[ 0.02574973 0.23594654 -0.15988004 -0.80802345] -> 1.0\n", + "[ 0.03046866 0.43285596 -0.17604052 -1.1464254 ] -> 1.0\n", + "[ 0.03912578 0.24041417 -0.19896902 -0.913713 ] -> 1.0\n", + "[ 0.04393407 0.43759024 -0.21724328 -1.2617537 ] -> 1.0\n", + "Total reward: 30.0\n" ] } ], @@ -139,9 +152,7 @@ " obs, rew, done, info = env.step(env.action_space.sample())\n", " total_reward += rew\n", " print(f\"{obs} -> {rew}\")\n", - "print(f\"Total reward: {total_reward}\")\n", - "\n", - "env.close()" + "print(f\"Total reward: {total_reward}\")" ] }, { @@ -167,35 +178,23 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", - "import tensorflow as tf\n", - "from tensorflow import keras\n", "import matplotlib.pyplot as plt\n", "import torch\n", "\n", "num_inputs = 4\n", "num_actions = 2\n", "\n", - "# model = torch.nn.Sequential(\n", - "# torch.nn.Linear(num_inputs, 2),\n", - "# torch.nn.ReLU(),\n", - "# torch.nn.Linear(2, num_actions)\n", - "# )\n", - "\n", "model = torch.nn.Sequential(\n", " torch.nn.Linear(num_inputs, 128, bias=False, dtype=torch.float32),\n", " torch.nn.ReLU(),\n", " torch.nn.Linear(128, num_actions, bias = False, dtype=torch.float32),\n", " torch.nn.Softmax(dim=1)\n", - ")\n", - "\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", - "# optimizer = torch.optim.SGD(model.parameters(), lr=0.01)\n", - "# optimizer = keras.optimizers.Adam(learning_rate=0.01)" + ")" ] }, { @@ -207,14 +206,13 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def run_episode(max_steps_per_episode = 10000,render=False): \n", " states, actions, probs, rewards = [],[],[],[]\n", " state = env.reset()\n", - " # print(state.dtype)\n", " for _ in range(max_steps_per_episode):\n", " if render:\n", " env.render()\n", @@ -240,19 +238,19 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Total reward: 24.0\n" + "Total reward: 35.0\n" ] } ], "source": [ - "s,a,p,r = run_episode()\n", + "s, a, p, r = run_episode()\n", "print(f\"Total reward: {np.sum(r)}\")" ] }, @@ -265,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -297,78 +295,50 @@ }, { "cell_type": "code", - "execution_count": 87, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "def train_on_batch4(states,actions,probs,rewards):\n", - " rewards = discounted_rewards(rewards)\n", - " probs = probs[np.arange(len(probs)),actions]\n", - " # probs = probs.reshape(-1,1)\n", - " rewards = rewards.reshape(-1,1)\n", - " probs = torch.from_numpy(probs)\n", - " rewards = torch.from_numpy(rewards)\n", - " loss = -torch.mean(torch.log(probs) * rewards)\n", - " optimizer.zero_grad()\n", - " loss.backward()\n", - " optimizer.step()\n", - " return loss.item()\n", - "\n", - "def train_on_batch2(states,target):\n", - " states = torch.from_numpy(states)\n", - " # target = target.reshape(-1,1)\n", - " target = torch.from_numpy(target)\n", - " y = model(states)\n", - " print(y)\n", - " loss = -torch.mean(torch.log(y) * target)\n", - " optimizer.zero_grad()\n", - " loss.backward()\n", - " optimizer.step()\n", - " return loss.item()\n", + "optimizer = torch.optim.Adam(model.parameters(), lr=0.01)\n", "\n", "def train_on_batch(x, y):\n", " x = torch.from_numpy(x)\n", " y = torch.from_numpy(y)\n", " optimizer.zero_grad()\n", " predictions = model(x)\n", - " loss = torch.nn.CrossEntropyLoss()(predictions, y) # (y, predictions)\n", + " loss = -torch.mean(torch.log(predictions) * y)\n", " loss.backward()\n", " optimizer.step()\n", - " return loss.item()\n", - " w.data.sub_(learning_rate * w.grad)\n", - " b.data.sub_(learning_rate * b.grad)\n", - " w.grad.zero_()\n", - " b.grad.zero_()\n", " return loss" ] }, { "cell_type": "code", - "execution_count": 88, + "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0 -> 25.0\n", - "100 -> 21.0\n", - "200 -> 7.0\n" + "0 -> 12.0\n", + "100 -> 117.0\n", + "200 -> 499.0\n" ] }, { "data": { "text/plain": [ - "[]" + "[]" ] }, - "execution_count": 88, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -390,7 +360,6 @@ " dr = discounted_rewards(rewards)\n", " gradients *= dr\n", " target = alpha*np.vstack([gradients])+probs\n", - " # loss = train_on_batch4(states,actions,probs,rewards)\n", " train_on_batch(states,target)\n", " history.append(np.sum(rewards))\n", " if epoch%100==0:\n", @@ -408,7 +377,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -420,29 +389,6 @@ "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", " deprecation(\n" ] - }, - { - "ename": "error", - "evalue": "display Surface quit", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31merror\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_41886/1459719159.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrun_episode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\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/tmp/ipykernel_41886/4189192208.py\u001b[0m in \u001b[0;36mrun_episode\u001b[0;34m(max_steps_per_episode, render)\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0m_\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmax_steps_per_episode\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 6\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 7\u001b[0;31m \u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\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 8\u001b[0m \u001b[0maction_probs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmodel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfrom_numpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mexpand_dims\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstate\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 9\u001b[0m \u001b[0maction\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrandom\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mchoice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_actions\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0maction_probs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdetach\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnumpy\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/order_enforcing.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 49\u001b[0m \u001b[0;34m\"set `disable_render_order_enforcing=True` on the OrderEnforcer wrapper.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 50\u001b[0m )\n\u001b[0;32m---> 51\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 52\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;34m@\u001b[0m\u001b[0mproperty\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 429\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 430\u001b[0m \u001b[0;34m\"\"\"Renders the environment.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 431\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 432\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/wrappers/env_checker.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 53\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0menv_render_passive_checker\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 54\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0menv\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrender\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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~/.local/lib/python3.10/site-packages/gym/core.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m 64\u001b[0m )\n\u001b[1;32m 65\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 66\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrender_func\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\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 67\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 68\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mrender\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36mrender\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_renders\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 216\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmode\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 218\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_render\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmode\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m\"human\"\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~/.local/lib/python3.10/site-packages/gym/envs/classic_control/cartpole.py\u001b[0m in \u001b[0;36m_render\u001b[0;34m(self, mode)\u001b[0m\n\u001b[1;32m 296\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 297\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mflip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 298\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscreen\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mblit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msurf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\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 299\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mmode\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m\"human\"\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 300\u001b[0m \u001b[0mpygame\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mevent\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpump\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;31merror\u001b[0m: display Surface quit" - ] } ], "source": [ @@ -466,53 +412,146 @@ }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 11, "metadata": {}, "outputs": [], "source": [ - "num_inputs = 4\n", - "num_actions = 2\n", - "num_hidden = 128\n", + "from itertools import count\n", + "import torch.nn.functional as F" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n", + "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", + " deprecation(\n" + ] + } + ], + "source": [ + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + "env = gym.make(\"CartPole-v1\")\n", "\n", - "inputs = keras.layers.Input(shape=(num_inputs,))\n", - "common = keras.layers.Dense(num_hidden, activation=\"relu\")(inputs)\n", - "action = keras.layers.Dense(num_actions, activation=\"softmax\")(common)\n", - "critic = keras.layers.Dense(1)(common)\n", + "state_size = env.observation_space.shape[0]\n", + "action_size = env.action_space.n\n", + "lr = 0.0001\n", "\n", - "model = keras.Model(inputs=inputs, outputs=[action, critic])" + "class Actor(torch.nn.Module):\n", + " def __init__(self, state_size, action_size):\n", + " super(Actor, self).__init__()\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + " self.linear1 = torch.nn.Linear(self.state_size, 128)\n", + " self.linear2 = torch.nn.Linear(128, 256)\n", + " self.linear3 = torch.nn.Linear(256, self.action_size)\n", + "\n", + " def forward(self, state):\n", + " output = F.relu(self.linear1(state))\n", + " output = F.relu(self.linear2(output))\n", + " output = self.linear3(output)\n", + " distribution = torch.distributions.Categorical(F.softmax(output, dim=-1))\n", + " return distribution\n", + "\n", + "\n", + "class Critic(torch.nn.Module):\n", + " def __init__(self, state_size, action_size):\n", + " super(Critic, self).__init__()\n", + " self.state_size = state_size\n", + " self.action_size = action_size\n", + " self.linear1 = torch.nn.Linear(self.state_size, 128)\n", + " self.linear2 = torch.nn.Linear(128, 256)\n", + " self.linear3 = torch.nn.Linear(256, 1)\n", + "\n", + " def forward(self, state):\n", + " output = F.relu(self.linear1(state))\n", + " output = F.relu(self.linear2(output))\n", + " value = self.linear3(output)\n", + " return value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "We would need to slightly modify our `run_episode` function to return also critic results:" + "We would need to slightly modify our `discounted_rewards` and `run_episode` functions:" ] }, { "cell_type": "code", - "execution_count": 104, + "execution_count": 13, "metadata": {}, "outputs": [], "source": [ - "def run_episode(max_steps_per_episode = 10000,render=False): \n", - " states, actions, probs, rewards, critic = [],[],[],[],[]\n", - " state = env.reset()\n", - " for _ in range(max_steps_per_episode):\n", - " if render:\n", + "def discounted_rewards(next_value, rewards, masks, gamma=0.99):\n", + " R = next_value\n", + " returns = []\n", + " for step in reversed(range(len(rewards))):\n", + " R = rewards[step] + gamma * R * masks[step]\n", + " returns.insert(0, R)\n", + " return returns\n", + "\n", + "def run_episode(actor, critic, n_iters):\n", + " optimizerA = torch.optim.Adam(actor.parameters())\n", + " optimizerC = torch.optim.Adam(critic.parameters())\n", + " for iter in range(n_iters):\n", + " state = env.reset()\n", + " log_probs = []\n", + " values = []\n", + " rewards = []\n", + " masks = []\n", + " entropy = 0\n", + " env.reset()\n", + "\n", + " for i in count():\n", " env.render()\n", - " action_probs, est_rew = model(np.expand_dims(state,0))\n", - " action = np.random.choice(num_actions, p=np.squeeze(action_probs[0]))\n", - " nstate, reward, done, info = env.step(action)\n", - " if done:\n", - " break\n", - " states.append(state)\n", - " actions.append(action)\n", - " probs.append(tf.math.log(action_probs[0,action]))\n", - " rewards.append(reward)\n", - " critic.append(est_rew[0,0])\n", - " state = nstate\n", - " return states, actions, probs, rewards, critic" + " state = torch.FloatTensor(state).to(device)\n", + " dist, value = actor(state), critic(state)\n", + "\n", + " action = dist.sample()\n", + " next_state, reward, done, _ = env.step(action.cpu().numpy())\n", + "\n", + " log_prob = dist.log_prob(action).unsqueeze(0)\n", + " entropy += dist.entropy().mean()\n", + "\n", + " log_probs.append(log_prob)\n", + " values.append(value)\n", + " rewards.append(torch.tensor([reward], dtype=torch.float, device=device))\n", + " masks.append(torch.tensor([1-done], dtype=torch.float, device=device))\n", + "\n", + " state = next_state\n", + "\n", + " if done:\n", + " print('Iteration: {}, Score: {}'.format(iter, i))\n", + " break\n", + "\n", + "\n", + " next_state = torch.FloatTensor(next_state).to(device)\n", + " next_value = critic(next_state)\n", + " returns = discounted_rewards(next_value, rewards, masks)\n", + "\n", + " log_probs = torch.cat(log_probs)\n", + " returns = torch.cat(returns).detach()\n", + " values = torch.cat(values)\n", + "\n", + " advantage = returns - values\n", + "\n", + " actor_loss = -(log_probs * advantage.detach()).mean()\n", + " critic_loss = advantage.pow(2).mean()\n", + "\n", + " optimizerA.zero_grad()\n", + " optimizerC.zero_grad()\n", + " actor_loss.backward()\n", + " critic_loss.backward()\n", + " optimizerA.step()\n", + " optimizerC.step()\n" ] }, { @@ -524,93 +563,101 @@ }, { "cell_type": "code", - "execution_count": 105, + "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "running reward: 5.82 at episode 10\n", - "running reward: 9.43 at episode 20\n", - "running reward: 10.30 at episode 30\n", - "running reward: 10.28 at episode 40\n", - "running reward: 11.00 at episode 50\n", - "running reward: 13.01 at episode 60\n", - "running reward: 21.78 at episode 70\n", - "running reward: 40.54 at episode 80\n", - "running reward: 73.70 at episode 90\n", - "running reward: 100.19 at episode 100\n", - "running reward: 159.20 at episode 110\n", - "Solved at episode 114!\n" + "Iteration: 0, Score: 31\n", + "Iteration: 1, Score: 17\n", + "Iteration: 2, Score: 11\n", + "Iteration: 3, Score: 11\n", + "Iteration: 4, Score: 13\n", + "Iteration: 5, Score: 23\n", + "Iteration: 6, Score: 13\n", + "Iteration: 7, Score: 16\n", + "Iteration: 8, Score: 17\n", + "Iteration: 9, Score: 10\n", + "Iteration: 10, Score: 34\n", + "Iteration: 11, Score: 16\n", + "Iteration: 12, Score: 17\n", + "Iteration: 13, Score: 26\n", + "Iteration: 14, Score: 15\n", + "Iteration: 15, Score: 15\n", + "Iteration: 16, Score: 16\n", + "Iteration: 17, Score: 14\n", + "Iteration: 18, Score: 29\n", + "Iteration: 19, Score: 16\n", + "Iteration: 20, Score: 19\n", + "Iteration: 21, Score: 20\n", + "Iteration: 22, Score: 20\n", + "Iteration: 23, Score: 26\n", + "Iteration: 24, Score: 10\n", + "Iteration: 25, Score: 16\n", + "Iteration: 26, Score: 39\n", + "Iteration: 27, Score: 16\n", + "Iteration: 28, Score: 36\n", + "Iteration: 29, Score: 15\n", + "Iteration: 30, Score: 9\n", + "Iteration: 31, Score: 24\n", + "Iteration: 32, Score: 11\n", + "Iteration: 33, Score: 26\n", + "Iteration: 34, Score: 12\n", + "Iteration: 35, Score: 20\n", + "Iteration: 36, Score: 14\n", + "Iteration: 37, Score: 36\n", + "Iteration: 38, Score: 19\n", + "Iteration: 39, Score: 27\n", + "Iteration: 40, Score: 27\n", + "Iteration: 41, Score: 19\n", + "Iteration: 42, Score: 14\n", + "Iteration: 43, Score: 23\n", + "Iteration: 44, Score: 14\n", + "Iteration: 45, Score: 39\n", + "Iteration: 46, Score: 25\n", + "Iteration: 47, Score: 24\n", + "Iteration: 48, Score: 62\n", + "Iteration: 49, Score: 144\n", + "Iteration: 50, Score: 60\n", + "Iteration: 51, Score: 11\n", + "Iteration: 52, Score: 21\n", + "Iteration: 53, Score: 33\n", + "Iteration: 54, Score: 30\n", + "Iteration: 55, Score: 64\n", + "Iteration: 56, Score: 30\n", + "Iteration: 57, Score: 14\n", + "Iteration: 58, Score: 50\n", + "Iteration: 59, Score: 42\n", + "Iteration: 60, Score: 15\n", + "Iteration: 61, Score: 56\n", + "Iteration: 62, Score: 24\n", + "Iteration: 63, Score: 31\n", + "Iteration: 64, Score: 60\n", + "Iteration: 65, Score: 38\n", + "Iteration: 66, Score: 43\n", + "Iteration: 67, Score: 31\n", + "Iteration: 68, Score: 68\n", + "Iteration: 69, Score: 26\n", + "Iteration: 70, Score: 110\n", + "Iteration: 71, Score: 14\n", + "Iteration: 72, Score: 57\n", + "Iteration: 73, Score: 45\n", + "Iteration: 74, Score: 17\n", + "Iteration: 75, Score: 22\n", + "Iteration: 76, Score: 71\n", + "Iteration: 77, Score: 54\n", + "Iteration: 78, Score: 54\n", + "Iteration: 79, Score: 46\n" ] } ], "source": [ - "optimizer = keras.optimizers.Adam(learning_rate=0.01)\n", - "huber_loss = keras.losses.Huber()\n", - "episode_count = 0\n", - "running_reward = 0\n", "\n", - "while True: # Run until solved\n", - " state = env.reset()\n", - " episode_reward = 0\n", - " with tf.GradientTape() as tape:\n", - " _,_,action_probs, rewards, critic_values = run_episode()\n", - " episode_reward = np.sum(rewards)\n", - " \n", - " # Update running reward to check condition for solving\n", - " running_reward = 0.05 * episode_reward + (1 - 0.05) * running_reward\n", - "\n", - " # Calculate discounted rewards that will be labels for our critic\n", - " dr = discounted_rewards(rewards)\n", - "\n", - " # Calculating loss values to update our network\n", - " actor_losses = []\n", - " critic_losses = []\n", - " for log_prob, value, rew in zip(action_probs, critic_values, dr):\n", - " # When we took the action with probability `log_prob`, we received discounted reward of `rew`,\n", - " # while critic predicted it to be `value` \n", - " # First we calculate actor loss, to make actor predict actions that lead to higher rewards\n", - " diff = rew - value\n", - " actor_losses.append(-log_prob * diff)\n", - "\n", - " # The critic loss is to minimize the difference between predicted reward `value` and actual\n", - " # discounted reward `rew`\n", - " critic_losses.append(\n", - " huber_loss(tf.expand_dims(value, 0), tf.expand_dims(rew, 0))\n", - " )\n", - "\n", - " # Backpropagation\n", - " loss_value = sum(actor_losses) + sum(critic_losses)\n", - " grads = tape.gradient(loss_value, model.trainable_variables)\n", - " optimizer.apply_gradients(zip(grads, model.trainable_variables))\n", - "\n", - " # Log details\n", - " episode_count += 1\n", - " if episode_count % 10 == 0:\n", - " template = \"running reward: {:.2f} at episode {}\"\n", - " print(template.format(running_reward, episode_count))\n", - "\n", - " if running_reward > 195: # Condition to consider the task solved\n", - " print(\"Solved at episode {}!\".format(episode_count))\n", - " break\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's run the episode and see how good our model is:" - ] - }, - { - "cell_type": "code", - "execution_count": 99, - "metadata": {}, - "outputs": [], - "source": [ - "_ = run_episode(render=True)" + "actor = Actor(state_size, action_size).to(device)\n", + "critic = Critic(state_size, action_size).to(device)\n", + "run_episode(actor, critic, n_iters=100)" ] }, { @@ -622,7 +669,7 @@ }, { "cell_type": "code", - "execution_count": 106, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ diff --git a/lessons/6-Other/22-DeepRL/README.md b/lessons/6-Other/22-DeepRL/README.md index f5c631d0..26e3f691 100644 --- a/lessons/6-Other/22-DeepRL/README.md +++ b/lessons/6-Other/22-DeepRL/README.md @@ -83,6 +83,7 @@ After running one of those algorithms, we can expect our CartPole to behave like Continue your learning in the following notebooks: * [RL in TensorFlow](CartPole-RL-TF.ipynb) +* [RL in PyTorch](CartPole-RL-PyTorch.ipynb) ## Other RL Tasks From 7890235bffb16e56e469d02ff777734ddca80662 Mon Sep 17 00:00:00 2001 From: anxieuse Date: Sun, 24 Jul 2022 19:48:48 +0300 Subject: [PATCH 07/11] Clear output. --- .../22-DeepRL/CartPole-RL-Pytorch.ipynb | 272 ++---------------- 1 file changed, 22 insertions(+), 250 deletions(-) diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb index 5cdf7305..f574cd45 100644 --- a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb +++ b/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb @@ -17,21 +17,9 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Defaulting to user installation because normal site-packages is not writeable\n", - "Requirement already satisfied: gym in /home/leo/.local/lib/python3.10/site-packages (0.25.0)\n", - "Requirement already satisfied: gym-notices>=0.0.4 in /home/leo/.local/lib/python3.10/site-packages (from gym) (0.0.7)\n", - "Requirement already satisfied: numpy>=1.18.0 in /usr/lib/python3/dist-packages (from gym) (1.21.5)\n", - "Requirement already satisfied: cloudpickle>=1.2.0 in /home/leo/.local/lib/python3.10/site-packages (from gym) (2.1.0)\n" - ] - } - ], + "outputs": [], "source": [ "import sys\n", "!{sys.executable} -m pip install gym" @@ -49,28 +37,9 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Action space: Discrete(2)\n", - "Observation space: Box([-4.8000002e+00 -3.4028235e+38 -4.1887903e-01 -3.4028235e+38], [4.8000002e+00 3.4028235e+38 4.1887903e-01 3.4028235e+38], (4,), float32)\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", - " deprecation(\n", - "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", - " deprecation(\n" - ] - } - ], + "outputs": [], "source": [ "import gym\n", "\n", @@ -91,57 +60,9 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", - "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", - "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", - " deprecation(\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "[-0.03742469 0.21191828 -0.01393784 -0.2686444 ] -> 1.0\n", - "[-0.03318632 0.40723634 -0.01931073 -0.56569064] -> 1.0\n", - "[-0.02504159 0.21239054 -0.03062454 -0.2791534 ] -> 1.0\n", - "[-0.02079378 0.01771855 -0.03620761 0.00371545] -> 1.0\n", - "[-0.02043941 -0.17686592 -0.0361333 0.28475815] -> 1.0\n", - "[-0.02397673 -0.3714544 -0.03043814 0.56582946] -> 1.0\n", - "[-0.03140582 -0.17591895 -0.01912155 0.2637147 ] -> 1.0\n", - "[-0.0349242 0.01947064 -0.01384726 -0.03493749] -> 1.0\n", - "[-0.03453479 0.2147884 -0.01454601 -0.331957 ] -> 1.0\n", - "[-0.03023902 0.01987648 -0.02118515 -0.04389644] -> 1.0\n", - "[-0.02984149 0.21529572 -0.02206307 -0.34318748] -> 1.0\n", - "[-0.02553557 0.4107245 -0.02892683 -0.6427453 ] -> 1.0\n", - "[-0.01732108 0.21601741 -0.04178173 -0.35931018] -> 1.0\n", - "[-0.01300073 0.41170764 -0.04896794 -0.6648696 ] -> 1.0\n", - "[-0.00476658 0.2172998 -0.06226533 -0.38799822] -> 1.0\n", - "[-4.2058565e-04 4.1324776e-01 -7.0025288e-02 -6.9964474e-01] -> 1.0\n", - "[ 0.00784437 0.21916293 -0.08401819 -0.42980158] -> 1.0\n", - "[ 0.01222763 0.41536793 -0.09261422 -0.74774325] -> 1.0\n", - "[ 0.02053499 0.22163741 -0.10756908 -0.4855825 ] -> 1.0\n", - "[ 0.02496774 0.02818474 -0.11728073 -0.2286451 ] -> 1.0\n", - "[ 0.02553143 -0.16508296 -0.12185363 0.02486342] -> 1.0\n", - "[ 0.02222977 0.03155665 -0.12135637 -0.30364525] -> 1.0\n", - "[ 0.0228609 0.22818024 -0.12742928 -0.6320028 ] -> 1.0\n", - "[ 0.02742451 0.03504482 -0.14006932 -0.38201147] -> 1.0\n", - "[ 0.02812541 -0.1578393 -0.14770955 -0.13656472] -> 1.0\n", - "[ 0.02496862 0.03905562 -0.15044086 -0.47195992] -> 1.0\n", - "[ 0.02574973 0.23594654 -0.15988004 -0.80802345] -> 1.0\n", - "[ 0.03046866 0.43285596 -0.17604052 -1.1464254 ] -> 1.0\n", - "[ 0.03912578 0.24041417 -0.19896902 -0.913713 ] -> 1.0\n", - "[ 0.04393407 0.43759024 -0.21724328 -1.2617537 ] -> 1.0\n", - "Total reward: 30.0\n" - ] - } - ], + "outputs": [], "source": [ "env.reset()\n", "\n", @@ -178,7 +99,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -206,7 +127,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -238,17 +159,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total reward: 35.0\n" - ] - } - ], + "outputs": [], "source": [ "s, a, p, r = run_episode()\n", "print(f\"Total reward: {np.sum(r)}\")" @@ -263,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -295,7 +208,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -314,41 +227,9 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0 -> 12.0\n", - "100 -> 117.0\n", - "200 -> 499.0\n" - ] - }, - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "alpha = 1e-4\n", "\n", @@ -377,20 +258,9 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:57: DeprecationWarning: \u001b[33mWARN: You are calling render method, but you didn't specified the argument render_mode at environment initialization. To maintain backward compatibility, the environment will render in human mode.\n", - "If you want to render in human mode, initialize the environment in this way: gym.make('EnvName', render_mode='human') and don't call the render method.\n", - "See here for more information: https://www.gymlibrary.ml/content/api/\u001b[0m\n", - " deprecation(\n" - ] - } - ], + "outputs": [], "source": [ "_ = run_episode(render=True)" ] @@ -412,7 +282,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -422,20 +292,9 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/leo/.local/lib/python3.10/site-packages/gym/core.py:329: DeprecationWarning: \u001b[33mWARN: Initializing wrapper in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", - " deprecation(\n", - "/home/leo/.local/lib/python3.10/site-packages/gym/wrappers/step_api_compatibility.py:39: DeprecationWarning: \u001b[33mWARN: Initializing environment in old step API which returns one bool instead of two. It is recommended to set `new_step_api=True` to use new step API. This will be the default behaviour in future.\u001b[0m\n", - " deprecation(\n" - ] - } - ], + "outputs": [], "source": [ "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "env = gym.make(\"CartPole-v1\")\n", @@ -486,7 +345,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -563,96 +422,9 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 0, Score: 31\n", - "Iteration: 1, Score: 17\n", - "Iteration: 2, Score: 11\n", - "Iteration: 3, Score: 11\n", - "Iteration: 4, Score: 13\n", - "Iteration: 5, Score: 23\n", - "Iteration: 6, Score: 13\n", - "Iteration: 7, Score: 16\n", - "Iteration: 8, Score: 17\n", - "Iteration: 9, Score: 10\n", - "Iteration: 10, Score: 34\n", - "Iteration: 11, Score: 16\n", - "Iteration: 12, Score: 17\n", - "Iteration: 13, Score: 26\n", - "Iteration: 14, Score: 15\n", - "Iteration: 15, Score: 15\n", - "Iteration: 16, Score: 16\n", - "Iteration: 17, Score: 14\n", - "Iteration: 18, Score: 29\n", - "Iteration: 19, Score: 16\n", - "Iteration: 20, Score: 19\n", - "Iteration: 21, Score: 20\n", - "Iteration: 22, Score: 20\n", - "Iteration: 23, Score: 26\n", - "Iteration: 24, Score: 10\n", - "Iteration: 25, Score: 16\n", - "Iteration: 26, Score: 39\n", - "Iteration: 27, Score: 16\n", - "Iteration: 28, Score: 36\n", - "Iteration: 29, Score: 15\n", - "Iteration: 30, Score: 9\n", - "Iteration: 31, Score: 24\n", - "Iteration: 32, Score: 11\n", - "Iteration: 33, Score: 26\n", - "Iteration: 34, Score: 12\n", - "Iteration: 35, Score: 20\n", - "Iteration: 36, Score: 14\n", - "Iteration: 37, Score: 36\n", - "Iteration: 38, Score: 19\n", - "Iteration: 39, Score: 27\n", - "Iteration: 40, Score: 27\n", - "Iteration: 41, Score: 19\n", - "Iteration: 42, Score: 14\n", - "Iteration: 43, Score: 23\n", - "Iteration: 44, Score: 14\n", - "Iteration: 45, Score: 39\n", - "Iteration: 46, Score: 25\n", - "Iteration: 47, Score: 24\n", - "Iteration: 48, Score: 62\n", - "Iteration: 49, Score: 144\n", - "Iteration: 50, Score: 60\n", - "Iteration: 51, Score: 11\n", - "Iteration: 52, Score: 21\n", - "Iteration: 53, Score: 33\n", - "Iteration: 54, Score: 30\n", - "Iteration: 55, Score: 64\n", - "Iteration: 56, Score: 30\n", - "Iteration: 57, Score: 14\n", - "Iteration: 58, Score: 50\n", - "Iteration: 59, Score: 42\n", - "Iteration: 60, Score: 15\n", - "Iteration: 61, Score: 56\n", - "Iteration: 62, Score: 24\n", - "Iteration: 63, Score: 31\n", - "Iteration: 64, Score: 60\n", - "Iteration: 65, Score: 38\n", - "Iteration: 66, Score: 43\n", - "Iteration: 67, Score: 31\n", - "Iteration: 68, Score: 68\n", - "Iteration: 69, Score: 26\n", - "Iteration: 70, Score: 110\n", - "Iteration: 71, Score: 14\n", - "Iteration: 72, Score: 57\n", - "Iteration: 73, Score: 45\n", - "Iteration: 74, Score: 17\n", - "Iteration: 75, Score: 22\n", - "Iteration: 76, Score: 71\n", - "Iteration: 77, Score: 54\n", - "Iteration: 78, Score: 54\n", - "Iteration: 79, Score: 46\n" - ] - } - ], + "outputs": [], "source": [ "\n", "actor = Actor(state_size, action_size).to(device)\n", From 6e2bf9cf375de1155428c046f24cb018524d9d09 Mon Sep 17 00:00:00 2001 From: anxieuse <64018836+anxieuse@users.noreply.github.com> Date: Sun, 24 Jul 2022 19:50:18 +0300 Subject: [PATCH 08/11] Rename CartPole-RL-Pytorch.ipynb to CartPole-RL-PyTorch.ipynb --- .../{CartPole-RL-Pytorch.ipynb => CartPole-RL-PyTorch.ipynb} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename lessons/6-Other/22-DeepRL/{CartPole-RL-Pytorch.ipynb => CartPole-RL-PyTorch.ipynb} (100%) diff --git a/lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb b/lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb similarity index 100% rename from lessons/6-Other/22-DeepRL/CartPole-RL-Pytorch.ipynb rename to lessons/6-Other/22-DeepRL/CartPole-RL-PyTorch.ipynb From cbe13e79333c5e70944f6330e70e58b80e7b20ea Mon Sep 17 00:00:00 2001 From: Dmitri Soshnikov Date: Mon, 25 Jul 2022 01:39:13 +0300 Subject: [PATCH 09/11] Add PyTorch RL to readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 899d6fe1..0629fa0b 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ For a gentle introduction to *AI in the Cloud* topics you may consider taking th 20Large Language Models, Prompt Programming and Few-Shot TasksTextPyTorch VIOther AI Techniques 21Genetic AlgorithmsTextNotebook -22Deep Reinforcement LearningTextTensorFlowLab +22Deep Reinforcement LearningTextPyTorchTensorFlowLab 23Multi-Agent SystemsText VIIAI Ethics 24AI Ethics and Responsible AITextMS Learn: Responsible AI Principles From dbc5db0fcdef825e5a66cbadc531b3f0863141e4 Mon Sep 17 00:00:00 2001 From: Dmitri Soshnikov Date: Mon, 25 Jul 2022 01:40:55 +0300 Subject: [PATCH 10/11] Correct readme.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0629fa0b..3a418fee 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ For a gentle introduction to *AI in the Cloud* topics you may consider taking th 20Large Language Models, Prompt Programming and Few-Shot TasksTextPyTorch VIOther AI Techniques 21Genetic AlgorithmsTextNotebook -22Deep Reinforcement LearningTextPyTorchTensorFlowLab +22Deep Reinforcement LearningTextPyTorchTensorFlowLab 23Multi-Agent SystemsText VIIAI Ethics 24AI Ethics and Responsible AITextMS Learn: Responsible AI Principles From 5979bb118e35d1e3e4b016733a42e2165964659a Mon Sep 17 00:00:00 2001 From: Prianikq <71663981+Prianikq@users.noreply.github.com> Date: Wed, 27 Jul 2022 19:01:43 +0300 Subject: [PATCH 11/11] Added PyTorch Lightning example --- .../05-Frameworks/IntroPyTorch.ipynb | 12282 +++++++++++++++- 1 file changed, 12217 insertions(+), 65 deletions(-) diff --git a/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb b/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb index 06cf206f..f96fec1b 100644 --- a/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb +++ b/lessons/3-NeuralNetworks/05-Frameworks/IntroPyTorch.ipynb @@ -52,26 +52,29 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", - "height": 35 + "height": 36 }, "id": "xwqVx9-bwHl3", - "outputId": "38564a63-0567-4406-ee1a-1d3618f27351", + "outputId": "7fdf1bd8-a54b-4eb0-cb09-dbb81a42d99c", "tags": [] }, "outputs": [ { + "output_type": "execute_result", "data": { "text/plain": [ - "'1.8.2'" - ] + "'1.11.0+cu113'" + ], + "application/vnd.google.colaboratory.intrinsic+json": { + "type": "string" + } }, - "execution_count": 1, "metadata": {}, - "output_type": "execute_result" + "execution_count": 10 } ], "source": [ @@ -108,32 +111,32 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ybpnk08HwHl4", - "outputId": "54e2c89b-b373-4389-b285-49b0510be931", + "outputId": "377e6e25-bc5a-4d2e-fe8e-17dac1d20c2c", "trusted": true }, "outputs": [ { - "name": "stdout", "output_type": "stream", + "name": "stdout", "text": [ "tensor([[1, 2],\n", " [3, 4]])\n", - "tensor([[ 1.3577, 0.7550, -1.7503],\n", - " [-0.7006, 0.1918, -0.2571],\n", - " [ 0.2964, -0.3188, 0.4575],\n", - " [-0.1524, 1.3446, 0.7218],\n", - " [-1.4642, -1.3296, -0.5098],\n", - " [ 2.2282, 0.5065, 0.6176],\n", - " [-0.3013, 0.9485, 0.1195],\n", - " [ 1.0261, 1.5614, -0.1013],\n", - " [-0.2211, -0.4294, -2.2319],\n", - " [ 1.4257, -0.6976, 0.0656]])\n" + "tensor([[ 0.8995, -1.6137, 1.4489],\n", + " [-0.2796, -2.1443, -2.4618],\n", + " [-0.2358, -0.4249, -0.0716],\n", + " [-0.1267, -0.6382, 0.0593],\n", + " [-0.4956, 1.7054, 0.3874],\n", + " [ 1.3479, -1.6329, 0.2793],\n", + " [ 1.1211, -1.5430, 0.7186],\n", + " [-1.5197, 0.5559, -1.6421],\n", + " [ 0.1900, -0.4175, -0.3922],\n", + " [ 1.8994, 0.1497, -0.7039]])\n" ] } ], @@ -155,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -200,7 +203,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -236,7 +239,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -272,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -318,7 +321,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -358,7 +361,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -399,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -448,7 +451,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -500,7 +503,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": null, "metadata": { "id": "nDw5mV9KEeOa" }, @@ -522,7 +525,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -576,7 +579,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": null, "metadata": { "id": "j723455WwHl7", "trusted": true @@ -592,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -650,7 +653,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": null, "metadata": { "id": "QxhI4GlB6aiH" }, @@ -689,7 +692,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": null, "metadata": { "id": "-991PErM7fJU" }, @@ -717,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": null, "metadata": { "id": "nOuu0qpx-wAp" }, @@ -731,7 +734,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -767,14 +770,16 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "JPO9xs4bToPb" + }, "source": [ "We now have obtained optimized parameters $W$ and $b$. Note that their values are similar to the original values used when generating the dataset ($W=2, b=1$)" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -800,7 +805,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -854,7 +859,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -929,7 +934,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": null, "metadata": { "id": "j0OTPkGpwHl7", "scrolled": false, @@ -952,7 +957,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": null, "metadata": { "id": "c-_BjSHPwHl8", "scrolled": false, @@ -981,7 +986,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1035,7 +1040,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": null, "metadata": { "id": "J1KaixW-cMWJ" }, @@ -1079,7 +1084,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": null, "metadata": { "id": "kdDxWeCqwHl8", "trusted": true @@ -1110,17 +1115,18 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "PfyqjVb2wHl8", - "outputId": "b3a685a9-304c-4e7e-adf9-2858cc47c3a5", + "outputId": "f9f5af23-005e-42e0-928b-9890b6c4e0cf", "trusted": true }, "outputs": [ { + "output_type": "execute_result", "data": { "text/plain": [ "[tensor([[ 1.5442, 2.5290],\n", @@ -1142,9 +1148,8 @@ " tensor([1., 0., 0., 0., 0., 0., 1., 0., 1., 0., 0., 0., 1., 1., 1., 1.])]" ] }, - "execution_count": 28, "metadata": {}, - "output_type": "execute_result" + "execution_count": 14 } ], "source": [ @@ -1166,7 +1171,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1206,14 +1211,16 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "nnyEjYAWToPd" + }, "source": [ "Obtained parameters:" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1246,7 +1253,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", @@ -1293,7 +1300,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1320,7 +1327,9 @@ }, { "cell_type": "markdown", - "metadata": {}, + "metadata": { + "id": "Fv7JxC3uToPe" + }, "source": [ "Let's explain what is going on here:\n", "* `pred` is the vector of predicted probabilities for the whole validation dataset. We compute it by running original validation data `valid_x` through our network, and applying `sigmoid` to get probabilities.\n", @@ -1357,7 +1366,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1395,7 +1404,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": null, "metadata": { "id": "B4AxyrFMozh0" }, @@ -1415,7 +1424,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1469,7 +1478,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1526,7 +1535,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1563,7 +1572,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1606,7 +1615,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1647,7 +1656,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" @@ -1690,7 +1699,1202 @@ }, { "cell_type": "markdown", - "metadata": {}, + "source": [ + "## Defining a Network as PyTorch Lightning Module" + ], + "metadata": { + "id": "7THJ0lhITxDi" + } + }, + { + "cell_type": "markdown", + "source": [ + "Let's wrap the written PyTorch model code in PyTorch Lightining module. This allows to work with your model more conveniently and flexibly using various Lightining methods for training and accuracy testing." + ], + "metadata": { + "id": "bPpYZFQAXNMV" + } + }, + { + "cell_type": "markdown", + "source": [ + "First we need to install and import PyTorch Lightining. This can be done with the command\n", + "\n", + "```\n", + "pip install pytorch-lightning\n", + "```\n", + "or\n", + "```\n", + "conda install -c conda-forge pytorch-lightning\n", + "```" + ], + "metadata": { + "id": "Crqwpx6gZUm3" + } + }, + { + "cell_type": "code", + "source": [ + "import pytorch_lightning as pl" + ], + "metadata": { + "id": "_bBSXSELVlRK" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "In order for our code to work in Lightning, we need to do the following:\n", + "\n", + "1. Create a subclass of `pl.LightningModule` and add to it model architecture in `__init__` method and `forward` pass method.\n", + "2. Move used optimizer to the `configure_optimizers()` method.\n", + "3. Define the training and validation process in methods `training_step` and `validation_step` respectively.\n", + "4. (Optional) Implement a testing (`test_step` method) and prediction process (`predict_step` method).\n", + "\n", + "It should also be understood that PyTorch Lightning has a built-in translation of models to different devices, depending on where the incoming data from the `DataLoaders` is located. Therefore, all calls `.cuda()` or `.to(device)` should be removed from the code." + ], + "metadata": { + "id": "_Aaz4FNpZjqL" + } + }, + { + "cell_type": "code", + "source": [ + "class MyNetPL(pl.LightningModule):\n", + " def __init__(self, hidden_size = 10, func = torch.nn.Sigmoid()):\n", + " super().__init__()\n", + " self.fc1 = torch.nn.Linear(2,hidden_size)\n", + " self.func = func\n", + " self.fc2 = torch.nn.Linear(hidden_size,1)\n", + "\n", + " self.val_epoch_num = 0 # for logging\n", + "\n", + " def forward(self, x):\n", + " x = self.fc1(x)\n", + " x = self.func(x)\n", + " x = self.fc2(x)\n", + " return x\n", + "\n", + " def training_step(self, batch, batch_nb):\n", + " x, y = batch\n", + " y_res = self(x).view(-1)\n", + " loss = torch.nn.functional.binary_cross_entropy_with_logits(y_res, y)\n", + " return loss\n", + "\n", + " def configure_optimizers(self):\n", + " optimizer = torch.optim.SGD(self.parameters(), lr = 0.005)\n", + " return optimizer\n", + " \n", + " def validation_step(self, batch, batch_nb):\n", + " x, y = batch\n", + " y_res = self(x).view(-1)\n", + " val_loss = torch.nn.functional.binary_cross_entropy_with_logits(y_res, y)\n", + " print(\"Epoch \", self.val_epoch_num, \": val loss = \", val_loss.item(), \" val acc = \",((torch.sigmoid(y_res.flatten())>0.5).float()==y).float().mean().item(), sep = \"\")\n", + " self.val_epoch_num += 1" + ], + "metadata": { + "id": "0vp2ROQ9UHeE" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Let's also add validation `Dataset` and `DataLoader`:" + ], + "metadata": { + "id": "tuWOgQabncMG" + } + }, + { + "cell_type": "code", + "source": [ + "valid_dataset = torch.utils.data.TensorDataset(torch.tensor(valid_x),torch.tensor(valid_labels,dtype=torch.float32))\n", + "valid_dataloader = torch.utils.data.DataLoader(valid_dataset, batch_size = 16)" + ], + "metadata": { + "id": "h3bAMM8RVckT" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "Now our model is ready for training. In Pytorch Lightning, this process is implemented through an object of the `Trainer` class, which essentially \"mixes\" the model with any datasets." + ], + "metadata": { + "id": "yj0Cd6OOnoyy" + } + }, + { + "cell_type": "code", + "source": [ + "net = MyNetPL(func=torch.nn.ReLU())\n", + "trainer = pl.Trainer(max_epochs = 30, log_every_n_steps = 1, accelerator='gpu', devices=1)\n", + "trainer.fit(model = net, train_dataloaders = dataloader, val_dataloaders = valid_dataloader)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 864, + "referenced_widgets": [ + "1657a223e5524ca682ea081b9e4addea", + "4f111fbdbc3440f783adc3df3df46494", + "cc048e2c91ce48258934ef577cf229d1", + "d3c01678943341c5b814430145692a69", + "9b55455cc9b541ef9634be2d790bb831", + "15d7c09876074047afac1e41cb9ac121", + "90137ba0ff814f71ad964f45d704ee89", + "0919c9545ef64ed1a65f3f489d51cccc", + "12cad77b8027415b82937ad33f793a63", + "25ff491870eb4bf6ad4a320e5c99bd31", + "238a42e032c34b9183e1e6a75f886da0", + "a4fb1b2e0f8b4346bbde1b949dbce0fd", + "18876b0e4f0f4b21ad1802f36637c067", + "92ef8d6e24604b2f895e3876dc9996ee", + "d4bc1057a59c4666a7dc0f9627c45901", + "3355e659c40e4e42bbad6c8690f5055e", + "0ab539031d80478685164ce470246d57", + "271fdffaef854a67b294c0ccdfb6fe91", + "0bd01bf4a9954fe2ba2760d10b9d7971", + "bd5250b6001c4cd282a25d498ee4e673", + "21538a0928e04ca08562dda0322385a1", + "5301b071e422430e9bff6cd23c2853b5", + "3e63509c89304bccb2c7371ec5e7ca62", + "ff10f2e47185425eaa1229be76092ee5", + "03cbfa5d29d548498035ba7bf7e0b659", + "561c5a5b02894df2a66b2991877e1231", + "569851b1958f49e281770b65bf78b60a", + "2b49a1491afb4946975395080b9117e9", + "79737a473e0b4b59bb4d6f190d92b94c", + "d8a3af0177fc4707b928629952396ad5", + "34852db50a91487795451f76b57da6b2", + "046c75ea1598416497c2ef218d1f268a", + "16e49dd0c2094a87a398416bac89ef69", + "e6c4eb3c595c43ef9722654dcfabfcc6", + "62f1b983740e47cd8664eccafc926e32", + "9861f59fd71a4e3c879858ef8b4b40fb", + "d9960d4519ec42bcb8678359b278c7b5", + "118e90e145994312897584085642c03b", + "db156fc5cbfd426e8460232b8f760733", + "e68df50870c5469a9dc86346d7ad9a4e", + "c89c5ec1ca1549cbbc7dd57b3672d74e", + "84e423587f4244938844cd74d2f86dc0", + "a31f6ff7fbc54df5bd1745816b2176f8", + "d6d02c0963c54a6bbbd6753f3c3e6503", + "69eedcfbe5c14a4cbe119364ce973690", + "72eb0dd423f4486b9a63f100670e03a5", + "4b7e9cfd822d48db848319a78548b0db", + "a52a0bc61ed14e0d93f0c4768687fee8", + "d1c60311d2bc4f4c826da5c7a634202d", + "08426ffc99c44d6290ef9cb9363a5737", + "161c5cea83dc42f6b87c904303dad688", + "79c04563af9646dd9a7e82db11894c24", + "235b2edd90bf4d1383b5a0d49905a241", + "24ead65d14c54fbcb174b06b7dadbcc5", + "20b85c48964d4c85890f8a0ebc04dd1d", + "7287a9afffb5470c920734840c5d72fe", + "ae3232c87db9469fa19cb59f78be2f57", + "e2a292f657c342569a080a3d9e25852b", + "f56858c5843d446286d416e9bbc7e7c8", + "6ddb0e10ea78488aa8358ec3a7bb0780", + "df7172162b6542f08662614b084d7521", + "ca6221d153a94b4898e5a1b5043b843d", + "54e9275a7f074eeca9a5995653d16036", + "4454290d993f4350a6dc4e464c61c0a9", + "6e5f99b5aec44fff9d4cecb28dd59188", + "39ae0b5e8b8a41b79ea1a209f2aacc87", + "08a690202bbe48bf9434a3354cb560c1", + "7311cc83255f46ffa31f461c485111b5", + "6f484c87ff3e4582aad771a703151f2b", + "ab9c536f94b84922877071f760111f55", + "427f04eec07f4d94a010664b12139f0f", + "cd7f66fdfe224994a31a3c985cb7a1de", + "b74e5502e4e54847b1191b7b0304f66a", + "dbfcbe2df4f74df594606dd0bb6873b4", + "ac62ad773e7a4694b57dd8c71b81f23d", + "f20824d8dfc84640bee1cdc9b7277caa", + "fd9a33d8f6ad459594d9939fd635730c", + "e2900fe753754ede94abc1847dda4d5c", + "0c1832e2d1ab4ca4a882d76f1d896c02", + "10a5f4a004bc4a81a485604f67bab642", + "fe260f7a9c66497cad723b44c1addbe7", + "ef7d39cc71074a7faa299da2621abe03", + "3f58e2aea843451b83e3aba8c1eefc74", + "fd38fbd015e6471392cfee4464e6370e", + "a95c45bcb67f4a569fb9f88af8108fde", + "bf3bf33f0c474b54a4b472a4a7626da7", + "afcc785f069b433ba8747b01e5840763", + "ec27c6b290be4adc8d2df034fd3bb143", + "0d2b1608b987468791e1a7ffedfd0079", + "016a5fc3757c480b9c905867c4892864", + "c7c7cc7d1c0647abb11ade78ef451007", + "d0e4462fee034a67b3682e27d5cb6e27", + "ac3a80de351440e7a279f3efce37e430", + "d6204036abba495785a3674ea841746c", + "3df8a54d12604c1ebe7229f88d5811bf", + "5236935ed5874a0986f953ee21477be9", + "1355273e058041efa299727d17949855", + "68acf21436374d5eb393ada1b2298e28", + "57d592b9768545869080fc2505e5a770", + "b650b7b4420541298ea255d741f8a518", + "3d0949a3f0504bf0802082ec86ce8e17", + "3f71570951c94959ba0eea6692b2d671", + "15f97cc51d594cca91dc43cbf019ffbc", + "23e7ec609ed649e29f2c274bd76ee3dd", + "47af905082094cd5b8a4cb4ab02ec431", + "87aa955f31054e7da3fc1c93a8e1f335", + "2f79b8377db841b5b14650ed14d7c5cb", + "0560fb1045034e4b865a199dc0fba636", + "e35861641d664e2ea8140ff988b65576", + "4d683f5e6ccb4328bfd33829e05e2e35", + "8eb84c34c1a54dad903371885051bef2", + "424d7efa1e1d4c79a5a9e1e0eea97bc3", + "0d6619a581884191a205c9e1b91b3790", + "035553232bbc40c789c35bdcd78d7b88", + "6648bcb6b46e4dc893654f139a7b73df", + "d4302a261e334336b71459e74fee95a4", + "5ae44fb9f67b40bb8261defbc07bf689", + "5097652e46cf4d1d88933903e37387dd", + "82e9918bb5b648058fe32b19b0ab7059", + "28913620d1dc406db67ff7876db5d414", + "2e5b502d9c0e47449a6e7b5095d5b6ec", + "044439bda84b4d24935a46be5c14ca02", + "3aa9793c2771435b892c70a5ca86a372", + "490c7d65abaf46a1a6f781395f846b83", + "b3ad1dfdecf649988c4060e76f0c9164", + "6f0bd0ab209348d2a76ae70cfbfa47ff", + "95dc3afa44174e9f8e715dab0a3dfd7d", + "d2f7362dee2b4100930a7a1f288e649e", + "c92364fa157f4212a9a9811925605382", + "aec5035eeab04627b3d61c05bf53ef4f", + "035f91d8fd1d4ff6932f9d01aa334f3a", + "8a56ba2f8d384c0fb285ac9cf7b5e421", + "675520bc1a7e4aca9e17f7410d6380cf", + "9b19f80d8f5648b9b575515d2f8085f8", + "c0065e721652472996f40eb47071589c", + "b236adc069d049c288d81702cc0dd62c", + "5eefa033732941b39bf3bfa62fd9185e", + "5aefc7d586ae4be4aa33c1383f494b9f", + "5e0c000321a64c28a81a1e167d88bd22", + "438661c89c034656b86e936360474b24", + "ed1fca3c73ad446db422e30f5ec44b0e", + "4421eb7516c04af1972c6f5df5315bc4", + "6d52bfaf6be54d90a53e1fb465dfaf7d", + "3cd65d1d3cd0438ea94b8c4d964bc65c", + "a4653a04856c47a0b1907d864e3f1a15", + "02e9029cbe8a4db0b6ef00c4df0ae302", + "258629893fa14d178577ee19efdff31e", + "fe82872822b749ae87fac7eb4df0791e", + "07655ba9152647df80ad1efe4b117135", + "b6e87d03766a4185ad2c4d716aa456d7", + "c6f304a0747d40fea9571f99f5289986", + "5722085f090c4851a1cde4daf7db77df", + "7aed32af8b134b56a041ebb25c32640c", + "a723ce7408e14b63b6d4311051dca322", + "3a9c42437ab34710a3fd3a75cf9cfac4", + "80a0d8b6e16b4ceb98bb8911b0fa596c", + "9310b29cec49404b8dfc9feb8e5bac9f", + "44341f0cb29440a2bef7f711517a01ff", + "9739202e0849427d9fe61210e231837c", + "c43c9d3bbacf478b9fafc076ea58ad29", + "abfa8dc54e654a61b93ec9a15f5fe67e", + "979514f924c6441098f7b7231ae15900", + "bbef9cf5cf2d42adb650caba73919e06", + "3b8da849443f401bb51a038f5bb82ad9", + "36f417b9e7e247b68e3bb18519af98b4", + "71643356b8954af5ab6cdf03df2825e3", + "8d50b1a8e0ce4d018fe4a51240ddb35d", + "654d72723ed8474ca360102e896331d5", + "049d95dcfbb34e84a0060919fdb8f454", + "54955fa5560041c09f847a3afb39eecd", + "34b2c78ef1254853a377efc6fead2e95", + "4eda8d394bff4fbf98bc086737c75219", + "4ca134b9e1df4136bd0d2660a82960cf", + "87cf68c4e8a245c686fbbe439f176b87", + "6009ded338de4e5b9a204e6f1243bf05", + "f01a1f50e0a74faaacc35695590cea30", + "a76a4846aa11422785c1d0218c94b827", + "373e3dd821954f33becb388c82ffebc2", + "9f532b8a64b3410f9a2e2a99755dac55", + "b457e104ad194032ba15070b89d42e6e", + "81fc3a7b94554a1980724ac6092fc88a", + "68908006e8eb4b31a55d1c0be51453bd", + "8f5c49525abe4d7a9ea746db18135f26", + "70eb5ab30ffb4b5bbe58832c6386a536", + "970d8a7e2b5c47a5bff8a036cadc9b84", + "3ad7904ba48048bfa4b7a866cf4aa4a6", + "a20c551e949842f881c6def753eb81ed", + "67e1192ed6774aa9bb17f1d5a27695f9", + "5aea05cbd78843bcb2a9d3df9e3abefd", + "4693d306ecaf44f2b6b505ca072e22bb", + "2e46fda9b283487ba4f118bad5a880c6", + "55a8b90a0a6c44eda0bedd43fda69c41", + "a7e64bcbd09644a198b9f1c7d8a8d1c6", + "87a7b1169e1f404d81fddc56c0ba2145", + "921d621e89a64e1aab62397758e26592", + "da9024d63c56460b9ca061d5cd1bb985", + "503e7b032b3d44d49e15587060b25e56", + "1361830025974670a174df70957feabc", + "6adb0fc2977b41e7bce4e81909c6c931", + "ab9b58483e0145aab2f22a8bbf0422cf", + "6725fd421a9344feb552ee1a1ce84dda", + "0d712617055b45a3b6f5783dfe6a5842", + "1c5fdfd620eb47c28dcb91ff04ea6155", + "db2185de343a4f76a2b2ecfad4e658ad", + "bb1efececaef471c90c3bc9cc2fb5ac7", + "7a49920285474268b1cb3f57e73a450e", + "b0e5dea19289434ebe98002e3cfe6086", + "92a8cbc6f6344e49a455c9e3df2c552f", + "b41986dd9910458e95ddfff0b1a508d1", + "f2fb2d0dfed54272abbc0560a467c97e", + "08c1e9701d0b4f2e8b34027af81ab586", + "1ea2399f27404d5cbfffd68efbd472fc", + "affc022e069a41af877cf9fbe3889012", + "65490339b12e47d6b35cbf4a16d1bfeb", + "10247683189c43b6abf3df0b7818bcd9", + "10b0f64c86714778919d55c643550ff5", + "a702202230484af5b32a4653f0eac288", + "5e38b9f21ce04bcc820f711c9c47678d", + "2771553d801f4961ad94344e2d5caacd", + "134808b58f1f42b09c4b2353a94bbb0e", + "02bda666a850468086acea36156397c7", + "9abed88d016f4822bf19e71dcf997571", + "6ea72db4ae8b45ec96508a51c21b6974", + "7baafb061feb455e9b37622dc9a4c724", + "ba06f72e44694ecd9fa51e984b4dc8bf", + "136c4f60a8734c578129fd843ee7ab5f", + "28f475b19b08458c81ee0cfb11c9d9c3", + "604fd938ec7d41f285e1f1b9cb9c6eac", + "07bb79027e20401e84d02a33a628b397", + "288ab1d98c7a4e21af429773a9fe3534", + "19a6a91b0d4e46d9be72aee530a974ce", + "0de2ddf45f754c5991a62ae8e822c4b7", + "a6fb10bec45f4f1a9243b466eb95c017", + "44ce5ef7a8af4fb291da012fa53e0c5a", + "9c40cc6348cb4bcfb59e0457399cd72b", + "3f9455a7a52947638545cff45b1e807d", + "22550ebc70ef4671a65bb1a041c9def7", + "67f022dd80234c08849906615a1191dc", + "2e5e169b1ad64407ad8c3494a70b314f", + "277e7a95b41447b4a52824c212e6fa7c", + "d07c7bcf6a934fae9e015be66a1f860d", + "c5e484430b0843689d7cfb434d0aa8da", + "814e2827e8d647069f05c5b4c89deb52", + "0c8b616aecfd4e5e80a0b7c3aabd290f", + "e0f4261c913d42c9a7dcdf79a9914d4a", + "80a819740bb44d589858d4780b100255", + "5caf7d1fdd564dc2bebe48dd918d9c8f", + "10ab820d989c44b98a8bde85780c3deb", + "7e787283e4434da6b5d3f9245745547c", + "b8c86419aa4f43a3a0c9443f23298c0a", + "0270acbb7ed94626adc932afa0655eaa", + "ab0b7e4f05b24205b5e4b9e975cb8e71", + "70c85ee15c0c4427b6538acbbd0de481", + "b38c3345647c4db68a2321e3a4d9e215", + "8c7b852936ca400aa04ec3f95e9afcb3", + "3099fea4c655407582c196176cc2108c", + "a5cb3ea273f9454fbb9dcd8877f2aa33", + "b4a722f06b614e9cbb259c8fa1e9f664", + "228014c8ccd543a6af4c554cf60137bf", + "6e7ea147348f40c8acc919af41047189", + "7c315c5b62e14d2c9af6fecf536d8df5", + "a9e1b08f5ff24e1b8d652cd9ad649b54", + "df097748d93e4254be82e6dae9696167", + "ac30029d30c34fd58a7f3d1826d94d6b", + "6daac3cee4b9409cba48efa0d06bee24", + "db45da82b3594a1db11322289253a132", + "d4891374cfde42adac3f2218b879f082", + "2a009696a36748b2937ac6746460483a", + "979c7269c8394082b277435040052f45", + "42ff3dacbeb34fc79e60d382c93180d6", + "d5156d7ec0e14a60bc67ac5e3c5b32a6", + "e82400379100428a915968d7ba060fd5", + "f25f7aabffb046a388ba71ad7c3ab7de", + "5088dea18c1146d8841e50e76697b7e5", + "e36d59055aee4a48b521109b96c9faff", + "d4b061b8a44646a8b4ccc4839fe769a8", + "354425d2d3cc4be4891499c8c252e585", + "84c2e850cd944480bf1cc9bd79ca40f4", + "ecb0caf0ebd2458789aee04fd0468723", + "0689a7b924674988a587d498cb946549", + "ea131342791043d48673da5ccb559c26", + "6936e031b7f74f45998232f819666b45", + "ae8efd2c29bb4008a13be5b0483928b4", + "7728374b25ec4b45b3d9171e69173bf5", + "a7456e34baef4c89979963a8e61b98e4", + "1db1f8a2985947639120d9bccdf3208e", + "ac7a77f2fd1b4cdaab3ae8ff2bb8b963", + "2486dff82a4b41809b4a8ac2569b7e10", + "bcb064131d464033be2a95b5df8e2c82", + "4614b06d5a974ecf86238f938e58bccb", + "7d3a28c174ff4c2791039495b544b507", + "58a114346ac44a8c992da25fb7c721f8", + "58e96bfc8f6a449eafa644edf4b75228", + "3bafea3ba4b347e186da01e279f41084", + "d8fa48e20376478e9e89438aa57de80d", + "5d9aaed3cf2e451595690e72ed4c2495", + "ab7aabf047e34d5899bc3dcfa972f7fd", + "8a006c7b0f0d431c8c024aad2ea8e427", + "cc122dc799da42948360712d0b809ed9", + "d3186548246149feaa9228782d7adaab", + "96660986fcd1451d8565790e961277b5", + "e6d820247bfc42acbff367b5794b6655", + "b7ff8b76997a4235a3205fac9c531502", + "00e7a13db6174f3182a898345dd1d38d", + "adcdbc5f4ee045a2bc8c7b3b7f4cac5b", + "f4920d0dce6c4d2b8528f8b098722cfc", + "51f3bf496ca146b18b93fb58846f591e", + "78672ae9cde346c09d3a7f7701dfd151", + "a866149ec74144b385f55fdf7eb105a8", + "26b866aceb8342b5830ca76815d6fa73", + "861f32fe95c04198b9dd81c8fa1fbacb", + "963f20a5be194830b08bb215b9ee97a1", + "ddeba74ba1ba4dd1a1c4f47c358eeae5", + "7d8c57299000460680a250aa23c7b2cd", + "4aced1e370fc4b2c88d4283bcbe97ebf", + "44a36016b20647efa05d9aee60aaedb8", + "9efd3613e80e4aa78248e979a44bd88b", + "288cff3f48ab4cf2b27cfc5c37c716f7", + "179d01e55e5142acaddfff4b1975860e", + "db881594d4b9483bab4d09b536a6602a", + "1b4e9bc9196d4c7e98005bc5de040202", + "8754e0214d6c495ca4f7e75d11738f73", + "3fbb5b3e332d4444ab7623422347d7ce", + "85520aaa9c464b7f927c043a323e45f3", + "bd18214cd9624c0c97d6e5d73bd84b9e", + "67a7e78833b141778d290e31b5006277", + "67139d0ae82f4ca7be9506a5bdd2f603", + "73b4b4d832f446259513cff2c764a544", + "442b0033175d4d38ac1633814f8919b3", + "08664ffa89a04048aa7a6eecf55169a8", + "d89e128b65424ced9d2ea19e42facb67", + "6c135337a5db4da8867d9c9bb1bad8b2", + "63b03fea35f64af49787d6253d1e8aa2", + "5408ba6a5d5e4d3e8371e6d8a156aae6", + "dce0aaa1839b493a8bfa93820f85bf0b", + "aa01e299117447e692e719426dc7f53e", + "1183926027a04b39a81c603be4b7860d", + "edee1e5620214adcb701876812fd55df", + "2ddca395a3ea42c6a422cea781e4262f", + "8fc852abdc384fbfada6505cd96ea825", + "239d49bd1d6c4cc2a95548c5634a3b9a", + "40eaa223a6ef48628829d45f576c5293", + "8a9155146377424cbc114127816ba8ba", + "beda87842b744bd984629e34e8fae0b5", + "1a4e7e57b95a41869ab5642ed0e6571c", + "25b3cab0e79a4762a8cc170309e7489e", + "9f2c5a74769249b997c1558bdf4c94ce", + "71b773f3ead4430cbfac09127b801c6a", + "d6e0253023874b6faa6bf6664e55e160", + "5031681c504544388ece6bbfb3b5ad69", + "34d4e2de5bea4b7f89d44a4e7fcedbb0", + "1fd81f69f417476a95e4594e2c8b605d" + ] + }, + "id": "o3ebde8VWKdi", + "outputId": "7c60f8aa-67e6-4343-c72e-d6e356d60e6c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stderr", + "text": [ + "GPU available: True, used: True\n", + "TPU available: False, using: 0 TPU cores\n", + "IPU available: False, using: 0 IPUs\n", + "HPU available: False, using: 0 HPUs\n", + "LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]\n", + "\n", + " | Name | Type | Params\n", + "--------------------------------\n", + "0 | fc1 | Linear | 30 \n", + "1 | func | ReLU | 0 \n", + "2 | fc2 | Linear | 11 \n", + "--------------------------------\n", + "41 Trainable params\n", + "0 Non-trainable params\n", + "41 Total params\n", + "0.000 Total estimated model params size (MB)\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Sanity Checking: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "1657a223e5524ca682ea081b9e4addea" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 0: val loss = 0.7213451266288757 val acc = 0.3333333432674408\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Training: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "a4fb1b2e0f8b4346bbde1b949dbce0fd" + } + }, + "metadata": {} + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "3e63509c89304bccb2c7371ec5e7ca62" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 1: val loss = 0.7164624333381653 val acc = 0.3333333432674408\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "e6c4eb3c595c43ef9722654dcfabfcc6" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 2: val loss = 0.7117107510566711 val acc = 0.3333333432674408\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "69eedcfbe5c14a4cbe119364ce973690" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 3: val loss = 0.7070826292037964 val acc = 0.3333333432674408\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "7287a9afffb5470c920734840c5d72fe" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 4: val loss = 0.7025845050811768 val acc = 0.3333333432674408\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "08a690202bbe48bf9434a3354cb560c1" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 5: val loss = 0.6982313990592957 val acc = 0.2666666805744171\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "e2900fe753754ede94abc1847dda4d5c" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 6: val loss = 0.6939730644226074 val acc = 0.2666666805744171\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "0d2b1608b987468791e1a7ffedfd0079" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 7: val loss = 0.6897947192192078 val acc = 0.2666666805744171\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "b650b7b4420541298ea255d741f8a518" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 8: val loss = 0.6857149004936218 val acc = 0.2666666805744171\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "8eb84c34c1a54dad903371885051bef2" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 9: val loss = 0.6817294359207153 val acc = 0.46666669845581055\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "044439bda84b4d24935a46be5c14ca02" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 10: val loss = 0.6778346300125122 val acc = 0.46666669845581055\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "675520bc1a7e4aca9e17f7410d6380cf" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 11: val loss = 0.6740307807922363 val acc = 0.46666669845581055\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "3cd65d1d3cd0438ea94b8c4d964bc65c" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 12: val loss = 0.6703100204467773 val acc = 0.5333333611488342\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "3a9c42437ab34710a3fd3a75cf9cfac4" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 13: val loss = 0.6666661500930786 val acc = 0.5333333611488342\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "71643356b8954af5ab6cdf03df2825e3" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 14: val loss = 0.663104772567749 val acc = 0.6000000238418579\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "a76a4846aa11422785c1d0218c94b827" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 15: val loss = 0.6596227884292603 val acc = 0.6000000238418579\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "67e1192ed6774aa9bb17f1d5a27695f9" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 16: val loss = 0.6562108993530273 val acc = 0.6000000238418579\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "6adb0fc2977b41e7bce4e81909c6c931" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 17: val loss = 0.652866542339325 val acc = 0.6666666865348816\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "f2fb2d0dfed54272abbc0560a467c97e" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 18: val loss = 0.649587094783783 val acc = 0.6666666865348816\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "02bda666a850468086acea36156397c7" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 19: val loss = 0.6463660597801208 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "0de2ddf45f754c5991a62ae8e822c4b7" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 20: val loss = 0.6432054042816162 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "814e2827e8d647069f05c5b4c89deb52" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 21: val loss = 0.6401029229164124 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "b38c3345647c4db68a2321e3a4d9e215" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 22: val loss = 0.6370567679405212 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "6daac3cee4b9409cba48efa0d06bee24" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 23: val loss = 0.6340654492378235 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "d4b061b8a44646a8b4ccc4839fe769a8" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 24: val loss = 0.6311267018318176 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "ac7a77f2fd1b4cdaab3ae8ff2bb8b963" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 25: val loss = 0.6282366514205933 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "8a006c7b0f0d431c8c024aad2ea8e427" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 26: val loss = 0.6253498792648315 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "a866149ec74144b385f55fdf7eb105a8" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 27: val loss = 0.6225143671035767 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "db881594d4b9483bab4d09b536a6602a" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 28: val loss = 0.6197248101234436 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "d89e128b65424ced9d2ea19e42facb67" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 29: val loss = 0.6169812679290771 val acc = 0.7333333492279053\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "Validation: 0it [00:00, ?it/s]" + ], + "application/vnd.jupyter.widget-view+json": { + "version_major": 2, + "version_minor": 0, + "model_id": "40eaa223a6ef48628829d45f576c5293" + } + }, + "metadata": {} + }, + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch 30: val loss = 0.6142613887786865 val acc = 0.8000000715255737\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "iC7doHoWToPg" + }, "source": [ "## Takeaways\n", "\n", @@ -1730,8 +2934,10956 @@ }, "livereveal": { "start_slideshow_at": "selected" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "1657a223e5524ca682ea081b9e4addea": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_4f111fbdbc3440f783adc3df3df46494", + "IPY_MODEL_cc048e2c91ce48258934ef577cf229d1", + "IPY_MODEL_d3c01678943341c5b814430145692a69" + ], + "layout": "IPY_MODEL_9b55455cc9b541ef9634be2d790bb831" + } + }, + "4f111fbdbc3440f783adc3df3df46494": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_15d7c09876074047afac1e41cb9ac121", + "placeholder": "​", + "style": "IPY_MODEL_90137ba0ff814f71ad964f45d704ee89", + "value": "Sanity Checking DataLoader 0: 100%" + } + }, + "cc048e2c91ce48258934ef577cf229d1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0919c9545ef64ed1a65f3f489d51cccc", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_12cad77b8027415b82937ad33f793a63", + "value": 1 + } + }, + "d3c01678943341c5b814430145692a69": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_25ff491870eb4bf6ad4a320e5c99bd31", + "placeholder": "​", + "style": "IPY_MODEL_238a42e032c34b9183e1e6a75f886da0", + "value": " 1/1 [00:00<00:00, 273.19it/s]" + } + }, + "9b55455cc9b541ef9634be2d790bb831": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "15d7c09876074047afac1e41cb9ac121": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "90137ba0ff814f71ad964f45d704ee89": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0919c9545ef64ed1a65f3f489d51cccc": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "12cad77b8027415b82937ad33f793a63": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "25ff491870eb4bf6ad4a320e5c99bd31": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "238a42e032c34b9183e1e6a75f886da0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a4fb1b2e0f8b4346bbde1b949dbce0fd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_18876b0e4f0f4b21ad1802f36637c067", + "IPY_MODEL_92ef8d6e24604b2f895e3876dc9996ee", + "IPY_MODEL_d4bc1057a59c4666a7dc0f9627c45901" + ], + "layout": "IPY_MODEL_3355e659c40e4e42bbad6c8690f5055e" + } + }, + "18876b0e4f0f4b21ad1802f36637c067": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0ab539031d80478685164ce470246d57", + "placeholder": "​", + "style": "IPY_MODEL_271fdffaef854a67b294c0ccdfb6fe91", + "value": "Epoch 29: 100%" + } + }, + "92ef8d6e24604b2f895e3876dc9996ee": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_0bd01bf4a9954fe2ba2760d10b9d7971", + "max": 6, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bd5250b6001c4cd282a25d498ee4e673", + "value": 6 + } + }, + "d4bc1057a59c4666a7dc0f9627c45901": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_21538a0928e04ca08562dda0322385a1", + "placeholder": "​", + "style": "IPY_MODEL_5301b071e422430e9bff6cd23c2853b5", + "value": " 6/6 [00:00<00:00, 44.67it/s, loss=0.597, v_num=18]" + } + }, + "3355e659c40e4e42bbad6c8690f5055e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "0ab539031d80478685164ce470246d57": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "271fdffaef854a67b294c0ccdfb6fe91": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0bd01bf4a9954fe2ba2760d10b9d7971": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bd5250b6001c4cd282a25d498ee4e673": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "21538a0928e04ca08562dda0322385a1": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5301b071e422430e9bff6cd23c2853b5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3e63509c89304bccb2c7371ec5e7ca62": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ff10f2e47185425eaa1229be76092ee5", + "IPY_MODEL_03cbfa5d29d548498035ba7bf7e0b659", + "IPY_MODEL_561c5a5b02894df2a66b2991877e1231" + ], + "layout": "IPY_MODEL_569851b1958f49e281770b65bf78b60a" + } + }, + "ff10f2e47185425eaa1229be76092ee5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2b49a1491afb4946975395080b9117e9", + "placeholder": "​", + "style": "IPY_MODEL_79737a473e0b4b59bb4d6f190d92b94c", + "value": "Validation DataLoader 0: 100%" + } + }, + "03cbfa5d29d548498035ba7bf7e0b659": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d8a3af0177fc4707b928629952396ad5", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_34852db50a91487795451f76b57da6b2", + "value": 1 + } + }, + "561c5a5b02894df2a66b2991877e1231": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_046c75ea1598416497c2ef218d1f268a", + "placeholder": "​", + "style": "IPY_MODEL_16e49dd0c2094a87a398416bac89ef69", + "value": " 1/1 [00:00<00:00, 73.83it/s]" + } + }, + "569851b1958f49e281770b65bf78b60a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "2b49a1491afb4946975395080b9117e9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "79737a473e0b4b59bb4d6f190d92b94c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d8a3af0177fc4707b928629952396ad5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "34852db50a91487795451f76b57da6b2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "046c75ea1598416497c2ef218d1f268a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "16e49dd0c2094a87a398416bac89ef69": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e6c4eb3c595c43ef9722654dcfabfcc6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_62f1b983740e47cd8664eccafc926e32", + "IPY_MODEL_9861f59fd71a4e3c879858ef8b4b40fb", + "IPY_MODEL_d9960d4519ec42bcb8678359b278c7b5" + ], + "layout": "IPY_MODEL_118e90e145994312897584085642c03b" + } + }, + "62f1b983740e47cd8664eccafc926e32": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_db156fc5cbfd426e8460232b8f760733", + "placeholder": "​", + "style": "IPY_MODEL_e68df50870c5469a9dc86346d7ad9a4e", + "value": "Validation DataLoader 0: 100%" + } + }, + "9861f59fd71a4e3c879858ef8b4b40fb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c89c5ec1ca1549cbbc7dd57b3672d74e", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_84e423587f4244938844cd74d2f86dc0", + "value": 1 + } + }, + "d9960d4519ec42bcb8678359b278c7b5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a31f6ff7fbc54df5bd1745816b2176f8", + "placeholder": "​", + "style": "IPY_MODEL_d6d02c0963c54a6bbbd6753f3c3e6503", + "value": " 1/1 [00:00<00:00, 97.96it/s]" + } + }, + "118e90e145994312897584085642c03b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "db156fc5cbfd426e8460232b8f760733": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e68df50870c5469a9dc86346d7ad9a4e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c89c5ec1ca1549cbbc7dd57b3672d74e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "84e423587f4244938844cd74d2f86dc0": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a31f6ff7fbc54df5bd1745816b2176f8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d6d02c0963c54a6bbbd6753f3c3e6503": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "69eedcfbe5c14a4cbe119364ce973690": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_72eb0dd423f4486b9a63f100670e03a5", + "IPY_MODEL_4b7e9cfd822d48db848319a78548b0db", + "IPY_MODEL_a52a0bc61ed14e0d93f0c4768687fee8" + ], + "layout": "IPY_MODEL_d1c60311d2bc4f4c826da5c7a634202d" + } + }, + "72eb0dd423f4486b9a63f100670e03a5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_08426ffc99c44d6290ef9cb9363a5737", + "placeholder": "​", + "style": "IPY_MODEL_161c5cea83dc42f6b87c904303dad688", + "value": "Validation DataLoader 0: 100%" + } + }, + "4b7e9cfd822d48db848319a78548b0db": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_79c04563af9646dd9a7e82db11894c24", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_235b2edd90bf4d1383b5a0d49905a241", + "value": 1 + } + }, + "a52a0bc61ed14e0d93f0c4768687fee8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_24ead65d14c54fbcb174b06b7dadbcc5", + "placeholder": "​", + "style": "IPY_MODEL_20b85c48964d4c85890f8a0ebc04dd1d", + "value": " 1/1 [00:00<00:00, 108.34it/s]" + } + }, + "d1c60311d2bc4f4c826da5c7a634202d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "08426ffc99c44d6290ef9cb9363a5737": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "161c5cea83dc42f6b87c904303dad688": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "79c04563af9646dd9a7e82db11894c24": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "235b2edd90bf4d1383b5a0d49905a241": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "24ead65d14c54fbcb174b06b7dadbcc5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "20b85c48964d4c85890f8a0ebc04dd1d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7287a9afffb5470c920734840c5d72fe": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ae3232c87db9469fa19cb59f78be2f57", + "IPY_MODEL_e2a292f657c342569a080a3d9e25852b", + "IPY_MODEL_f56858c5843d446286d416e9bbc7e7c8" + ], + "layout": "IPY_MODEL_6ddb0e10ea78488aa8358ec3a7bb0780" + } + }, + "ae3232c87db9469fa19cb59f78be2f57": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_df7172162b6542f08662614b084d7521", + "placeholder": "​", + "style": "IPY_MODEL_ca6221d153a94b4898e5a1b5043b843d", + "value": "Validation DataLoader 0: 100%" + } + }, + "e2a292f657c342569a080a3d9e25852b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_54e9275a7f074eeca9a5995653d16036", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_4454290d993f4350a6dc4e464c61c0a9", + "value": 1 + } + }, + "f56858c5843d446286d416e9bbc7e7c8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6e5f99b5aec44fff9d4cecb28dd59188", + "placeholder": "​", + "style": "IPY_MODEL_39ae0b5e8b8a41b79ea1a209f2aacc87", + "value": " 1/1 [00:00<00:00, 126.25it/s]" + } + }, + "6ddb0e10ea78488aa8358ec3a7bb0780": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "df7172162b6542f08662614b084d7521": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ca6221d153a94b4898e5a1b5043b843d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "54e9275a7f074eeca9a5995653d16036": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4454290d993f4350a6dc4e464c61c0a9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "6e5f99b5aec44fff9d4cecb28dd59188": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "39ae0b5e8b8a41b79ea1a209f2aacc87": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "08a690202bbe48bf9434a3354cb560c1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_7311cc83255f46ffa31f461c485111b5", + "IPY_MODEL_6f484c87ff3e4582aad771a703151f2b", + "IPY_MODEL_ab9c536f94b84922877071f760111f55" + ], + "layout": "IPY_MODEL_427f04eec07f4d94a010664b12139f0f" + } + }, + "7311cc83255f46ffa31f461c485111b5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_cd7f66fdfe224994a31a3c985cb7a1de", + "placeholder": "​", + "style": "IPY_MODEL_b74e5502e4e54847b1191b7b0304f66a", + "value": "Validation DataLoader 0: 100%" + } + }, + "6f484c87ff3e4582aad771a703151f2b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_dbfcbe2df4f74df594606dd0bb6873b4", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ac62ad773e7a4694b57dd8c71b81f23d", + "value": 1 + } + }, + "ab9c536f94b84922877071f760111f55": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_f20824d8dfc84640bee1cdc9b7277caa", + "placeholder": "​", + "style": "IPY_MODEL_fd9a33d8f6ad459594d9939fd635730c", + "value": " 1/1 [00:00<00:00, 105.91it/s]" + } + }, + "427f04eec07f4d94a010664b12139f0f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "cd7f66fdfe224994a31a3c985cb7a1de": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b74e5502e4e54847b1191b7b0304f66a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "dbfcbe2df4f74df594606dd0bb6873b4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ac62ad773e7a4694b57dd8c71b81f23d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "f20824d8dfc84640bee1cdc9b7277caa": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fd9a33d8f6ad459594d9939fd635730c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e2900fe753754ede94abc1847dda4d5c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0c1832e2d1ab4ca4a882d76f1d896c02", + "IPY_MODEL_10a5f4a004bc4a81a485604f67bab642", + "IPY_MODEL_fe260f7a9c66497cad723b44c1addbe7" + ], + "layout": "IPY_MODEL_ef7d39cc71074a7faa299da2621abe03" + } + }, + "0c1832e2d1ab4ca4a882d76f1d896c02": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3f58e2aea843451b83e3aba8c1eefc74", + "placeholder": "​", + "style": "IPY_MODEL_fd38fbd015e6471392cfee4464e6370e", + "value": "Validation DataLoader 0: 100%" + } + }, + "10a5f4a004bc4a81a485604f67bab642": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a95c45bcb67f4a569fb9f88af8108fde", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bf3bf33f0c474b54a4b472a4a7626da7", + "value": 1 + } + }, + "fe260f7a9c66497cad723b44c1addbe7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_afcc785f069b433ba8747b01e5840763", + "placeholder": "​", + "style": "IPY_MODEL_ec27c6b290be4adc8d2df034fd3bb143", + "value": " 1/1 [00:00<00:00, 110.76it/s]" + } + }, + "ef7d39cc71074a7faa299da2621abe03": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "3f58e2aea843451b83e3aba8c1eefc74": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "fd38fbd015e6471392cfee4464e6370e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a95c45bcb67f4a569fb9f88af8108fde": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bf3bf33f0c474b54a4b472a4a7626da7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "afcc785f069b433ba8747b01e5840763": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ec27c6b290be4adc8d2df034fd3bb143": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0d2b1608b987468791e1a7ffedfd0079": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_016a5fc3757c480b9c905867c4892864", + "IPY_MODEL_c7c7cc7d1c0647abb11ade78ef451007", + "IPY_MODEL_d0e4462fee034a67b3682e27d5cb6e27" + ], + "layout": "IPY_MODEL_ac3a80de351440e7a279f3efce37e430" + } + }, + "016a5fc3757c480b9c905867c4892864": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d6204036abba495785a3674ea841746c", + "placeholder": "​", + "style": "IPY_MODEL_3df8a54d12604c1ebe7229f88d5811bf", + "value": "Validation DataLoader 0: 100%" + } + }, + "c7c7cc7d1c0647abb11ade78ef451007": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5236935ed5874a0986f953ee21477be9", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_1355273e058041efa299727d17949855", + "value": 1 + } + }, + "d0e4462fee034a67b3682e27d5cb6e27": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_68acf21436374d5eb393ada1b2298e28", + "placeholder": "​", + "style": "IPY_MODEL_57d592b9768545869080fc2505e5a770", + "value": " 1/1 [00:00<00:00, 97.42it/s]" + } + }, + "ac3a80de351440e7a279f3efce37e430": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "d6204036abba495785a3674ea841746c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "3df8a54d12604c1ebe7229f88d5811bf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5236935ed5874a0986f953ee21477be9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1355273e058041efa299727d17949855": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "68acf21436374d5eb393ada1b2298e28": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "57d592b9768545869080fc2505e5a770": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b650b7b4420541298ea255d741f8a518": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_3d0949a3f0504bf0802082ec86ce8e17", + "IPY_MODEL_3f71570951c94959ba0eea6692b2d671", + "IPY_MODEL_15f97cc51d594cca91dc43cbf019ffbc" + ], + "layout": "IPY_MODEL_23e7ec609ed649e29f2c274bd76ee3dd" + } + }, + "3d0949a3f0504bf0802082ec86ce8e17": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_47af905082094cd5b8a4cb4ab02ec431", + "placeholder": "​", + "style": "IPY_MODEL_87aa955f31054e7da3fc1c93a8e1f335", + "value": "Validation DataLoader 0: 100%" + } + }, + "3f71570951c94959ba0eea6692b2d671": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2f79b8377db841b5b14650ed14d7c5cb", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_0560fb1045034e4b865a199dc0fba636", + "value": 1 + } + }, + "15f97cc51d594cca91dc43cbf019ffbc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e35861641d664e2ea8140ff988b65576", + "placeholder": "​", + "style": "IPY_MODEL_4d683f5e6ccb4328bfd33829e05e2e35", + "value": " 1/1 [00:00<00:00, 101.72it/s]" + } + }, + "23e7ec609ed649e29f2c274bd76ee3dd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "47af905082094cd5b8a4cb4ab02ec431": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "87aa955f31054e7da3fc1c93a8e1f335": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2f79b8377db841b5b14650ed14d7c5cb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0560fb1045034e4b865a199dc0fba636": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "e35861641d664e2ea8140ff988b65576": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4d683f5e6ccb4328bfd33829e05e2e35": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8eb84c34c1a54dad903371885051bef2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_424d7efa1e1d4c79a5a9e1e0eea97bc3", + "IPY_MODEL_0d6619a581884191a205c9e1b91b3790", + "IPY_MODEL_035553232bbc40c789c35bdcd78d7b88" + ], + "layout": "IPY_MODEL_6648bcb6b46e4dc893654f139a7b73df" + } + }, + "424d7efa1e1d4c79a5a9e1e0eea97bc3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d4302a261e334336b71459e74fee95a4", + "placeholder": "​", + "style": "IPY_MODEL_5ae44fb9f67b40bb8261defbc07bf689", + "value": "Validation DataLoader 0: 100%" + } + }, + "0d6619a581884191a205c9e1b91b3790": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5097652e46cf4d1d88933903e37387dd", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_82e9918bb5b648058fe32b19b0ab7059", + "value": 1 + } + }, + "035553232bbc40c789c35bdcd78d7b88": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_28913620d1dc406db67ff7876db5d414", + "placeholder": "​", + "style": "IPY_MODEL_2e5b502d9c0e47449a6e7b5095d5b6ec", + "value": " 1/1 [00:00<00:00, 91.51it/s]" + } + }, + "6648bcb6b46e4dc893654f139a7b73df": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "d4302a261e334336b71459e74fee95a4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5ae44fb9f67b40bb8261defbc07bf689": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "5097652e46cf4d1d88933903e37387dd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "82e9918bb5b648058fe32b19b0ab7059": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "28913620d1dc406db67ff7876db5d414": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2e5b502d9c0e47449a6e7b5095d5b6ec": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "044439bda84b4d24935a46be5c14ca02": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_3aa9793c2771435b892c70a5ca86a372", + "IPY_MODEL_490c7d65abaf46a1a6f781395f846b83", + "IPY_MODEL_b3ad1dfdecf649988c4060e76f0c9164" + ], + "layout": "IPY_MODEL_6f0bd0ab209348d2a76ae70cfbfa47ff" + } + }, + "3aa9793c2771435b892c70a5ca86a372": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_95dc3afa44174e9f8e715dab0a3dfd7d", + "placeholder": "​", + "style": "IPY_MODEL_d2f7362dee2b4100930a7a1f288e649e", + "value": "Validation DataLoader 0: 100%" + } + }, + "490c7d65abaf46a1a6f781395f846b83": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c92364fa157f4212a9a9811925605382", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_aec5035eeab04627b3d61c05bf53ef4f", + "value": 1 + } + }, + "b3ad1dfdecf649988c4060e76f0c9164": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_035f91d8fd1d4ff6932f9d01aa334f3a", + "placeholder": "​", + "style": "IPY_MODEL_8a56ba2f8d384c0fb285ac9cf7b5e421", + "value": " 1/1 [00:00<00:00, 98.04it/s]" + } + }, + "6f0bd0ab209348d2a76ae70cfbfa47ff": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "95dc3afa44174e9f8e715dab0a3dfd7d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d2f7362dee2b4100930a7a1f288e649e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c92364fa157f4212a9a9811925605382": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "aec5035eeab04627b3d61c05bf53ef4f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "035f91d8fd1d4ff6932f9d01aa334f3a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8a56ba2f8d384c0fb285ac9cf7b5e421": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "675520bc1a7e4aca9e17f7410d6380cf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_9b19f80d8f5648b9b575515d2f8085f8", + "IPY_MODEL_c0065e721652472996f40eb47071589c", + "IPY_MODEL_b236adc069d049c288d81702cc0dd62c" + ], + "layout": "IPY_MODEL_5eefa033732941b39bf3bfa62fd9185e" + } + }, + "9b19f80d8f5648b9b575515d2f8085f8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5aefc7d586ae4be4aa33c1383f494b9f", + "placeholder": "​", + "style": "IPY_MODEL_5e0c000321a64c28a81a1e167d88bd22", + "value": "Validation DataLoader 0: 100%" + } + }, + "c0065e721652472996f40eb47071589c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_438661c89c034656b86e936360474b24", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_ed1fca3c73ad446db422e30f5ec44b0e", + "value": 1 + } + }, + "b236adc069d049c288d81702cc0dd62c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4421eb7516c04af1972c6f5df5315bc4", + "placeholder": "​", + "style": "IPY_MODEL_6d52bfaf6be54d90a53e1fb465dfaf7d", + "value": " 1/1 [00:00<00:00, 85.71it/s]" + } + }, + "5eefa033732941b39bf3bfa62fd9185e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "5aefc7d586ae4be4aa33c1383f494b9f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5e0c000321a64c28a81a1e167d88bd22": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "438661c89c034656b86e936360474b24": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ed1fca3c73ad446db422e30f5ec44b0e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "4421eb7516c04af1972c6f5df5315bc4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6d52bfaf6be54d90a53e1fb465dfaf7d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3cd65d1d3cd0438ea94b8c4d964bc65c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a4653a04856c47a0b1907d864e3f1a15", + "IPY_MODEL_02e9029cbe8a4db0b6ef00c4df0ae302", + "IPY_MODEL_258629893fa14d178577ee19efdff31e" + ], + "layout": "IPY_MODEL_fe82872822b749ae87fac7eb4df0791e" + } + }, + "a4653a04856c47a0b1907d864e3f1a15": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_07655ba9152647df80ad1efe4b117135", + "placeholder": "​", + "style": "IPY_MODEL_b6e87d03766a4185ad2c4d716aa456d7", + "value": "Validation DataLoader 0: 100%" + } + }, + "02e9029cbe8a4db0b6ef00c4df0ae302": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c6f304a0747d40fea9571f99f5289986", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5722085f090c4851a1cde4daf7db77df", + "value": 1 + } + }, + "258629893fa14d178577ee19efdff31e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7aed32af8b134b56a041ebb25c32640c", + "placeholder": "​", + "style": "IPY_MODEL_a723ce7408e14b63b6d4311051dca322", + "value": " 1/1 [00:00<00:00, 127.66it/s]" + } + }, + "fe82872822b749ae87fac7eb4df0791e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "07655ba9152647df80ad1efe4b117135": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b6e87d03766a4185ad2c4d716aa456d7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "c6f304a0747d40fea9571f99f5289986": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5722085f090c4851a1cde4daf7db77df": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "7aed32af8b134b56a041ebb25c32640c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a723ce7408e14b63b6d4311051dca322": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3a9c42437ab34710a3fd3a75cf9cfac4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_80a0d8b6e16b4ceb98bb8911b0fa596c", + "IPY_MODEL_9310b29cec49404b8dfc9feb8e5bac9f", + "IPY_MODEL_44341f0cb29440a2bef7f711517a01ff" + ], + "layout": "IPY_MODEL_9739202e0849427d9fe61210e231837c" + } + }, + "80a0d8b6e16b4ceb98bb8911b0fa596c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_c43c9d3bbacf478b9fafc076ea58ad29", + "placeholder": "​", + "style": "IPY_MODEL_abfa8dc54e654a61b93ec9a15f5fe67e", + "value": "Validation DataLoader 0: 100%" + } + }, + "9310b29cec49404b8dfc9feb8e5bac9f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_979514f924c6441098f7b7231ae15900", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_bbef9cf5cf2d42adb650caba73919e06", + "value": 1 + } + }, + "44341f0cb29440a2bef7f711517a01ff": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3b8da849443f401bb51a038f5bb82ad9", + "placeholder": "​", + "style": "IPY_MODEL_36f417b9e7e247b68e3bb18519af98b4", + "value": " 1/1 [00:00<00:00, 142.27it/s]" + } + }, + "9739202e0849427d9fe61210e231837c": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "c43c9d3bbacf478b9fafc076ea58ad29": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "abfa8dc54e654a61b93ec9a15f5fe67e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "979514f924c6441098f7b7231ae15900": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bbef9cf5cf2d42adb650caba73919e06": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "3b8da849443f401bb51a038f5bb82ad9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "36f417b9e7e247b68e3bb18519af98b4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "71643356b8954af5ab6cdf03df2825e3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8d50b1a8e0ce4d018fe4a51240ddb35d", + "IPY_MODEL_654d72723ed8474ca360102e896331d5", + "IPY_MODEL_049d95dcfbb34e84a0060919fdb8f454" + ], + "layout": "IPY_MODEL_54955fa5560041c09f847a3afb39eecd" + } + }, + "8d50b1a8e0ce4d018fe4a51240ddb35d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_34b2c78ef1254853a377efc6fead2e95", + "placeholder": "​", + "style": "IPY_MODEL_4eda8d394bff4fbf98bc086737c75219", + "value": "Validation DataLoader 0: 100%" + } + }, + "654d72723ed8474ca360102e896331d5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_4ca134b9e1df4136bd0d2660a82960cf", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_87cf68c4e8a245c686fbbe439f176b87", + "value": 1 + } + }, + "049d95dcfbb34e84a0060919fdb8f454": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_6009ded338de4e5b9a204e6f1243bf05", + "placeholder": "​", + "style": "IPY_MODEL_f01a1f50e0a74faaacc35695590cea30", + "value": " 1/1 [00:00<00:00, 275.09it/s]" + } + }, + "54955fa5560041c09f847a3afb39eecd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "34b2c78ef1254853a377efc6fead2e95": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4eda8d394bff4fbf98bc086737c75219": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "4ca134b9e1df4136bd0d2660a82960cf": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "87cf68c4e8a245c686fbbe439f176b87": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "6009ded338de4e5b9a204e6f1243bf05": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f01a1f50e0a74faaacc35695590cea30": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a76a4846aa11422785c1d0218c94b827": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_373e3dd821954f33becb388c82ffebc2", + "IPY_MODEL_9f532b8a64b3410f9a2e2a99755dac55", + "IPY_MODEL_b457e104ad194032ba15070b89d42e6e" + ], + "layout": "IPY_MODEL_81fc3a7b94554a1980724ac6092fc88a" + } + }, + "373e3dd821954f33becb388c82ffebc2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_68908006e8eb4b31a55d1c0be51453bd", + "placeholder": "​", + "style": "IPY_MODEL_8f5c49525abe4d7a9ea746db18135f26", + "value": "Validation DataLoader 0: 100%" + } + }, + "9f532b8a64b3410f9a2e2a99755dac55": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_70eb5ab30ffb4b5bbe58832c6386a536", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_970d8a7e2b5c47a5bff8a036cadc9b84", + "value": 1 + } + }, + "b457e104ad194032ba15070b89d42e6e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3ad7904ba48048bfa4b7a866cf4aa4a6", + "placeholder": "​", + "style": "IPY_MODEL_a20c551e949842f881c6def753eb81ed", + "value": " 1/1 [00:00<00:00, 159.05it/s]" + } + }, + "81fc3a7b94554a1980724ac6092fc88a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "68908006e8eb4b31a55d1c0be51453bd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8f5c49525abe4d7a9ea746db18135f26": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "70eb5ab30ffb4b5bbe58832c6386a536": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "970d8a7e2b5c47a5bff8a036cadc9b84": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "3ad7904ba48048bfa4b7a866cf4aa4a6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a20c551e949842f881c6def753eb81ed": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "67e1192ed6774aa9bb17f1d5a27695f9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_5aea05cbd78843bcb2a9d3df9e3abefd", + "IPY_MODEL_4693d306ecaf44f2b6b505ca072e22bb", + "IPY_MODEL_2e46fda9b283487ba4f118bad5a880c6" + ], + "layout": "IPY_MODEL_55a8b90a0a6c44eda0bedd43fda69c41" + } + }, + "5aea05cbd78843bcb2a9d3df9e3abefd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a7e64bcbd09644a198b9f1c7d8a8d1c6", + "placeholder": "​", + "style": "IPY_MODEL_87a7b1169e1f404d81fddc56c0ba2145", + "value": "Validation DataLoader 0: 100%" + } + }, + "4693d306ecaf44f2b6b505ca072e22bb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_921d621e89a64e1aab62397758e26592", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_da9024d63c56460b9ca061d5cd1bb985", + "value": 1 + } + }, + "2e46fda9b283487ba4f118bad5a880c6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_503e7b032b3d44d49e15587060b25e56", + "placeholder": "​", + "style": "IPY_MODEL_1361830025974670a174df70957feabc", + "value": " 1/1 [00:00<00:00, 109.92it/s]" + } + }, + "55a8b90a0a6c44eda0bedd43fda69c41": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "a7e64bcbd09644a198b9f1c7d8a8d1c6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "87a7b1169e1f404d81fddc56c0ba2145": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "921d621e89a64e1aab62397758e26592": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "da9024d63c56460b9ca061d5cd1bb985": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "503e7b032b3d44d49e15587060b25e56": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1361830025974670a174df70957feabc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6adb0fc2977b41e7bce4e81909c6c931": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_ab9b58483e0145aab2f22a8bbf0422cf", + "IPY_MODEL_6725fd421a9344feb552ee1a1ce84dda", + "IPY_MODEL_0d712617055b45a3b6f5783dfe6a5842" + ], + "layout": "IPY_MODEL_1c5fdfd620eb47c28dcb91ff04ea6155" + } + }, + "ab9b58483e0145aab2f22a8bbf0422cf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_db2185de343a4f76a2b2ecfad4e658ad", + "placeholder": "​", + "style": "IPY_MODEL_bb1efececaef471c90c3bc9cc2fb5ac7", + "value": "Validation DataLoader 0: 100%" + } + }, + "6725fd421a9344feb552ee1a1ce84dda": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7a49920285474268b1cb3f57e73a450e", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_b0e5dea19289434ebe98002e3cfe6086", + "value": 1 + } + }, + "0d712617055b45a3b6f5783dfe6a5842": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_92a8cbc6f6344e49a455c9e3df2c552f", + "placeholder": "​", + "style": "IPY_MODEL_b41986dd9910458e95ddfff0b1a508d1", + "value": " 1/1 [00:00<00:00, 197.98it/s]" + } + }, + "1c5fdfd620eb47c28dcb91ff04ea6155": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "db2185de343a4f76a2b2ecfad4e658ad": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "bb1efececaef471c90c3bc9cc2fb5ac7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7a49920285474268b1cb3f57e73a450e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b0e5dea19289434ebe98002e3cfe6086": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "92a8cbc6f6344e49a455c9e3df2c552f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "b41986dd9910458e95ddfff0b1a508d1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "f2fb2d0dfed54272abbc0560a467c97e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_08c1e9701d0b4f2e8b34027af81ab586", + "IPY_MODEL_1ea2399f27404d5cbfffd68efbd472fc", + "IPY_MODEL_affc022e069a41af877cf9fbe3889012" + ], + "layout": "IPY_MODEL_65490339b12e47d6b35cbf4a16d1bfeb" + } + }, + "08c1e9701d0b4f2e8b34027af81ab586": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_10247683189c43b6abf3df0b7818bcd9", + "placeholder": "​", + "style": "IPY_MODEL_10b0f64c86714778919d55c643550ff5", + "value": "Validation DataLoader 0: 100%" + } + }, + "1ea2399f27404d5cbfffd68efbd472fc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a702202230484af5b32a4653f0eac288", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5e38b9f21ce04bcc820f711c9c47678d", + "value": 1 + } + }, + "affc022e069a41af877cf9fbe3889012": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2771553d801f4961ad94344e2d5caacd", + "placeholder": "​", + "style": "IPY_MODEL_134808b58f1f42b09c4b2353a94bbb0e", + "value": " 1/1 [00:00<00:00, 87.08it/s]" + } + }, + "65490339b12e47d6b35cbf4a16d1bfeb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "10247683189c43b6abf3df0b7818bcd9": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "10b0f64c86714778919d55c643550ff5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a702202230484af5b32a4653f0eac288": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5e38b9f21ce04bcc820f711c9c47678d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "2771553d801f4961ad94344e2d5caacd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "134808b58f1f42b09c4b2353a94bbb0e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "02bda666a850468086acea36156397c7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_9abed88d016f4822bf19e71dcf997571", + "IPY_MODEL_6ea72db4ae8b45ec96508a51c21b6974", + "IPY_MODEL_7baafb061feb455e9b37622dc9a4c724" + ], + "layout": "IPY_MODEL_ba06f72e44694ecd9fa51e984b4dc8bf" + } + }, + "9abed88d016f4822bf19e71dcf997571": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_136c4f60a8734c578129fd843ee7ab5f", + "placeholder": "​", + "style": "IPY_MODEL_28f475b19b08458c81ee0cfb11c9d9c3", + "value": "Validation DataLoader 0: 100%" + } + }, + "6ea72db4ae8b45ec96508a51c21b6974": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_604fd938ec7d41f285e1f1b9cb9c6eac", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_07bb79027e20401e84d02a33a628b397", + "value": 1 + } + }, + "7baafb061feb455e9b37622dc9a4c724": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_288ab1d98c7a4e21af429773a9fe3534", + "placeholder": "​", + "style": "IPY_MODEL_19a6a91b0d4e46d9be72aee530a974ce", + "value": " 1/1 [00:00<00:00, 94.33it/s]" + } + }, + "ba06f72e44694ecd9fa51e984b4dc8bf": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "136c4f60a8734c578129fd843ee7ab5f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "28f475b19b08458c81ee0cfb11c9d9c3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "604fd938ec7d41f285e1f1b9cb9c6eac": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "07bb79027e20401e84d02a33a628b397": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "288ab1d98c7a4e21af429773a9fe3534": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "19a6a91b0d4e46d9be72aee530a974ce": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "0de2ddf45f754c5991a62ae8e822c4b7": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_a6fb10bec45f4f1a9243b466eb95c017", + "IPY_MODEL_44ce5ef7a8af4fb291da012fa53e0c5a", + "IPY_MODEL_9c40cc6348cb4bcfb59e0457399cd72b" + ], + "layout": "IPY_MODEL_3f9455a7a52947638545cff45b1e807d" + } + }, + "a6fb10bec45f4f1a9243b466eb95c017": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_22550ebc70ef4671a65bb1a041c9def7", + "placeholder": "​", + "style": "IPY_MODEL_67f022dd80234c08849906615a1191dc", + "value": "Validation DataLoader 0: 100%" + } + }, + "44ce5ef7a8af4fb291da012fa53e0c5a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2e5e169b1ad64407ad8c3494a70b314f", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_277e7a95b41447b4a52824c212e6fa7c", + "value": 1 + } + }, + "9c40cc6348cb4bcfb59e0457399cd72b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d07c7bcf6a934fae9e015be66a1f860d", + "placeholder": "​", + "style": "IPY_MODEL_c5e484430b0843689d7cfb434d0aa8da", + "value": " 1/1 [00:00<00:00, 102.23it/s]" + } + }, + "3f9455a7a52947638545cff45b1e807d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "22550ebc70ef4671a65bb1a041c9def7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "67f022dd80234c08849906615a1191dc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2e5e169b1ad64407ad8c3494a70b314f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "277e7a95b41447b4a52824c212e6fa7c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "d07c7bcf6a934fae9e015be66a1f860d": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "c5e484430b0843689d7cfb434d0aa8da": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "814e2827e8d647069f05c5b4c89deb52": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_0c8b616aecfd4e5e80a0b7c3aabd290f", + "IPY_MODEL_e0f4261c913d42c9a7dcdf79a9914d4a", + "IPY_MODEL_80a819740bb44d589858d4780b100255" + ], + "layout": "IPY_MODEL_5caf7d1fdd564dc2bebe48dd918d9c8f" + } + }, + "0c8b616aecfd4e5e80a0b7c3aabd290f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_10ab820d989c44b98a8bde85780c3deb", + "placeholder": "​", + "style": "IPY_MODEL_7e787283e4434da6b5d3f9245745547c", + "value": "Validation DataLoader 0: 100%" + } + }, + "e0f4261c913d42c9a7dcdf79a9914d4a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b8c86419aa4f43a3a0c9443f23298c0a", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_0270acbb7ed94626adc932afa0655eaa", + "value": 1 + } + }, + "80a819740bb44d589858d4780b100255": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ab0b7e4f05b24205b5e4b9e975cb8e71", + "placeholder": "​", + "style": "IPY_MODEL_70c85ee15c0c4427b6538acbbd0de481", + "value": " 1/1 [00:00<00:00, 116.82it/s]" + } + }, + "5caf7d1fdd564dc2bebe48dd918d9c8f": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "10ab820d989c44b98a8bde85780c3deb": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7e787283e4434da6b5d3f9245745547c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b8c86419aa4f43a3a0c9443f23298c0a": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "0270acbb7ed94626adc932afa0655eaa": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "ab0b7e4f05b24205b5e4b9e975cb8e71": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "70c85ee15c0c4427b6538acbbd0de481": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "b38c3345647c4db68a2321e3a4d9e215": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8c7b852936ca400aa04ec3f95e9afcb3", + "IPY_MODEL_3099fea4c655407582c196176cc2108c", + "IPY_MODEL_a5cb3ea273f9454fbb9dcd8877f2aa33" + ], + "layout": "IPY_MODEL_b4a722f06b614e9cbb259c8fa1e9f664" + } + }, + "8c7b852936ca400aa04ec3f95e9afcb3": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_228014c8ccd543a6af4c554cf60137bf", + "placeholder": "​", + "style": "IPY_MODEL_6e7ea147348f40c8acc919af41047189", + "value": "Validation DataLoader 0: 100%" + } + }, + "3099fea4c655407582c196176cc2108c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7c315c5b62e14d2c9af6fecf536d8df5", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_a9e1b08f5ff24e1b8d652cd9ad649b54", + "value": 1 + } + }, + "a5cb3ea273f9454fbb9dcd8877f2aa33": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_df097748d93e4254be82e6dae9696167", + "placeholder": "​", + "style": "IPY_MODEL_ac30029d30c34fd58a7f3d1826d94d6b", + "value": " 1/1 [00:00<00:00, 110.19it/s]" + } + }, + "b4a722f06b614e9cbb259c8fa1e9f664": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "228014c8ccd543a6af4c554cf60137bf": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6e7ea147348f40c8acc919af41047189": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "7c315c5b62e14d2c9af6fecf536d8df5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "a9e1b08f5ff24e1b8d652cd9ad649b54": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "df097748d93e4254be82e6dae9696167": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ac30029d30c34fd58a7f3d1826d94d6b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "6daac3cee4b9409cba48efa0d06bee24": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_db45da82b3594a1db11322289253a132", + "IPY_MODEL_d4891374cfde42adac3f2218b879f082", + "IPY_MODEL_2a009696a36748b2937ac6746460483a" + ], + "layout": "IPY_MODEL_979c7269c8394082b277435040052f45" + } + }, + "db45da82b3594a1db11322289253a132": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_42ff3dacbeb34fc79e60d382c93180d6", + "placeholder": "​", + "style": "IPY_MODEL_d5156d7ec0e14a60bc67ac5e3c5b32a6", + "value": "Validation DataLoader 0: 100%" + } + }, + "d4891374cfde42adac3f2218b879f082": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_e82400379100428a915968d7ba060fd5", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_f25f7aabffb046a388ba71ad7c3ab7de", + "value": 1 + } + }, + "2a009696a36748b2937ac6746460483a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5088dea18c1146d8841e50e76697b7e5", + "placeholder": "​", + "style": "IPY_MODEL_e36d59055aee4a48b521109b96c9faff", + "value": " 1/1 [00:00<00:00, 188.47it/s]" + } + }, + "979c7269c8394082b277435040052f45": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "42ff3dacbeb34fc79e60d382c93180d6": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d5156d7ec0e14a60bc67ac5e3c5b32a6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "e82400379100428a915968d7ba060fd5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f25f7aabffb046a388ba71ad7c3ab7de": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "5088dea18c1146d8841e50e76697b7e5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "e36d59055aee4a48b521109b96c9faff": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d4b061b8a44646a8b4ccc4839fe769a8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_354425d2d3cc4be4891499c8c252e585", + "IPY_MODEL_84c2e850cd944480bf1cc9bd79ca40f4", + "IPY_MODEL_ecb0caf0ebd2458789aee04fd0468723" + ], + "layout": "IPY_MODEL_0689a7b924674988a587d498cb946549" + } + }, + "354425d2d3cc4be4891499c8c252e585": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ea131342791043d48673da5ccb559c26", + "placeholder": "​", + "style": "IPY_MODEL_6936e031b7f74f45998232f819666b45", + "value": "Validation DataLoader 0: 100%" + } + }, + "84c2e850cd944480bf1cc9bd79ca40f4": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_ae8efd2c29bb4008a13be5b0483928b4", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_7728374b25ec4b45b3d9171e69173bf5", + "value": 1 + } + }, + "ecb0caf0ebd2458789aee04fd0468723": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_a7456e34baef4c89979963a8e61b98e4", + "placeholder": "​", + "style": "IPY_MODEL_1db1f8a2985947639120d9bccdf3208e", + "value": " 1/1 [00:00<00:00, 113.24it/s]" + } + }, + "0689a7b924674988a587d498cb946549": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "ea131342791043d48673da5ccb559c26": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6936e031b7f74f45998232f819666b45": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ae8efd2c29bb4008a13be5b0483928b4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "7728374b25ec4b45b3d9171e69173bf5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "a7456e34baef4c89979963a8e61b98e4": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1db1f8a2985947639120d9bccdf3208e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "ac7a77f2fd1b4cdaab3ae8ff2bb8b963": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_2486dff82a4b41809b4a8ac2569b7e10", + "IPY_MODEL_bcb064131d464033be2a95b5df8e2c82", + "IPY_MODEL_4614b06d5a974ecf86238f938e58bccb" + ], + "layout": "IPY_MODEL_7d3a28c174ff4c2791039495b544b507" + } + }, + "2486dff82a4b41809b4a8ac2569b7e10": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_58a114346ac44a8c992da25fb7c721f8", + "placeholder": "​", + "style": "IPY_MODEL_58e96bfc8f6a449eafa644edf4b75228", + "value": "Validation DataLoader 0: 100%" + } + }, + "bcb064131d464033be2a95b5df8e2c82": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_3bafea3ba4b347e186da01e279f41084", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_d8fa48e20376478e9e89438aa57de80d", + "value": 1 + } + }, + "4614b06d5a974ecf86238f938e58bccb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_5d9aaed3cf2e451595690e72ed4c2495", + "placeholder": "​", + "style": "IPY_MODEL_ab7aabf047e34d5899bc3dcfa972f7fd", + "value": " 1/1 [00:00<00:00, 69.60it/s]" + } + }, + "7d3a28c174ff4c2791039495b544b507": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "58a114346ac44a8c992da25fb7c721f8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "58e96bfc8f6a449eafa644edf4b75228": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "3bafea3ba4b347e186da01e279f41084": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "d8fa48e20376478e9e89438aa57de80d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "5d9aaed3cf2e451595690e72ed4c2495": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "ab7aabf047e34d5899bc3dcfa972f7fd": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "8a006c7b0f0d431c8c024aad2ea8e427": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_cc122dc799da42948360712d0b809ed9", + "IPY_MODEL_d3186548246149feaa9228782d7adaab", + "IPY_MODEL_96660986fcd1451d8565790e961277b5" + ], + "layout": "IPY_MODEL_e6d820247bfc42acbff367b5794b6655" + } + }, + "cc122dc799da42948360712d0b809ed9": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_b7ff8b76997a4235a3205fac9c531502", + "placeholder": "​", + "style": "IPY_MODEL_00e7a13db6174f3182a898345dd1d38d", + "value": "Validation DataLoader 0: 100%" + } + }, + "d3186548246149feaa9228782d7adaab": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_adcdbc5f4ee045a2bc8c7b3b7f4cac5b", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_f4920d0dce6c4d2b8528f8b098722cfc", + "value": 1 + } + }, + "96660986fcd1451d8565790e961277b5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_51f3bf496ca146b18b93fb58846f591e", + "placeholder": "​", + "style": "IPY_MODEL_78672ae9cde346c09d3a7f7701dfd151", + "value": " 1/1 [00:00<00:00, 101.89it/s]" + } + }, + "e6d820247bfc42acbff367b5794b6655": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "b7ff8b76997a4235a3205fac9c531502": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "00e7a13db6174f3182a898345dd1d38d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "adcdbc5f4ee045a2bc8c7b3b7f4cac5b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "f4920d0dce6c4d2b8528f8b098722cfc": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "51f3bf496ca146b18b93fb58846f591e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "78672ae9cde346c09d3a7f7701dfd151": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "a866149ec74144b385f55fdf7eb105a8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_26b866aceb8342b5830ca76815d6fa73", + "IPY_MODEL_861f32fe95c04198b9dd81c8fa1fbacb", + "IPY_MODEL_963f20a5be194830b08bb215b9ee97a1" + ], + "layout": "IPY_MODEL_ddeba74ba1ba4dd1a1c4f47c358eeae5" + } + }, + "26b866aceb8342b5830ca76815d6fa73": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_7d8c57299000460680a250aa23c7b2cd", + "placeholder": "​", + "style": "IPY_MODEL_4aced1e370fc4b2c88d4283bcbe97ebf", + "value": "Validation DataLoader 0: 100%" + } + }, + "861f32fe95c04198b9dd81c8fa1fbacb": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_44a36016b20647efa05d9aee60aaedb8", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_9efd3613e80e4aa78248e979a44bd88b", + "value": 1 + } + }, + "963f20a5be194830b08bb215b9ee97a1": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_288cff3f48ab4cf2b27cfc5c37c716f7", + "placeholder": "​", + "style": "IPY_MODEL_179d01e55e5142acaddfff4b1975860e", + "value": " 1/1 [00:00<00:00, 111.90it/s]" + } + }, + "ddeba74ba1ba4dd1a1c4f47c358eeae5": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "7d8c57299000460680a250aa23c7b2cd": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "4aced1e370fc4b2c88d4283bcbe97ebf": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "44a36016b20647efa05d9aee60aaedb8": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "9efd3613e80e4aa78248e979a44bd88b": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "288cff3f48ab4cf2b27cfc5c37c716f7": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "179d01e55e5142acaddfff4b1975860e": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "db881594d4b9483bab4d09b536a6602a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_1b4e9bc9196d4c7e98005bc5de040202", + "IPY_MODEL_8754e0214d6c495ca4f7e75d11738f73", + "IPY_MODEL_3fbb5b3e332d4444ab7623422347d7ce" + ], + "layout": "IPY_MODEL_85520aaa9c464b7f927c043a323e45f3" + } + }, + "1b4e9bc9196d4c7e98005bc5de040202": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_bd18214cd9624c0c97d6e5d73bd84b9e", + "placeholder": "​", + "style": "IPY_MODEL_67a7e78833b141778d290e31b5006277", + "value": "Validation DataLoader 0: 100%" + } + }, + "8754e0214d6c495ca4f7e75d11738f73": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_67139d0ae82f4ca7be9506a5bdd2f603", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_73b4b4d832f446259513cff2c764a544", + "value": 1 + } + }, + "3fbb5b3e332d4444ab7623422347d7ce": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_442b0033175d4d38ac1633814f8919b3", + "placeholder": "​", + "style": "IPY_MODEL_08664ffa89a04048aa7a6eecf55169a8", + "value": " 1/1 [00:00<00:00, 102.05it/s]" + } + }, + "85520aaa9c464b7f927c043a323e45f3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "bd18214cd9624c0c97d6e5d73bd84b9e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "67a7e78833b141778d290e31b5006277": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "67139d0ae82f4ca7be9506a5bdd2f603": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "73b4b4d832f446259513cff2c764a544": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "442b0033175d4d38ac1633814f8919b3": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "08664ffa89a04048aa7a6eecf55169a8": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d89e128b65424ced9d2ea19e42facb67": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_6c135337a5db4da8867d9c9bb1bad8b2", + "IPY_MODEL_63b03fea35f64af49787d6253d1e8aa2", + "IPY_MODEL_5408ba6a5d5e4d3e8371e6d8a156aae6" + ], + "layout": "IPY_MODEL_dce0aaa1839b493a8bfa93820f85bf0b" + } + }, + "6c135337a5db4da8867d9c9bb1bad8b2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_aa01e299117447e692e719426dc7f53e", + "placeholder": "​", + "style": "IPY_MODEL_1183926027a04b39a81c603be4b7860d", + "value": "Validation DataLoader 0: 100%" + } + }, + "63b03fea35f64af49787d6253d1e8aa2": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_edee1e5620214adcb701876812fd55df", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_2ddca395a3ea42c6a422cea781e4262f", + "value": 1 + } + }, + "5408ba6a5d5e4d3e8371e6d8a156aae6": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_8fc852abdc384fbfada6505cd96ea825", + "placeholder": "​", + "style": "IPY_MODEL_239d49bd1d6c4cc2a95548c5634a3b9a", + "value": " 1/1 [00:00<00:00, 129.72it/s]" + } + }, + "dce0aaa1839b493a8bfa93820f85bf0b": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "aa01e299117447e692e719426dc7f53e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1183926027a04b39a81c603be4b7860d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "edee1e5620214adcb701876812fd55df": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "2ddca395a3ea42c6a422cea781e4262f": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "8fc852abdc384fbfada6505cd96ea825": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "239d49bd1d6c4cc2a95548c5634a3b9a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "40eaa223a6ef48628829d45f576c5293": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HBoxModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_8a9155146377424cbc114127816ba8ba", + "IPY_MODEL_beda87842b744bd984629e34e8fae0b5", + "IPY_MODEL_1a4e7e57b95a41869ab5642ed0e6571c" + ], + "layout": "IPY_MODEL_25b3cab0e79a4762a8cc170309e7489e" + } + }, + "8a9155146377424cbc114127816ba8ba": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_9f2c5a74769249b997c1558bdf4c94ce", + "placeholder": "​", + "style": "IPY_MODEL_71b773f3ead4430cbfac09127b801c6a", + "value": "Validation DataLoader 0: 100%" + } + }, + "beda87842b744bd984629e34e8fae0b5": { + "model_module": "@jupyter-widgets/controls", + "model_name": "FloatProgressModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_d6e0253023874b6faa6bf6664e55e160", + "max": 1, + "min": 0, + "orientation": "horizontal", + "style": "IPY_MODEL_5031681c504544388ece6bbfb3b5ad69", + "value": 1 + } + }, + "1a4e7e57b95a41869ab5642ed0e6571c": { + "model_module": "@jupyter-widgets/controls", + "model_name": "HTMLModel", + "model_module_version": "1.5.0", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_34d4e2de5bea4b7f89d44a4e7fcedbb0", + "placeholder": "​", + "style": "IPY_MODEL_1fd81f69f417476a95e4594e2c8b605d", + "value": " 1/1 [00:00<00:00, 136.36it/s]" + } + }, + "25b3cab0e79a4762a8cc170309e7489e": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": "inline-flex", + "flex": null, + "flex_flow": "row wrap", + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": "100%" + } + }, + "9f2c5a74769249b997c1558bdf4c94ce": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "71b773f3ead4430cbfac09127b801c6a": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "d6e0253023874b6faa6bf6664e55e160": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": "2", + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "5031681c504544388ece6bbfb3b5ad69": { + "model_module": "@jupyter-widgets/controls", + "model_name": "ProgressStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "34d4e2de5bea4b7f89d44a4e7fcedbb0": { + "model_module": "@jupyter-widgets/base", + "model_name": "LayoutModel", + "model_module_version": "1.2.0", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "1fd81f69f417476a95e4594e2c8b605d": { + "model_module": "@jupyter-widgets/controls", + "model_name": "DescriptionStyleModel", + "model_module_version": "1.5.0", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + } + } } }, "nbformat": 4, "nbformat_minor": 0 -} +} \ No newline at end of file