Skip to content

Instantly share code, notes, and snippets.

@lirnli
Last active November 22, 2018 20:03
Show Gist options
  • Save lirnli/c6e02efc414b4473abbb8152d303514c to your computer and use it in GitHub Desktop.
Save lirnli/c6e02efc414b4473abbb8152d303514c to your computer and use it in GitHub Desktop.
word vector with Pytorch + IMDB polarity analysis
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from matplotlib import pyplot as plt\n",
"import numpy as np\n",
"import torch\n",
"from torch import nn, optim\n",
"from torch.autograd import Variable"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": true
},
"source": [
"## Load text"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from glob import glob\n",
"path = './txt_sentoken/*/*.txt'\n",
"corpus = \"\"\n",
"\n",
"for filename in glob(path):\n",
" with open(filename,'r') as f:\n",
" corpus += \" \" + f.read()\n",
" \n",
"from nltk.corpus import stopwords\n",
"from nltk.tokenize import word_tokenize\n",
"\n",
"corpus = word_tokenize(corpus)\n",
"# stop_words = set(stopwords.words('english'))\n",
"# corpus = [w for w in corpus if w not in stop_words]\n",
"\n",
"words = set(corpus) #unique words (including marks)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## corpus sample"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"length of texts: 1524490\n",
"number of unique words: 46716\n",
"a sample below\n"
]
},
{
"data": {
"text/plain": [
"['plot',\n",
" ':',\n",
" 'two',\n",
" 'teen',\n",
" 'couples',\n",
" 'go',\n",
" 'to',\n",
" 'a',\n",
" 'church',\n",
" 'party',\n",
" ',',\n",
" 'drink',\n",
" 'and',\n",
" 'then',\n",
" 'drive',\n",
" '.',\n",
" 'they',\n",
" 'get',\n",
" 'into',\n",
" 'an']"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print('length of texts: ', len(corpus))\n",
"print('number of unique words:', len(words))\n",
"print('a sample below')\n",
"corpus[:20]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 20 most frequent words (tokens)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112a72b00>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from nltk import FreqDist\n",
"dist = FreqDist(corpus)\n",
"dist.most_common(20)\n",
"plt.figure(figsize=[12,4])\n",
"dist.plot(20)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"number of words occurred only once 19646\n"
]
}
],
"source": [
"words_occurred_only_once = [w for w in dist.most_common() if w[1]==1]\n",
"print('number of words occurred only once', len(words_occurred_only_once))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Frequency with respects to word count\n",
"In the plot below, most words in the vocabulary occurrs less than 5 times."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nht7vC5YmVowAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x118c04748>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"occurr_dist = FreqDist([w[1] for w in dist.most_common()])\n",
"plt.figure(figsize=[12,4])\n",
"occurr_dist.plot(50)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"words occurred <= 5 times in corpus: 0.017403031081428204\n"
]
}
],
"source": [
"percent = sum([w[1] for w in occurr_dist.most_common() if w[1]<=5])/sum([w[1] for w in occurr_dist.most_common()])\n",
"print('words occurred <= 5 times in corpus:',percent)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"len(more_than_five) 13216\n",
"len(le_than_five) 33500\n"
]
}
],
"source": [
"word_freq = dist.most_common()\n",
"more_than_five = dict([(w[0],i) for i, w in enumerate(word_freq) if w[1]>5])\n",
"print('len(more_than_five)', len(more_than_five))\n",
"n = len(more_than_five)\n",
"le_than_five = dict([(w[0],n) for w in word_freq if w[1]<=5])\n",
"print('len(le_than_five)', len(le_than_five))\n",
"word_2_int = dict(more_than_five, **le_than_five)\n",
"int_2_word = dict([(v,k) for k,v in word_2_int.items()])\n",
"int_2_word[n] = '**unknown**'"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"n_embedding 13217\n"
]
}
],
"source": [
"n_embedding = len(int_2_word)\n",
"print('n_embedding', n_embedding)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Skip Gram model"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"class SkipGramWordVectorNet(nn.Module):\n",
" def __init__(self, n_embedding, embedding_freq, negative_sampling_size=10, embedding_dim=5):\n",
" #n_embedding: vocabulary size\n",
" #embedding_freq: used for negative sampling\n",
" #negative_sampling_size: how many negative samples to be used\n",
" #embedding_dim: dimension of word vectors\n",
" super(SkipGramWordVectorNet,self).__init__()\n",
" self.n_embedding = n_embedding\n",
" self.embedding_freq = Variable(torch.Tensor(embedding_freq)**(0.75))\n",
" self.negative_sampling_size = negative_sampling_size\n",
" self.word_embedding = nn.Embedding(n_embedding,embedding_dim)\n",
" self.context_embedding = nn.Embedding(n_embedding,embedding_dim)\n",
" def forward(self, input):\n",
" #return embedding\n",
" return self.word_embedding(input) + self.context_embedding(input)\n",
" def calculate_loss(self, word, context,alpha=0.1):\n",
" #word.size() batch_size\n",
" #context.size() batch_size*window_size\n",
" word_pos = word.view(-1,1).expand_as(context)\n",
" word_pos = self.word_embedding(word_pos)\n",
" context = self.context_embedding(context)\n",
" product_pos = (word_pos*context).sum(dim=-1).mean()\n",
" target_pos = Variable(torch.ones(product_pos.size()))\n",
" loss_positive = nn.functional.binary_cross_entropy_with_logits(product_pos,target_pos)\n",
" #negative sampling\n",
" negative_context = self.embedding_freq.multinomial(\n",
" self.negative_sampling_size*context.size(0)*context.size(1), replacement=True)\n",
" negative_context = negative_context.view(-1,self.negative_sampling_size*context.size(1))\n",
" word_neg = word.view(-1,1).expand_as(negative_context)\n",
" word_neg = self.word_embedding(word_neg)\n",
" negative_context = self.context_embedding(negative_context)\n",
" product_neg = (word_neg*negative_context).sum(dim=-1).mean()\n",
" target_neg = Variable(torch.zeros(product_neg.size()))\n",
" loss_negative = nn.functional.binary_cross_entropy_with_logits(product_neg,target_neg)\n",
"# # l2 regularization\n",
"# loss_l2 = sum([(w**2).sum(dim=-1).mean() \n",
"# for w in (word_pos,context,word_neg,negative_context)])\n",
"# loss_l2 = loss_l2*alpha\n",
"# loss = loss_positive + loss_negative + loss_l2\n",
" loss = loss_positive + loss_negative\n",
" return loss\n"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def batch_generator(batch_size=100,window_size=5):\n",
" n_corpus = len(corpus)\n",
" int_corpus = np.array([word_2_int[word] for word in corpus])\n",
" batches = np.random.permutation(range(window_size,n_corpus-window_size))\n",
" batches = torch.from_numpy(batches).split(batch_size)\n",
" for word in batches:\n",
" word = np.reshape(word.numpy(),[-1,1])\n",
" context = np.concatenate([word-i for i in range(-window_size, window_size+1) if i != 0],axis=1)\n",
" word = int_corpus[word]\n",
" context = int_corpus[context]\n",
" word = Variable(torch.from_numpy(word))\n",
" context = Variable(torch.from_numpy(context))\n",
" yield word, context\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch 0, epoch_loss 0.6667109716716615\n",
"epoch 1, epoch_loss 0.018745164965988353\n",
"epoch 2, epoch_loss 0.0018842961940436819\n",
"epoch 3, epoch_loss 0.0002975329528848227\n",
"epoch 4, epoch_loss 5.430509239544462e-05\n",
"epoch 5, epoch_loss 1.0657938134591576e-05\n",
"epoch 6, epoch_loss 2.3880927302944093e-06\n",
"epoch 7, epoch_loss 6.201304367043559e-07\n",
"epoch 8, epoch_loss 1.830951250724243e-07\n",
"epoch 9, epoch_loss 5.055349267557399e-08\n",
"epoch 10, epoch_loss 1.3097772866506914e-08\n",
"epoch 11, epoch_loss 5.317304774105847e-09\n",
"epoch 12, epoch_loss 2.8150436868030043e-09\n",
"epoch 13, epoch_loss 2.26767411670401e-09\n",
"epoch 14, epoch_loss 1.4075218655404199e-09\n",
"epoch 15, epoch_loss 8.210544215652449e-10\n",
"epoch 16, epoch_loss 5.864674393143502e-10\n",
"epoch 17, epoch_loss 8.601522511635899e-10\n",
"epoch 18, epoch_loss 5.86467432323113e-10\n",
"epoch 19, epoch_loss 1.9548914799172498e-10\n"
]
}
],
"source": [
"#average frequency for word appeared less than five times\n",
"le_than_five_freq = sum([w[1] for w in word_freq if w[1]<=5])/len(le_than_five)\n",
"embedding_freq = [w[1] for w in word_freq if w[1]>5] +[le_than_five_freq,]\n",
"#normalize the probability\n",
"embedding_freq = np.array(embedding_freq)/sum(embedding_freq)\n",
"\n",
"net = SkipGramWordVectorNet(n_embedding, embedding_freq,embedding_dim=10)\n",
"optimizer = optim.Adam(net.parameters(),lr=0.001)\n",
"\n",
"max_epoch = 20\n",
"batch_size = 500\n",
"window_size = 5\n",
"\n",
"loss_save = []\n",
"last_max = 0\n",
"for epoch in range(max_epoch):\n",
" g = batch_generator(batch_size, window_size)\n",
" epoch_loss = []\n",
" last_param = 0\n",
" for word, context in g:\n",
" optimizer.zero_grad()\n",
" loss = net.calculate_loss(word, context,alpha=0)\n",
" loss.backward()\n",
" optimizer.step()\n",
" epoch_loss.append(loss.data[0])\n",
" epoch_loss = np.mean(epoch_loss)\n",
" loss_save.append(epoch_loss)\n",
" if epoch%1 == 0:\n",
" print('epoch {}, epoch_loss {}'.format(epoch, epoch_loss))"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"torch.save(net.state_dict(),'SkipGramWordVectorNet.th')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x114874358>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nJUmSpB78fybLHuC7dGqTAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x118c0c358>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[12,4])\n",
"plt.plot(loss_save)\n",
"plt.xlabel('epoch')\n",
"plt.ylabel('epoch loss')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Some Naive Evaluation"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from sklearn.decomposition import PCA\n",
"pca = PCA(n_components=2)\n",
"x = net.word_embedding.weight.data.numpy() + net.context_embedding.weight.data.numpy()\n",
"y = pca.fit_transform(x[:200])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## test PCA visualization"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x11435fa90>"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nYjwAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1143d0320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.scatter(y[:200,0],y[:200,1],1)"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def get_encoding(word):\n",
" i = word_2_int[word]\n",
" w = net.word_embedding.weight.data.numpy() + net.context_embedding.weight.data.numpy()\n",
" return w[i,:]"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def consine_similarity(v1, v2):\n",
" res = v1.dot(v2)/(np.sum(v1**2)*np.sum(v2**2))**0.5\n",
" return res"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def word_similarity(word1, word2):\n",
" word1, word2 = word1.lower(), word2.lower()\n",
" v1, v2 = get_encoding(word1), get_encoding(word2)\n",
" res = consine_similarity(v1,v2)\n",
" return res"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def word_scatter(xs, labels,fontsize=14):\n",
" for i, t in enumerate(labels):\n",
" plt.annotate(t,xs[i],fontsize=fontsize)"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def normalize(xs):\n",
" for i in range(xs.shape[1]):\n",
" xs[:,i] = xs[:,i]-np.mean(xs[:,i])\n",
" xs[:,i] = xs[:,i]/(np.sum(xs[:,i]**2))**0.5\n",
" return xs"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## word similarity"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10f019e80>"
]
},
"execution_count": 58,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nQoUKceTIERnWSWExMTFcu3btuS4If/DgwRPLZ82a9bnONBUuXFiGjDKRhw8f8s033zB69Giio6MZ\nNGgQn3/+eZKv/RHCKFKwRKajtaZ169Zs2bKFo0ePUqlSJaMjpUvx8fHcvHnzuc423b1794nllVIU\nKFDguS4Iz5MnjwwBiae6du0aw4YN4/vvv6d48eJMmzaNDz/8UN4zwlBSsESms2jRIrp37860adMY\nNGiQ0XHSFK01ERERz3VB+PXr15MdosuZM+dznW0qWLAgNjY2BuylyKgOHDiAl5cXAQEBNGjQgLlz\n51KuXDmjY4lMSgqWyFTOnTtH5cqVefPNN9mxYwdWVpnjm59iY2O5du3ac10QHh0d/cTy1tbWzz1E\nJ8Mzwkjx8fHMnz+fUaNGERkZyYABAxgzZgw5c+Y0OprIZKRgiQyjfv36VKhQgblz5yb7+sOHD6lT\npw4hISGcOnUq1e/lY2kJCQncunXruYbobt++new68ufP/9RhuUenvHnzZpoyKjKGGzduMGLECBYt\nWkSRIkWYOnUqbdu2lWFDkWrkTu4i3Vm6dCl9+/ZN9u7Yz/LVV19x6NAhVq1alabLVWRkZLJDcsl9\nrUp8fPwTy+fIkSOxLJUrV46333472dJUqFAhsmbNasAeCpHyChYsyMKFC+nRowdeXl60b9+eBQsW\nMHfuXCpUqGB0PCGSJQVLpDtHjhxh/PjxtG/fnk8++STVtx8bG8v169ef62zT/fv3n1g+S5YsSb5W\npUqVKk898yRDdEL8vzfffJPDhw+zcOFCRo4cSZUqVejXrx/jxo0jd+7cRscTIimtdapP7u7uWqR9\nkZGRumPHjtrOzk47ODjoKVOm6GbNmmlPT0+ttdYPHjzQ3t7eulixYtrW1lZXrVpVb926NXH5Xbt2\naUDv3LlTV69eXdva2mp3d3d97NixJK8/Oo0dO1ZrrXW9evW0l5dX4rr+3VbRokW1Ukrb2NjotWvX\nPrGtLVu2aDc3N509e3Zdu3ZtfenSJb17925dqVIlbWdnp5s1a6Zv3ryZuNyRI0f0u+++q/Pnz6/t\n7e21q6urnj17tvbz89NTp07VQ4YM0YB2dnbWuXLleiLvo1O+fPm0i4uLbtCggW7Xrp0eNGiQnjJl\nil62bJnevn27PnXqlL5+/bqOj49PwX81ITKHmzdv6l69emmllC5cuLBetmyZTkhIMDqWyKAAf/2C\nXUcKlniqXr166RIlSujt27fr06dP648//ljnypUrsWC1a9dOv/nmm3rPnj363Llzes6cOdrGxkYH\nBARorf+/9FSrVk3//vvvOjg4WL/33nva2dlZJyQk6AcPHuiZM2fqHDly6PDwcB0eHq4jIiK01k8W\nrH+31bx5cw3o/v37P3Vbe/fu1SdPntTly5fXNWrU0DVr1tTz58/XPj4+On/+/Lpq1aq6e/fu2sPD\nQzs6Ouq8efNqa2vrZEtT9uzZNaCzZs2q3d3ddbt27XTt2rV1lixZ9MKFC/Xhw4f1hQsXdExMTOr+\n4wghtNZaHz16VFevXl0DulatWon/TxDCkqRgCYuJiIjQNjY2etWqVYnPRUZG6jx58mhPT0999uxZ\nrZTSFy5cSLJcixYtdO/evbXW/196Hj2rtX//fg3oS5cuaa21XrJkibazs3ti+48WrH+3tWjRIg3o\nIUOG6MuXL+t69erppk2b6kWLFulu3bppQNepU0fXqVNHv/HGGzpbtmxPPdvk4OCgq1Spohs3bqy7\ndOmiR4wYoWfNmqVXr16t8+XLp6dMmaLv3bunExISNKCHDx+emC0uLk7b2trq5cuXW+6ACyFeWnx8\nvF64cKEuUKCAtrKy0n379tV37twxOpbIQF6mYMk1WCJZ586dIy4ujurVqyc+Z2dnl3hB6fHjx9Fa\n4+LikmS5Bw8e0KBBgyTPPXrzz6JFiwJw/fp1ihcvnvi81pq7d+8mXrt0/fp1AgIC8Pb25vDhw2it\n6datGwBTp05l6tSpictu2bIl8efw8HCKFy+Ou7s7b7zxBlu2bGHhwoUUL14cBwcHtm7dyrRp0wgP\nD0/MMXr0aNauXZt4oXl0dDRxcXHkypUr2X2wtramYMGCXL9+/QWPqhAiJVhZWdGtWzdatWrF6NGj\n+eabb1izZg2TJ0/G09NTPjUrDCEFSySx/sRlfLeFcj4sCIDtQVf5tEyZJ+ZLSEhAKcXRo0efuMGk\nra1tksdXrlzh/PnzXL16laAg03onTpxIfHw8gYGBREVFkT17dmJjY5/Yjr+/f+KF3kopGjduTNmy\nZSlQoAAFCxakePHiVKpUidDQUBo1asTBgwcpUKAAAGvXrmXLli2JxQzg4MGDSW6o6enpybVr15gx\nYwalSpUiW7ZsNGzY8Iksj++jUirZG3MKIYyTL18+vv76a7p3746Xlxddu3ZlwYIFfP3117i5uRkd\n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\njbXW2iFDhthHHnkkw/tOnz5tAbthw4b0tosXL26Tk5Pd1AMiuVtqaqqNj4+3f/vb36yMxJ0KAAAg\nAElEQVSfn58FbM2aNe37779vT58+7XS8DD777DML2DFjxjgdRcQtgE32NmsdjWDdRa5tMQFXphNK\nlixJeHh4+nN58+alSJEiHD9+nISEBKpXr55hm4569erh4+PD7t27b+tcQUFBABw/fhyAzZs3s3r1\nagoUKJD+U65cOQC+//779PdVq1YNf3//O/y0InI9X19fmjZtypw5czh69Cjjxo0jNTWVXr16UaZM\nGZ555hmWL1/u+ML4kydP0qdPH2rVqkWfPn0czSLipDxOB5CbW7A1kVHxezl6NonTh8+Sr1TGtRfG\nmN/tRG+MueUXbGaG669v99rx19p1uVy0bNmS0aNH/+59pUqVSv9z/vz5b3keEbl9xYoV44UXXuCF\nF15g69atxMTEMHPmTGbNmkVISAidOnWic+fOhISEeDxb3759OXv2LB999BG+vr4eP7+It9AIlpda\nsDWR6Pk7OLBrC2kpyfyamsa6A6dZsDUxU+8PDQ1lx44dnD9/Pv25f//737hcLkJDQwHw8/MjLS3t\ntrP9+c9/ZteuXYSEhFCpUqUMP9rYVsSzatSowfjx4zl69CizZs3ivvvu44033qBChQo0adKEWbNm\nkZSU5JEsixcvZubMmURHR2cYXRfJjVRgealR8Xu5eOkiP88ezNnV0wFIc7kYFb83U+/v2LEj+fLl\n47nnnmPHjh2sXr2a7t270759eypVqgRA+fLl2blzJ3v37uXkyZNcvnw5U2336tWLX375haeeeooN\nGzZw4MABli9fTrdu3TIUdCLiOQEBATz99NMsXbqUH374gaFDh7J//36eeeYZgoKC6NWrF5s3b862\nTafPnz9P9+7dCQ0NZfDgwdlyDpG7iQosL3X0bBLJB/+DTU0hsFKtDM9nRr58+YiPj+fcuXPUqlWL\ntm3bUrduXWJiYtKPiYqKIjQ0lIiICEqUKMHatWsz1XZQUBBr167Fx8eH5s2bU7VqVXr16oW/v7/W\nXIl4gZCQEF577TW+//57vv76a1q2bElMTAwRERE88MADjBs3jlOnTrn1nIMGDeLIkSN89NFH+h4Q\nQZs9e62HRnzD9lnvcHHPt5TrMxPje2VNVPA9gawd+IjD6UTkbnP27FlmzZpFTEwMmzZtws/Pj7Zt\n29KlSxeaNGmSpfVSa9eupUGDBvTu3Ztx48a5MbWId7iTzZ5VYHmp+Zt/5G8P/w/+5apRou0rAATm\n9eXt9uG0qxHscDoRuZtt376dadOmMWPGDE6dOkXZsmV5/vnn6dy5MxUrVryttpKTk6lRowaXLl1i\n165dFChQIJtSizjnTgosTRF6qeDUo6RdPENw9foYroxcqbgSEXeoXr067777LomJicybN4/w8HDe\nfvttKlWqROPGjZkxYwaXLl3KVFvDhw9nz549TJ48WcWVyHU0guWlXn31VUaMGMHx48cpWrSo03FE\nJIc7cuQI06dPJyYmhu+//56CBQvSoUMHunTpQq1atW54e5ft27dTs2ZNOnTowPTp0x1ILeIZGsHK\nQWJjY6lfv76KKxHxiLJlyzJo0CD++9//smrVKv7yl78wY8YM6tSpQ3h4OGPGjEm/2TBAamoqkZGR\nFClShHffffeW7S9ZsoSCBQuSmpoKwP79+zHG0KNHj/RjXn31VR577DEAVq9eTe3atQkICKBUqVL0\n69cvw6bxd7I/K8DAgQOpUqUKgYGBlC9fnpdffpnk5OT014cOHUq1atWYPXs2FStWpGDBgrRr146T\nJ0/eWcdKrqUCywsdPHiQHTt20Lp1a6ejiEguY4yhYcOGfPLJJ/z0009MmTKFggUL8tJLLxEcHEz7\n9u1ZuHAh7777Lps2bWLcuHEUK1bslu3Wr1+f5ORkrs1erFy5kuLFi2fYZH7lypU0atSIxMREWrRo\nQY0aNdi6dStTp05l1qxZREdHZ2jzdvZnvSZ//vzExMSQkJDAxIkTmT17NsOHD8/Q7sGDB5kzZw5f\nfvklS5cuZevWrbr1hNy+291bxx0/2ovwj40bN84Cdt++fU5HERGx1lq7a9cu279/f1uyZEkLWMBW\nrFjR7tmzJ9Nt1K5d27711lvWWms7duxohw4dagMCAuzRo0ftxYsXrZ+fn12zZo0dNGiQrVSpkk1L\nS0t/77Rp06yfn5+9ePGitfb292e9mQ8++MBWrFgx/fHrr79u/f397dmzZ9Ofe/PNNzMcI7kP2osw\nZ4iLi6NKlSpUrlzZ6SgiIgCEhYUxatQofvzxR8LDw8mTJw8//PAD999/Pw0aNGDatGlcuHDhD9to\n1KhR+ojVqlWraNGiBbVr12blypX8+9//Jk+ePNSqVYuEhATq1KmDj8///YqqX78+KSkp7N+/P/25\n29mf9Zp58+ZRv359SpcuTYECBejXrx+HDx/OkDMkJITChQunPw4KCsrQhkhmqMDyMufOnWPlypW0\nadPG6SgiIr/z6aefsmPHDsaPH8+RI0d45513OHHiBF26dKF06dJERkaydu1arLUs2JrIQyO+ocLA\nRTw04hv8ylZj7dq1JCQkcO7cOWrWrEmjRo1YsWIFK1eupG7duvj5+f3h+a9fbH+jvVj/aH/W9evX\n8/TTT9OsWTPi4uLYunUrb7755u92sbiTPV5FfkubPXuZ+Ph4Ll++rPVXIuJ1jh07xksvvUTDhg3p\n1q0bPj4+vPzyywwYMIB169YxdepU5syZQ0xMDEEhf+JyxYfxC21MngJFSTybxJwz+Un+9VdGjhxJ\n/fr18fX1pVGjRkRFRVGqVCmaN28OXNlLde7cubhcrvRRrG+//RY/P7/bvk/X9dauXUtwcDBDhgxJ\nf+7QoUNZ6xSRm9AIlpeJjY2lWLFi1K1b1+koIiIZ9O7dm6SkJD788MMM03fGGOrVq8fUqVP56aef\niImJ4bzJx4lvppE4sRPHv3gD1+VkfjV+BJapzKeffkrjxo0BqFOnDkeOHGH9+vU0atQIgJ49e3L0\n6FF69uxJQkICixYtYuDAgfTu3Zt8+fLdcf777ruPxMREZs6cyYEDB/jggw+YNWtWlvpE5GZUYHmR\n1NRU/vWvf/H444+TJ48GF0XEe8yfP5/58+fz+uuvc9999930uAIFCtC5c2eKPTWCoKjJFKrdHqzF\nJ28AAD5BVUlNTU0vpgICAqhduzb+/v7UqnVl39Xg4GAWL17M1q1beeCBB+jSpQsdOnTgrbfeytJn\naN26NQMGDKBv375Ur16dZcuW8cYbb2SpTZGb0Y1Gvcjq1at5+OGH+fzzz3niiSecjiMiAsCZM2cI\nCwujdOnSbNy48XdrlG7koRHfkHiDzem1n6rcjXSj0btcXFwcefPmpWnTpk5HERFJN2DAAE6cOMHU\nqVMzVVwBDGhWhcC8GTeQDszry4BmVbIjoojX0TyUF4mNjaVx48YUKlTI6SgiIgB8/fXXTJ06lZdf\nfpk///nPmX7ftX1TR8Xv5ejZJILuCWRAsyraT1VyDU0Reom9e/dy//33M378eHr37u10HBERLl26\nRHh4OD4+Pmzfvp3AwECnI4k44k6mCDWC5SXi4uIAdHsGEfEar732GgcOHGDFihUqrkRuk9ZgeYm4\nuDiqV69OSEiI01FERPjuu+9499136datW/oVfyKSeSqwvMCpU6f49ttvdfd2EfEKKSkpREZGUrp0\naUaOHOl0HJG7kqYIvcDixYtxuVyaHhQRrzBy5Eh27NjBggULMuzJJyKZpxEsLxAbG0vp0qWJiLit\n9XMiIm6XkJDAsGHDePLJJ2nbtq3TcUTuWiqwHJaSksKSJUto1apVhq0nREQ8zeVyERUVRf78+Rk/\nfrzTcUTualmaIjTGjAJaAynA90Bna+1ZdwTLLVatWsX58+e1/kpEHPfBBx+wdu1aPv74Y0qVKuV0\nHJG7WlaHTJYB1ay11YF9QHTWI+UucXFxBAQE8OijjzodRURyscOHDzNw4ECaNm3Kc88953Qckbte\nlgosa+1Sa23q1YfrgbJZj5R7WGuJjY2lSZMmWdohXkQkK6y19OjRA5fLxeTJkzHGOB1J5K7nzkU/\nXYDFN3vRGNPNGLPJGLPpxIkTbjzt3Wvnzp0cOnRIVw+KiKM+++wzFi9ezPDhwylfvrzTcURyhFuu\nwTLGLAdK3+Clwdbar64eMxhIBWberB1r7RRgClzZKueO0uYwsbGxALRq1crhJCKSW504cYIXX3yR\n2rVr88ILLzgdRyTHuGWBZa197I9eN8Z0AloBj1onNja8i8XFxfHggw9SpkwZp6OISC7Vt29fzp07\nx9SpU/H19XU6jkiOkaUpQmNMc+BloI219pJ7IuUOP/30Exs2bNDVgyLimEWLFvHZZ58xaNAgqlat\n6nQckRwlq2uwJgAFgWXGmG3GmEluyJQrLFq0CNDmziLijHPnztGjRw/CwsKIjtYF4CLulqX7YFlr\nK7krSG4TGxvLvffeS/Xq1Z2OIiK5UHR0NImJicydOxd/f3+n44jkOLp1uAOSkpJYtmwZrVu31uXQ\nIuJx3377LRMnTqRPnz7UrVvX6TgiOZIKLAd8/fXXJCUlaXpQRDwuOTmZrl27EhISwptvvul0HJEc\nK0tThHJn4uLiKFCgAI0aNXI6iojkMsOGDWPv3r3Ex8dToEABp+OI5FgawfIwl8tFXFwczZo107oH\nEfGo//znP4wcOZLnnnuOpk2bOh1HJEdTgeVhW7Zs4dixY7o9g4h4VGpqKpGRkRQtWpQxY8Y4HUck\nx9MUoYfFxsbi4+PD448/7nQUEclF3nvvPTZv3sycOXMoVqyY03FEcjyNYHlYXFwc9erVo3jx4k5H\nEZFcYv/+/bz22mu0adOGJ5980uk4IrmCCiwPOnz4MNu2bdPVgyLiMdZaunXrRt68eZk4caJuDSPi\nIZoi9KCFCxcCaP2ViHjM1KlTWbFiBZMmTSI4ONjpOCK5hkawPCg2NpZKlSpRpUoVp6OISC5w9OhR\n+vfvz8MPP0xUVJTTcURyFRVYHnL+/HlWrFhBmzZtNEQvIh7Ru3dvfv31Vz788EN8fPR1L+JJmiL0\nkKVLl5KSkqL1VyLiEV988QVffvklI0aMoHLlyk7HEcl19E8aD4mLi6NIkSI89NBDTkcRkRzu9OnT\n9OrVixo1avDSSy85HUckV9IIlgekpaWxaNEiWrRoQd68eZ2OIyI5XP/+/Tl58iSLFy8mTx59zYs4\nQSNYHrB+/XpOnjypqwdFJNstX76cadOmMWDAAGrUqOF0HJFcSwWWB8TFxZEnTx6aN2/udBQRycEu\nXrxIt27dqFy5Mq+99prTcURyNY0de0BsbCwPP/wwhQsXdjqKiORgQ4YM4YcffmDVqlUEBgY6HUck\nV9MIVjbbv38/CQkJunpQRLLVxo0bGTt2LN27d6dhw4ZOxxHJ9VRgZbO4uDgAFVgikm1SUlKIjIyk\nTJkyvPPOO07HERE0RZjt4uLiqFq1Kn/605+cjiIiOdQ777zDzp07iY2N1VIEES+hEaxsdObMGVav\nXq2rB0Uk2+zevZs333yTp556SiPlIl5EBVY2WrJkCWlpafrSE5FskZaWRteuXSlQoADjxo1zOo6I\nXEdThNkoNjaWkiVLUqtWLaejiEgONHHiRNatW8f06dMpWbKk03FE5Doawcomly9fZvHixbRs2RJf\nX1+n44hIDnPo0CGio6Np1qwZzz77rNNxROQ3VGBlkzVr1vDLL79o/ZWIuJ21lh49egAwefJkjDEO\nJxKR39IUYTaJi4vD39+fJk2aOB1FRHKYmTNnsmTJEsaOHUtISIjTcUTkBjSClQ2stcTGxvLoo4+S\nP39+p+OISA5y/PhxXnzxRerUqUOvXr2cjiMiN6ECKxskJCRw4MABXT0oIm734osvcuHCBaZOnar1\nnSJeTAVWNliwYAEA0dHRGGNYuXLlHbXTqVMnWrVq5cZkInI3W7hwIbNnz2bw4MGEhYU5HUdE/oAK\nrGwwY8YMjDEsWrSIY8eOUa9evT88/uDBgxhj2LRpk4cSisjd5ty5c/To0YNq1aoxcOBAp+OIyC1o\nkbubHT9+nD179lC4cOFbFlZOuXz5Mnnz5nU6hojchldeeYWjR4/yxRdf4Ofn53QcEbkFjWC5Wfv2\n7QH45ZdfMMZQvnx5lixZQoMGDShSpAhFixalWbNmJCQkpL+nQoUKADz44IMYY2jUqFGGNseOHUtw\ncDBFihShc+fOXLp0Kf01ay0jR46kYsWKBAYGEh4ezqeffpr++rXRsVmzZvHII48QGBjI5MmTs7EH\nRMTdVq9ezaRJk+jbty+1a9d2Oo6IZIIKLDcrUqQIBQsWpGzZshw7dozvvvuOixcv0rdvXzZu3MjK\nlSspXLgwrVu3JiUlBYCNGzcCV7bWOXbsGPPnz09vb82aNezcuZPly5czZ84cvvzyS8aOHZv++quv\nvsrUqVN5//332b17N9HR0XTv3p1FixZlyBUdHU3Pnj3ZvXs37dq180BPiIg7JCcnExUVRYUKFRg2\nbJjTcUQkkzRF6EbJycmsWLGC8PBwjh07RunSpQH461//muG4adOmUahQITZu3Ej9+vUpUaIEAMWK\nFUt/zzWFChVi0qRJ+Pr6EhoaypNPPsnXX39NdHQ0Fy9eZMyYMSxdupQGDRoAV0bDNm7cyPvvv0/L\nli3T23nhhRd44oknsvPji0g2eOONN9i3bx/Lli3TbV9E7iIqsNxoxYoVXLx4kapVq3Ls2LH057//\n/nuGDBnChg0bOHHiBC6XC5fLxeHDh2/ZZlhYWIZLsYOCgtiwYQMAu3fvJjk5mebNm2e4k/Ply5cp\nX758hnYiIiKy+OlExNO2bdvGyJEj6dSpE4899pjTcUTkNqjAcoMFWxMZFb+XHXMn4OMXwK+BJTK8\n3qpVK8qWLcvkyZMJDg4mT548hIWFpU8R/pHfLkY3xuByuQDS/xsXF8e99977h+/Tv3xF7i6pqalE\nRkZSvHhx/vnPfzodR0RukwqsLFqwNZHo+Tu4lJLKpf0b8S9fg/iEE5CSBsCpU6fYs2cPEydOpHHj\nxgBs2bKF1NTU9DauXRGUlpZ2W+cOCwvD39+fQ4cO8cgjj7jpE4mINxgzZgxbtmzh888/p2jRok7H\nEZHbpAIri0bF7yXpchqXjx8g7fxJ8tXvyOWk8yQlXQauLHovXrw4H374IeXKlSMxMZEBAwaQJ8//\ndX3JkiUJDAwkPj6e8uXLExAQQOHChW957oIFC9K/f3/69++PtZaGDRty4cIF1q9fj4+PD926dcu2\nzy0i2ee///0vr7/+Ou3atfvdGk4RuTvoKsIsOno2CYCU4z+Abx4CKz4IQKrLAuDj48OcOXPYvn07\n1apVo1evXgwbNgx/f//0NvLkycO4ceP46KOPCAoKom3btpk+/7Bhwxg6dCijR4+matWqNGnShC++\n+CL91g8icndxuVxERUXh7+/P+++/n2F9pYjcPYy11uMnjYiIsDnlruUPjfiGxKtFlislGR+/AACC\n7wlk7UBN24nI7ZkyZQrdu3dnypQpREVFOR1HRABjzGZr7W1dLaYRrCwa0KwKgXmvXOV3rbgKzOvL\ngGZVnIwlIneha0sIGjduTNeuXZ2OIyJZoDVYWdSuRjBwZS3W0bNJBN0TyIBmVdKfFxHJDGstvXr1\nIiUlhSlTpmhqUOQupwLLDdrVCFZBJSJZMm/ePL766itGjhxJpUqVnI4jIlmkNVgiIg47ffo0oaGh\nlCtXjvXr12e4ylhEnHcna7D0t1hExGF///vfOXXqFPHx8SquRHIILXIXEXHQ0qVL+eSTT3jllVd4\n4IEHnI4jIm6iKUIREYdcuHCB8PBw/P392bZtGwEBAU5HEpEb0BShiMhdZMiQIRw8eJDVq1eruBLJ\nYTRFKCLigPXr1zN27Fj+93//lwYNGjgdR0TcTAWWiIiHpaSk0LVrV4KDgxkxYoTTcUQkG2iKUETE\nw95++2127drFwoULKVSokNNxRCQbaARLRMSDdu3axfDhw+nQoQMtW7Z0Oo6IZBMVWCIiHpKWlkbX\nrl0pVKgQY8eOdTqOiGQjTRGKiHjIhAkTWL9+PTNmzKBEiRJOxxGRbKQRLBERDzh48CCDBg2iRYsW\ndOzY0ek4IpLNVGCJiGQzay3du3fHx8eHSZMmYYxxOpKIZDNNEYqIZLMZM2awdOlSxo8fz7333ut0\nHBHxAI1giYhko59//pl+/fpRr149evbs6XQcEfEQFVgiItmoT58+XLhwgY8++ggfH33liuQW+tsu\nIpJNYmNjmTt3LkOGDCE0NNTpOCLiQcZa6/GTRkRE2E2bNnn8vCIinvLLL78QFhZGsWLF2LRpE35+\nfk5HEpE7ZIzZbK2NuJ33aJG7iEg2eOWVV/jpp59YsGCBiiuRXEhThCIibrZq1SomT55M3759efDB\nB52OIyIO0BShiIgbJSUlUb16dVwuF9u3byd//vxORxKRLNIUoYiIw/7xj3+wf/9+li9fruJKJBfT\nFKGIiJts2bKF0aNH06VLFx599FGn44iIg7JUYBljhhljthtjthljlhpjgtwVTETkbnL58mUiIyMp\nUaIEo0ePdjqOiDgsqyNYo6y11a21DwALgdfckElE5K7zz3/+k23btjFhwgSKFCnidBwRcViWCixr\n7bnrHuYHPL9iXkTEYfv27WPo0KG0b9+ev/71r07HEREvkOVF7saY4cBzwC9A4z84rhvQDdBmpyKS\nY7hcLqKioggMDGTChAlOxxERL3HLESxjzHJjzM4b/LQFsNYOttaWA2YCvW/WjrV2irU2wlobUaJE\nCfd9AhERB3344YesXr2a0aNHU6ZMGafjiIiXcNt9sIwx9wL/stZWu9Wxug+WiOQER44coWrVqkRE\nRLB8+XKMMU5HEpFscCf3wcrqVYSVr3vYFtiTlfZERO4W1lp69uzJ5cuXmTJlioorEckgq2uwRhhj\nqgAu4BDQI+uRRES839y5c4mLi2P06NFUrFjR6Tgi4mW0VY6IyG06deoUoaGhhISEsG7dOvLk0aYY\nIjmZtsoREfGAv//975w5c4bly5eruBKRG9JWOSIit9CoUSN6975ykXR8fDzTp0/nlVdeoXr16g4n\nExFvpQJLRCSTLly4QLdu3bj//vt59dVXnY4jIl5MY9siIpk0ePBgfvzxR9asWUNAQIDTcUTEi2kE\nS0QkExITExk3bhx+fn60atWKAQMG4HK5ADhz5gzPP/88RYoUITAwkMcee4xdu3YBcPHiRQoVKsS8\nefMytLds2TLy5s3Lzz//7PHPIiLZTwWWiMgtuFwuYmNjKVCgAGvXrmXy5MlMmTKF9957D4BOnTqx\nYcMGvvrqKzZu3Ei+fPlo3rw5SUlJ5M+fnw4dOhATE5OhzZiYGFq1akWpUqWc+Egiks00RSgicguH\nDx/G5XIxe/ZsatasSc2aNdm3bx9jxoyhdevWxMbGsmrVKho2bAjAjBkzuPfee5k5cyZdu3YlKiqK\nOnXqkJiYSHBwMGfOnGHBggV8/vnnDn8yEckuGsESEfkDO3fu5PDhw1SoUIGWLVumP1+3bl0SExNJ\nSEjAx8eHunXrpr9WuHBhwsPD2b17NwARERGEh4fzySefAPDZZ59RtGhRWrRo4dkPIyIeowJLROQG\nFmxNpN5by6jZ9Ams8aFMpaq33cb12+d07dqVjz/+GLgyPfj888/j6+vrrrgi4mVUYImI/MaCrYlE\nz9/Bnq8/J+XYXvIUKcOmzVv5csuR9GPWr19PUFAQoaGhuFwu1q1bl/7auXPn2LFjB2FhYenPdezY\nkSNHjjBhwgS2bNlC586dPfqZRMSzVGCJiPzGqPi9nD91jLNrphP4pwh8893D5Qun6fVCH/bu3cu8\nefMYNWoU/fr1o3LlyrRt25bu3buzZs0aduzYwbPPPkuhQoV45pln0tu85557ePLJJ3nppZdo2LAh\nlStXdvATikh2U4ElIvIbR88m4VugGPc0eI6izXoBkD/sYS4kp1C7dm2ioqKIjIykX79+AEybNo1a\ntWrRpk0batWqxaVLl1iyZAmBgYEZ2o2MjCQlJYXIyEiPfyYR8SxdRSgi8htB9wSSeDaJQg+2BaD0\nMyMACL4nkLUDF/7u+CJFiqQvYP8jx44do3DhwjzxxBPuDSwiXkcjWCIivzGgWRUC82ZcgB6Y15cB\nzarcUXuXLl3iwIEDvPXWW0RFRZEvXz53xBQRL6YCS0TkN9rVCObt9uEE3xOI4crI1dvtw2lXI/iO\n2hs5ciRVqlShaNGiDBkyxL1hRcQrGWutx08aERFhN23a5PHzioiIiNwuY8xma23E7bxHI1giIiIi\nbqYCS0RERMTNVGCJiIiIuJkKLBERERE3U4ElIiIi4mYqsERERETcTAWWiIiIiJupwBIRERFxMxVY\nIiIiIm6mAktERETEzVRgiYiIiLiZCiwRERERN1OBJSIiIuJmKrBERERE3EwFloiIiIibqcASERER\ncTMVWCIiIiJupgJLRERExM1UYImIiIi4mQosERERETcz1lrPn9SYE8Ahj5/4zhUHTjodwgupX25M\n/XJj6pebU9/cmPrlxtQvN5ad/RJirS1xO29wpMC62xhjNllrI5zO4W3ULzemfrkx9cvNqW9uTP1y\nY+qXG/O2ftEUoYiIiIibqcASERERcTMVWJkzxekAXkr9cmPqlxtTv9yc+ubG1C83pn65Ma/qF63B\nEhEREXEzjWCJiIiIuJkKLBERERE3U4GVCcaYYcaY7caYbcaYpcaYIKczeQtjzChjzJ6r/fOlMeYe\npzN5A2PMk8aYXcYYlzHGay4bdooxprkxZq8xZr8xZqDTebyFMSbGGHPcGLPT6SzewhhTzhizwhiz\n++rfoRedzuQtjDEBxpiNxpj/XO2bfzidyZsYY3yNMVuNMQudzgIqsDJrlLW2urX2AWAh8JrTgbzI\nMqCatbY6sA+IdjiPt9gJtAdWOx3EacYYX+B9oAUQBnQwxoQ5m8prfAw0dzqElz+NyMYAAAKcSURB\nVEkFXrLWhgF1gF76/yXdr8Aj1tr/AR4Amhtj6jicyZu8CCQ4HeIaFViZYK09d93D/ICuDLjKWrvU\nWpt69eF6oKyTebyFtTbBWrvX6Rxeohaw31p7wFqbAswG2jqcyStYa1cDp53O4U2stcestVuu/vk8\nV35hBjubyjvYKy5cfZj36o9+HwHGmLJAS+Ajp7NcowIrk4wxw40xPwId0QjWzXQBFjsdQrxOMPDj\ndY+PoF+YkgnGmPJADWCDs0m8x9VpsG3AcWCZtVZ9c8V7wMuAy+kg16jAusoYs9wYs/MGP20BrLWD\nrbXlgJlAb2fTetat+ubqMYO5MrQ/07mknpWZfhGRO2OMKQB8AfT9zSxCrmatTbu6XKUsUMsYU83p\nTE4zxrQCjltrNzud5Xp5nA7gLay1j2Xy0JnAv4DXszGOV7lV3xhjOgGtgEdtLrqx2m38P5PbJQLl\nrntc9upzIjdkjMnLleJqprV2vtN5vJG19qwxZgVX1vDl9oskHgLaGGMeBwKAQsaYT621zzoZSiNY\nmWCMqXzdw7bAHqeyeBtjTHOuDMu2sdZecjqPeKXvgMrGmArGGD/gaSDW4UzipYwxBpgKJFhrxzid\nx5sYY0pcu1LbGBMINEG/j7DWRltry1pry3Pl++Ubp4srUIGVWSOuTv1sB5py5UoFuWICUBBYdvU2\nFpOcDuQNjDF/McYcAeoCi4wx8U5ncsrViyB6A/FcWbA811q7y9lU3sEYMwtYB1QxxhwxxkQ6nckL\nPAT8P+CRq98p266OTAiUAVZc/V30HVfWYHnFLQnk97RVjoiIiIibaQRLRERExM1UYImIiIi4mQos\nERERETdTgSUiIiLiZiqwRERERNxMBZaIiIiIm6nAEhEREXGz/w/J+Cu2KhpJoQAAAABJRU5ErkJg\ngg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11fa03978>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[10,10])\n",
"# labels = 'monday wednesday friday saturday sunday quick fast slow heavy light sun moon cloud rock mountain bird flock car vehicle truck ship road highway ocean sky star earth rain wind look looked watch watched food eat meal restaurant day night actor actress drink dog cat lion cash money bank buck dollar nation thief police thieves rainy game child'.split(\" \")\n",
"labels = 'man woman boy girl actor actress waiter waitress male female gentleman lady father mother uncle aunt king queen'.split()\n",
"coords = [word_2_int[w] for w in labels]\n",
"coords = (net.word_embedding.weight+net.context_embedding.weight).data.numpy()[coords,:]\n",
"y_scatter = pca.fit_transform(coords)\n",
"plt.scatter(y_scatter[:,0], y_scatter[:,1])\n",
"word_scatter(y_scatter, labels)\n",
"for i in range(0,y_scatter.shape[0],2):\n",
" plt.plot(y_scatter[i:i+2,0],y_scatter[i:i+2,1],'black')\n",
"plt.title('PCA transformation of word vector')"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.053370657998711893"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('nice','good')"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.18168612455236227"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('good','fantastic')"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.4949775842633411"
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('good','terrible')"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.21886696150667054"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('wednesday','tuesday')"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.5449729855967852"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('mother','father')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.31344319068303583"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('king','queen')"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.15323361438198763"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('boy','girl')"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.47479045261738817"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('grandpa','grandma')"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.088847965935506909"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('hate','love')"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.40072640706939977"
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('ugly','beautiful')"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.68750683496709364"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('angry','happy')"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.19478769306704008"
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('do','did')"
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.64529264677146581"
]
},
"execution_count": 70,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('do','does')"
]
},
{
"cell_type": "code",
"execution_count": 71,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-0.47245496243304774"
]
},
"execution_count": 71,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"word_similarity('do','done')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## find most similar word"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def find_most_similar_word(word):\n",
" w = net.word_embedding.weight.data.numpy() + net.context_embedding.weight.data.numpy() \n",
" v = get_encoding(word)\n",
" v = np.reshape(v,[1,-1])\n",
" v = np.repeat(v,w.shape[0],axis=0)\n",
" w_norm = np.repeat(np.sum(w**2,axis=1,keepdims=True)**0.5,w.shape[1],axis=1)\n",
" v_norm = np.repeat(np.sum(v**2,axis=1,keepdims=True)**0.5,v.shape[1],axis=1)\n",
" score = np.sum(w/w_norm*v/v_norm, axis=1)\n",
"# score = np.sum(w*v, axis=1)\n",
" i = np.argmax(score)\n",
" score[i] = -1000000\n",
" i = np.argmax(score)\n",
" return int_2_word[i]\n"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"'.'"
]
},
"execution_count": 76,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"find_most_similar_word('tuesday')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Recurrent network\n",
"\n",
"A simple two-layer GRU net, use word vector as input. The IMDB polarity is based on the last output for each review, namely as logits[ -1, :, :]."
]
},
{
"cell_type": "code",
"execution_count": 72,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"class IMDBPolarityNet(nn.Module):\n",
" def __init__(self):\n",
" super(IMDBPolarityNet, self).__init__()\n",
" self.rnn = nn.GRU(input_size = 10, hidden_size = 128, num_layers = 2)\n",
" self.logits = nn.Linear(128,1)\n",
" def forward(self, input, hidden=None):\n",
" output = input\n",
" output, hidden = self.rnn(output, hidden)\n",
" output = self.logits(output)\n",
" return output, hidden"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [],
"source": [
"def review_generator(batch_size=10):\n",
" from glob import glob\n",
" pos_reviews = glob('./txt_sentoken/pos/*.txt')\n",
" neg_reviews = glob('./txt_sentoken/neg/*.txt')\n",
" review = []\n",
" for r in pos_reviews+neg_reviews:\n",
" with open(r,'r') as f:\n",
" review.append(word_tokenize(f.read()))\n",
" y = [1]*len(pos_reviews) + [0]*len(neg_reviews)\n",
" y = Variable(torch.Tensor(y))\n",
" n = len(review)\n",
" idx = np.random.permutation(range(n))\n",
" X_batch, y_batch = [], []\n",
" for i in idx:\n",
" if len(X_batch)==batch_size:\n",
" yield X_batch, y_batch\n",
" X_batch, y_batch = [], []\n",
" X = Variable(torch.LongTensor([word_2_int[w] for w in review[i]]))\n",
" X = net(X)\n",
" X_batch.append(X)\n",
" y_batch.append(y[i])"
]
},
{
"cell_type": "code",
"execution_count": 74,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"epoch 0, epoch_loss 0.6994680651468248, epoch_accuracy 0.4949748743718593\n",
"epoch 1, epoch_loss 0.692714944257209, epoch_accuracy 0.5185929648241207\n",
"epoch 2, epoch_loss 0.6900729309374364, epoch_accuracy 0.5366834170854271\n",
"epoch 3, epoch_loss 0.6842871628814007, epoch_accuracy 0.5678391959798995\n",
"epoch 4, epoch_loss 0.6772263427475589, epoch_accuracy 0.5743718592964824\n",
"epoch 5, epoch_loss 0.6677174911127618, epoch_accuracy 0.5889447236180905\n",
"epoch 6, epoch_loss 0.6438872749781489, epoch_accuracy 0.6251256281407035\n",
"epoch 7, epoch_loss 0.6025953400674178, epoch_accuracy 0.6743718592964824\n",
"epoch 8, epoch_loss 0.5448728612619429, epoch_accuracy 0.7190954773869347\n",
"epoch 9, epoch_loss 0.42960372964041915, epoch_accuracy 0.8085427135678392\n",
"epoch 10, epoch_loss 0.319650932884396, epoch_accuracy 0.8608040201005025\n",
"epoch 11, epoch_loss 0.19167901093524006, epoch_accuracy 0.9216080402010051\n",
"epoch 12, epoch_loss 0.09653767227574285, epoch_accuracy 0.964321608040201\n",
"epoch 13, epoch_loss 0.06727448264698511, epoch_accuracy 0.9778894472361809\n",
"epoch 14, epoch_loss 0.038581586912351584, epoch_accuracy 0.9879396984924623\n",
"epoch 15, epoch_loss 0.02944943632102155, epoch_accuracy 0.9884422110552764\n"
]
},
{
"ename": "KeyboardInterrupt",
"evalue": "",
"output_type": "error",
"traceback": [
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
"\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)",
"\u001b[0;32m<ipython-input-74-64a1287dae0b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0mepoch_accuracy\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlogits\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\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[0my\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m0.5\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[0m\n\u001b[1;32m 20\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0mbatch_size\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0moptimizer\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mstep\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0mepoch_loss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdata\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[0;32m~/anaconda3/envs/tensorflow/lib/python3.6/site-packages/torch/autograd/variable.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, retain_variables)\u001b[0m\n\u001b[1;32m 154\u001b[0m \u001b[0mVariable\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 155\u001b[0m \"\"\"\n\u001b[0;32m--> 156\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_variables\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 157\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 158\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mregister_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;32m~/anaconda3/envs/tensorflow/lib/python3.6/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(variables, grad_variables, retain_graph, create_graph, retain_variables)\u001b[0m\n\u001b[1;32m 96\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 97\u001b[0m Variable._execution_engine.run_backward(\n\u001b[0;32m---> 98\u001b[0;31m variables, grad_variables, retain_graph)\n\u001b[0m\u001b[1;32m 99\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 100\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mKeyboardInterrupt\u001b[0m: "
]
}
],
"source": [
"imdbNet = IMDBPolarityNet()\n",
"optimizer = optim.Adam(imdbNet.parameters(), lr=0.001)\n",
"\n",
"max_epoch = 100\n",
"batch_size = 10\n",
"\n",
"for epoch in range(max_epoch):\n",
" epoch_loss = []\n",
" epoch_accuracy = []\n",
" g = review_generator(batch_size)\n",
" for X_batch, y_batch in g:\n",
" loss = 0\n",
" optimizer.zero_grad()\n",
" for X, y in zip(X_batch, y_batch):\n",
" X = X.unsqueeze(1)\n",
" logits,h = imdbNet(X)\n",
" logits = logits[-1,:,:].squeeze()\n",
" loss = loss + nn.functional.binary_cross_entropy_with_logits(logits,y)\n",
" epoch_accuracy.append((logits.data[0] * (y.data[0]-0.5))>=0)\n",
" loss = loss/batch_size\n",
" loss.backward()\n",
" optimizer.step()\n",
" epoch_loss.append(loss.data[0])\n",
" epoch_loss = np.mean(epoch_loss)\n",
" epoch_accuracy = np.mean(epoch_accuracy)\n",
" print('epoch {}, epoch_loss {}, epoch_accuracy {}'.format(epoch, epoch_loss, epoch_accuracy))"
]
},
{
"cell_type": "markdown",
"metadata": {
"collapsed": false
},
"source": [
"## Evaluation\n",
"\n",
"Oops, I forgot to save loss and accuray for plotting. These 15 epoches took 1 day to train already."
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x119ea7588>"
]
},
"execution_count": 78,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x119eaa9e8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"out = '''epoch 1, epoch_loss 0.692714944257209, epoch_accuracy 0.5185929648241207\n",
"epoch 2, epoch_loss 0.6900729309374364, epoch_accuracy 0.5366834170854271\n",
"epoch 3, epoch_loss 0.6842871628814007, epoch_accuracy 0.5678391959798995\n",
"epoch 4, epoch_loss 0.6772263427475589, epoch_accuracy 0.5743718592964824\n",
"epoch 5, epoch_loss 0.6677174911127618, epoch_accuracy 0.5889447236180905\n",
"epoch 6, epoch_loss 0.6438872749781489, epoch_accuracy 0.6251256281407035\n",
"epoch 7, epoch_loss 0.6025953400674178, epoch_accuracy 0.6743718592964824\n",
"epoch 8, epoch_loss 0.5448728612619429, epoch_accuracy 0.7190954773869347\n",
"epoch 9, epoch_loss 0.42960372964041915, epoch_accuracy 0.8085427135678392\n",
"epoch 10, epoch_loss 0.319650932884396, epoch_accuracy 0.8608040201005025\n",
"epoch 11, epoch_loss 0.19167901093524006, epoch_accuracy 0.9216080402010051\n",
"epoch 12, epoch_loss 0.09653767227574285, epoch_accuracy 0.964321608040201\n",
"epoch 13, epoch_loss 0.06727448264698511, epoch_accuracy 0.9778894472361809\n",
"epoch 14, epoch_loss 0.038581586912351584, epoch_accuracy 0.9879396984924623\n",
"epoch 15, epoch_loss 0.02944943632102155, epoch_accuracy 0.9884422110552764'''.split('\\n')\n",
"\n",
"loss_data, accuracy_data = [], []\n",
"\n",
"for record in out:\n",
" keys = record.split(',')\n",
" loss_data.append(float(keys[1].split(' ')[-1]))\n",
" accuracy_data.append(float(keys[2].split(' ')[-1]))\n",
" \n",
"plt.figure(figsize=[12,4])\n",
"plt.plot(loss_data)\n",
"plt.xlabel('epoch')\n",
"plt.ylabel('loss')"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1252b4a20>]"
]
},
"execution_count": 86,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAuAAAAEkCAYAAABuT4Q2AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8XXWd//HXJ/vSLE2bliZt2gJpoZRiSyigsghqUVFw\nXAFxm58Mzui4MAg4ijiMiqOO46CIqIiOKKOIWDdwYRAVoZRCCy3QFrol3Zut2Zf7+f1xTtLbm5s2\nN03uyfJ+Ph553HvP+d5zP/fctHnnm+/5fs3dERERERGR9MiIugARERERkclEAVxEREREJI0UwEVE\nRERE0kgBXEREREQkjRTARURERETSSAFcRERERCSNFMBFZMIys5vMzM3s/GM8zvnhcW4amcpERGQy\nUwAXkbQws3lhiL0r6lrkyPRZiYiMrqyoCxARGUVfB+4Bth/jcVYBJwP7j7kiERGZ9BTARWTCcvf9\njEBodvc24Pljr0hERERDUEQkDcKx01vCh+8Jhzf0fb03bNM/ztrMlpvZr82sPtw2L2zzKjO7w8w2\nmFmzmbWb2bNm9hkzy0v2usnGgIfbHjaz6eHxdplZp5mtN7P3JTlO0jHg4THczLLM7JNmtik8zg4z\n+6KZ5QxyPq4wszVh/XvN7H/MrKLveCmc1yVm9mMz2xq+7r7wuP9lZtkJbbPM7B/N7LHw3LWZ2VNm\n9iEzy4hrdxNH+ayOUlNKn1H4nEwzu9rM/mpmTeFzNpvZd8ysejhtzeyu+O+dhGMc7fPMMbMbzeyF\n8LzeFe4vMbNrzewhM6s1s67wnK80s7OPcE5OMrM74z6nvWb2ZzP7YLh/avh5vGhmNsgxfhnWVjPY\n64jI+KEecBFJh4eBUuAjwFrg/rh9Tye0PRu4AfgLcCcwHegK910HnAQ8CvwayANeAdwEnG9mr3b3\n3iHWVAr8NTz2vUAu8DbgTjOLufv3h/72+BFwDvBboBl4PfAJYAZwWKA3s08AXwQagO8DTcBrwlqa\nhvqCZrYEeBxwYCVBaC4GTgT+EfgU0B22zQZ+CawAXgjr7QBeBdwKnAlcGR76YYb+WSWT0mcU/pLy\nq/Ac7AhrawbmAW8m+D7YlGrbY/Qz4AyCz/N+YG+4/WTgc8Aj4XtrAKqANwGvM7M3uvsD8QcyszcA\nPyX4/noA+DHB+T2N4Hvkm+7eYGb3EHyvvBr4fcIx5gCvA55099Uj8P5EJGruri996Utfo/5FEJIc\n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\nTKQ94O7eY2YfAh4EMoE73X29mV0d7r8duBGYBtxmZgA97l4TVc0iIiIiIsfC3D3qGkZcTU2Nr169\nOuoyRERERGSCM7MnU+0cjnoIioiIiIjIpKIALiIiIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIi\nImmkAC4iIiIikkYK4CIiIiIiaaQALiIiIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIiImmkAC4i\nIiIikkYK4CIiIiIiaaQALiIiIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIiImmkAC4iIiIikkYK\n4CIiIiIiaaQALiIiIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIiImmkAC4iIiIikkYK4CIiIiIi\naaQALiIiIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIiImmkAC4iIiIikkYK4CIiIiIiaaQALiIi\nIiKSRgrgIiIiIiJppAAuIiIiIpJGCuAiIiIiImkUeQA3s4vM7AUz22xm1yfZb2b23+H+dWa2LIo6\nRURERERGQqQB3MwygW8ArwMWAZeZ2aKEZq8DqsOvq4BvprVIEREREZERFHUP+HJgs7u/5O5dwD3A\nJQltLgF+4IHHgFIzm5XuQkVERERERkJWxK9fCeyIe1wLnDmENpXArvhGZnYVQQ85QKeZPTuypUoK\npgP7oy5iEtP5j47OfbR0/qOjcx8tnf9oLUz1CVEH8BHj7ncAdwCY2Wp3r4m4pElL5z9aOv/R0bmP\nls5/dHTuo6XzHy0zW53qc6IeglIHzIl7PDvclmobEREREZFxIeoA/gRQbWbzzSwHeCewMqHNSuDd\n4WwoZwFN7r4r8UAiIiIiIuNBpENQ3L3HzD4EPAhkAne6+3ozuzrcfzvwG+D1wGagDXjfEA59xyiV\nLEOj8x8tnf/o6NxHS+c/Ojr30dL5j1bK59/cfTQKERERERGRJKIegiIiIiIiMqkogIuIiIiIpNGE\nC+BHW9peRoeZzTGz/zOzDWa23sw+EnVNk5GZZZrZU2b2q6hrmWzMrNTM7jWz583sOTM7O+qaJgsz\n+1j4/86zZvZjM8uLuqaJzMzuNLO98ettmFmZmf3ezDaFt1OjrHEiG+T8fyn8v2edmf3czEqjrHEi\nS3b+4/ZdY2ZuZtOPdpwJFcCHuLS9jI4e4Bp3XwScBfyTzn0kPgI8F3URk9TXgAfc/STgNPQ5pIWZ\n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\nRERE0uj/AyErppBag3vcAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x124713f60>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=[12,4])\n",
"plt.plot(accuracy_data,'-o')\n",
"plt.xlabel('epoch',fontsize=20)\n",
"plt.ylabel('accuracy',fontsize=20)\n",
"plt.title('training set accuracy',fontsize=20)\n",
"plt.ylim([0,1])\n",
"plt.xlim([0,14])\n",
"plt.plot([0,14], [0.5, 0.5])"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda env:tensorflow]",
"language": "python",
"name": "conda-env-tensorflow-py"
},
"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.6.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@aradhyamathur
Copy link

Thanks, its very comprehensive

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment