|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- {
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# AlexNet\n",
- "\n",
- "\n",
- "第一个典型的卷积神经网络是 LeNet5 ,但是第一个开启深度学习的网络却是 AlexNet,这个网络在2012年的ImageNet竞赛中取得冠军。这网络提出了深度学习常用的技术:ReLU和Dropout。AlexNet网络结构在整体上类似于LeNet,都是先卷积然后在全连接,但在细节上有很大不同,AlexNet更为复杂,Alexnet模型由5个卷积层和3个池化Pooling层,其中还有3个全连接层构成,共有$6 \\times 10^7$个参数和65000个神经元,最终的输出层是1000通道的Softmax。AlexNet 跟 LeNet 结构类似,但使⽤了更多的卷积层和更⼤的参数空间来拟合⼤规模数据集 ImageNet,它是浅层神经⽹络和深度神经⽹络的分界线。\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import torch.nn as nn\n",
- "import torch\n",
- "from torch.autograd import Variable\n",
- "\n",
- "\n",
- "class AlexNet(nn.Module):\n",
- " def __init__(self, num_classes=1000, init_weights=False): \n",
- " super(AlexNet, self).__init__()\n",
- " self.features = nn.Sequential( \n",
- " nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2), \n",
- " nn.ReLU(inplace=True),\n",
- " nn.MaxPool2d(kernel_size=3, stride=2), \n",
- "\n",
- " nn.Conv2d(96, 256, kernel_size=5, padding=2),\n",
- " nn.ReLU(inplace=True),\n",
- " nn.MaxPool2d(kernel_size=3, stride=2),\n",
- "\n",
- " nn.Conv2d(256, 384, kernel_size=3, padding=1),\n",
- " nn.ReLU(inplace=True),\n",
- "\n",
- " nn.Conv2d(384, 384, kernel_size=3, padding=1),\n",
- " nn.ReLU(inplace=True),\n",
- "\n",
- " nn.Conv2d(384, 256, kernel_size=3, padding=1),\n",
- " nn.ReLU(inplace=True),\n",
- " nn.MaxPool2d(kernel_size=3, stride=2),\n",
- " )\n",
- " self.classifier = nn.Sequential(\n",
- " nn.Dropout(p=0.5),\n",
- " nn.Linear(256*6*6, 4096), #全链接\n",
- " nn.ReLU(inplace=True),\n",
- " nn.Dropout(p=0.5),\n",
- " nn.Linear(4096, 4096),\n",
- " nn.ReLU(inplace=True),\n",
- " nn.Linear(4096, num_classes),\n",
- " )\n",
- " if init_weights:\n",
- " self._initialize_weights()\n",
- "\n",
- " def forward(self, x):\n",
- " x = self.features(x)\n",
- " x = torch.flatten(x, start_dim=1) #展平或者view()\n",
- " x = self.classifier(x)\n",
- " return x\n",
- "\n",
- " def _initialize_weights(self):\n",
- " for m in self.modules():\n",
- " if isinstance(m, nn.Conv2d):\n",
- " #何教授方法\n",
- " nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') \n",
- " if m.bias is not None:\n",
- " nn.init.constant_(m.bias, 0)\n",
- " elif isinstance(m, nn.Linear):\n",
- " #正态分布赋值\n",
- " nn.init.normal_(m.weight, 0, 0.01) \n",
- " nn.init.constant_(m.bias, 0)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "torch.Size([1, 256, 6, 6])\n"
- ]
- }
- ],
- "source": [
- "test_x = Variable(torch.zeros(1, 3, 227, 227))\n",
- "net = AlexNet()\n",
- "test_y = net.features(test_x)\n",
- "print(test_y.shape)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 5,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "from torchvision.datasets import CIFAR10\n",
- "from torch.utils.data import DataLoader\n",
- "from torchvision import transforms as tfs\n",
- "from utils import train\n",
- "\n",
- "\n",
- "# 数据转换\n",
- "def data_tf(x):\n",
- " im_aug = tfs.Compose([\n",
- " tfs.Resize(227),\n",
- " tfs.ToTensor(),\n",
- " tfs.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])\n",
- " ])\n",
- " x = im_aug(x)\n",
- " return x\n",
- " \n",
- "train_set = CIFAR10('../../data', train=True, transform=data_tf)\n",
- "train_data = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)\n",
- "test_set = CIFAR10('../../data', train=False, transform=data_tf)\n",
- "test_data = torch.utils.data.DataLoader(test_set, batch_size=128, shuffle=False)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 6,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Epoch 0. Train Loss: 1.716735, Train Acc: 0.363671, Valid Loss: 1.407991, Valid Acc: 0.488726, Time 00:01:30\n",
- "Epoch 1. Train Loss: 1.358077, Train Acc: 0.511409, Valid Loss: 1.216201, Valid Acc: 0.570609, Time 00:01:46\n",
- "Epoch 2. Train Loss: 1.215461, Train Acc: 0.566356, Valid Loss: 1.082299, Valid Acc: 0.616495, Time 00:01:54\n",
- "Epoch 3. Train Loss: 1.127000, Train Acc: 0.601602, Valid Loss: 1.065414, Valid Acc: 0.620055, Time 00:01:44\n",
- "Epoch 4. Train Loss: 1.050764, Train Acc: 0.631494, Valid Loss: 1.040739, Valid Acc: 0.636867, Time 00:01:44\n",
- "Epoch 5. Train Loss: 0.986251, Train Acc: 0.652853, Valid Loss: 0.959156, Valid Acc: 0.660601, Time 00:01:44\n",
- "Epoch 6. Train Loss: 0.947220, Train Acc: 0.668278, Valid Loss: 0.942900, Valid Acc: 0.670491, Time 00:01:45\n",
- "Epoch 7. Train Loss: 0.909791, Train Acc: 0.682225, Valid Loss: 0.951977, Valid Acc: 0.662777, Time 00:01:45\n",
- "Epoch 8. Train Loss: 0.879402, Train Acc: 0.690337, Valid Loss: 0.917556, Valid Acc: 0.678797, Time 00:01:44\n",
- "Epoch 9. Train Loss: 0.850324, Train Acc: 0.700148, Valid Loss: 0.930344, Valid Acc: 0.672271, Time 00:01:44\n",
- "Epoch 10. Train Loss: 0.824315, Train Acc: 0.710698, Valid Loss: 0.897207, Valid Acc: 0.690170, Time 00:01:44\n",
- "Epoch 11. Train Loss: 0.793646, Train Acc: 0.720348, Valid Loss: 0.869203, Valid Acc: 0.705202, Time 00:01:45\n",
- "Epoch 12. Train Loss: 0.775788, Train Acc: 0.729779, Valid Loss: 0.845823, Valid Acc: 0.706092, Time 00:01:44\n",
- "Epoch 13. Train Loss: 0.748050, Train Acc: 0.738451, Valid Loss: 0.871864, Valid Acc: 0.701444, Time 00:01:47\n",
- "Epoch 14. Train Loss: 0.738969, Train Acc: 0.739390, Valid Loss: 0.848204, Valid Acc: 0.715487, Time 00:01:46\n",
- "Epoch 15. Train Loss: 0.713504, Train Acc: 0.748382, Valid Loss: 0.843485, Valid Acc: 0.712915, Time 00:01:46\n",
- "Epoch 16. Train Loss: 0.701577, Train Acc: 0.756993, Valid Loss: 0.860446, Valid Acc: 0.709059, Time 00:01:46\n",
- "Epoch 17. Train Loss: 0.670257, Train Acc: 0.764926, Valid Loss: 0.836197, Valid Acc: 0.714201, Time 00:01:46\n",
- "Epoch 18. Train Loss: 0.645218, Train Acc: 0.774776, Valid Loss: 0.857714, Valid Acc: 0.703916, Time 00:01:46\n",
- "Epoch 19. Train Loss: 0.630583, Train Acc: 0.779691, Valid Loss: 0.815565, Valid Acc: 0.720134, Time 00:01:46\n"
- ]
- }
- ],
- "source": [
- "net = AlexNet(num_classes=10)\n",
- "optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)\n",
- "criterion = nn.CrossEntropyLoss()\n",
- "\n",
- "res = train(net, train_data, test_data, 20, optimizer, criterion, use_cuda=True)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAEGCAYAAABo25JHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAAAydklEQVR4nO3deXyV5Zn/8c91su/7HrKwBghhEQgCKogLogIqVaxaa+swaq3WTjt26nSx/jpj23Gm40KtWlttKU7rBlZAlEVEEAgKSdi3ACFkIYHse+7fH88JxJiEE5KTk+Rc79frvHJynuVceTg833M/y32LMQallFLuy+bqApRSSrmWBoFSSrk5DQKllHJzGgRKKeXmNAiUUsrNebq6gO6KjIw0KSkpri5DKaUGlJ07d54xxkR1NG3ABUFKSgpZWVmuLkMppQYUETne2TQ9NKSUUm5Og0AppdycBoFSSrm5AXeOQCmluquxsZH8/Hzq6upcXYrT+fr6kpiYiJeXl8PLaBAopQa9/Px8goKCSElJQURcXY7TGGMoLS0lPz+f1NRUh5fTQ0NKqUGvrq6OiIiIQR0CACJCREREt1s+GgRKKbcw2EOg1aX8nW4TBAeLKvnl+3upa2x2dSlKKdWvuE0Q5J+t4eVPjvH5ibOuLkUp5WbOnTvH0qVLu73cvHnzOHfuXO8X1I7bBMFlyeGIwLajZa4uRSnlZjoLgubmro9QrFq1itDQUCdVdYHbXDUU4ufFmLhgth0rdXUpSik386Mf/YgjR44wYcIEvLy8CAwMJC4ujl27drF3714WLlzIyZMnqaur49FHH2XJkiXAhS51qqqquOGGG5g5cyZbtmwhISGBFStW4Ofn1yv1uU0QAGSmRrBs23Hqm5rx8fRwdTlKKRd48r097C2o6NV1jokP5mc3j+10+tNPP01ubi67du1i48aN3HjjjeTm5p6/xPPVV18lPDyc2tpapkyZwm233UZERMSX1nHo0CGWL1/Oyy+/zO23385bb73F3Xff3Sv1u82hIYDMoeHUN7WQnV/u6lKUUm5s6tSpX7rO/9lnn2X8+PFMmzaNkydPcujQoa8sk5qayoQJEwC47LLLyMvL67V63KpFMDUlHIBtR0uZYn+ulHIvXX1z7ysBAQHnn2/cuJGPPvqIrVu34u/vz6xZszq8D8DHx+f8cw8PD2pra3utHrdqEYQFeJMWG8S2Y3rCWCnVd4KCgqisrOxwWnl5OWFhYfj7+7N//34+++yzPq7OzVoEAFNTw3lzZz6NzS14ebhVDiqlXCQiIoIZM2aQnp6On58fMTEx56fNnTuXF198kYyMDEaNGsW0adP6vD63C4LM1Ahe33qcnFPlTEoKc3U5Sik38de//rXD1318fFi9enWH01rPA0RGRpKbm3v+9R/84Ae9WpvbfSWemmqdG9iuh4eUUgpwwyCICvJhWFQA247q/QRKKQVuGAQAmUMjyMo7S3OLcXUpSinlcu4ZBKnhVNY39fpNJUopNRC5aRBYd+xpdxNKKeWmQRAb4ktyhD+faQd0SinlnkEA1uGhHXlltOh5AqVUPxMYGAhAQUEBixYt6nCeWbNmkZWV1Svv58ZBEEF5bSMHijq+208ppVwtPj6eN9980+nv475BMPRCv0NKKeVMjz/++JfGI/j5z3/Ok08+yZw5c5g0aRLjxo1jxYoVX1kuLy+P9PR0AGpra1m8eDEZGRnccccdvdrXkNPuLBaRV4GbgGJjTHon88wCfgt4AWeMMVc5q572EsP8SQj1Y9uxMr45I/XiCyilBofVP4LCnN5dZ+w4uOHpTicvXryY733vezz00EMA/O1vf2PNmjU89thjBAcHc+bMGaZNm8b8+fM7HXP4d7/7Hf7+/mRnZ5Odnc2kSZN6rXxndjHxJ+B54PWOJopIKLAUmGuMOSEi0U6spUOZqeF8fLAEY4zbDGytlOp7EydOpLi4mIKCAkpKSggLCyMuLo7HHnuMTZs2YbPZOHXqFEVFRcTGxna4jk2bNvHII48AkJGRQUZGRq/V57QgMMZsEpGULmb5OvC2MeaEff5iZ9XSmcyh4bz9xSmOlFQxPDqor99eKeUKXXxzd6ZFixbx5ptvUlhYyOLFi1m2bBklJSXs3LkTLy8vUlJSOux+ui1nfWF15TmCkUCYiGwUkZ0i8o3OZhSRJSKSJSJZJSUlvVZA6/0EehmpUsrZFi9ezBtvvMGbb77JokWLKC8vJzo6Gi8vLzZs2MDx48e7XP7KK69k2bJlAOTm5pKdnd1rtbkyCDyBy4AbgeuBn4jIyI5mNMa8ZIyZbIyZHBUV1WsFJEf4ExPso+MTKKWcbuzYsVRWVpKQkEBcXBx33XUXWVlZTJ48mWXLlpGWltbl8g8++CBVVVVkZGTw61//mqlTp/Zaba7shjof6wRxNVAtIpuA8cDBvipARJiaGsG2o6V6nkAp5XQ5ORdOUkdGRrJ169YO56uqqgKswetbu5/28/PjjTfecEpdrmwRrACuEBFPEfEHMoF9fV1EZmo4xZX15JXW9PVbK6VUv+DMy0eXA7OASBHJB36GdZkoxpgXjTH7RGQNkA20AK8YY3I7W5+zTGtzP0FqZMBF5lZKqcHHmVcN3enAPL8BfuOsGhwxLCqQyEBvth8rY/HUJFeWopRyInc5/GtM97vNcds7i1tZ5wnC9YSxUoOYr68vpaWll7STHEiMMZSWluLr69ut5dxuzOKOZKZGsCqnkJNlNQwJ93d1OUqpXpaYmEh+fj69efl5f+Xr60tiYmK3ltEg4MI4xtuOlWkQKDUIeXl5kZqqXcl0xu0PDQGMigki1N9LO6BTSrklDQLAZhOmpISzPU/PEyil3I8GgV1majjHS2soLO+6rw+llBpsNAjspg3VcYyVUu5Jg8BudFwwQT6e2gGdUsrtaBDYediEySlh2iJQSrkdDYI2ModGcLSkmuJKPU+glHIfGgRtZNrvJ9hx7KyLK1FKqb6jQdBGekII/t4eenhIKeVWNAja8PKwcVlyGNv0hLFSyo1oELSTmRrOgaJKyqobXF2KUkr1CQ2CdjLt9xNs195IlVJuQoOgnYzEEHw8bRoESim3oUHQjo+nB5OS9H4CpZT70CDoQObQcPaerqC8ttHVpSillNNpEHRgamo4xkCW9kaqlHIDGgQdmJQUhreHTYevVEq5BQ2CDvh6eTB+SIgOVKOUcgsaBJ3ITI0gt6CCqvomV5eilFJOpUHQicyh4TS3GHYe136HlFKDmwZBJy5LDsPTJnp4SCk16GkQdMLf25P0hBA9YayUGvQ0CLqQOTSc7Pxz1DY0u7oUpZRyGg2CLkxLjaCx2fDFCT1PoJQavDQIujA5JQybwGd6eEgpNYg5LQhE5FURKRaR3IvMN0VEmkVkkbNqAaC+Cr5YBsY4vEiQrxdj4/V+AqXU4ObMFsGfgLldzSAiHsCvgA+cWIdl7wpY8RAcWd+txaamhvPFyXPUNep5AqXU4OS0IDDGbAIudkzlu8BbQLGz6jhv3CIIjIUtz3ZrsczUcBqaWth98pxz6lJKKRdz2TkCEUkAbgFedGDeJSKSJSJZJSUll/aGnj4w7UE4uhEKdjm82NTUcETQy0iVUoOWK08W/xZ43Bhz0WMuxpiXjDGTjTGTo6KiLv0dJ98H3kGw5TmHFwn192ZUTJAOVKOUGrRcGQSTgTdEJA9YBCwVkYVOfUffEJj8TdjzDpw97vBi04ZGsPP4WRqbW5xXm1JKuYjLgsAYk2qMSTHGpABvAg8ZY951+htnPggi8NlSxxdJDae2sZns/HInFqaUUq7hzMtHlwNbgVEiki8i3xaRB0TkAWe9p0NCEmDc1+Dz16HGscM9U1LDAXT4SqXUoOTMq4buNMbEGWO8jDGJxpg/GGNeNMZ85eSwMeabxpg3nVXLV0z/LjTWwI4/ODR7ZKAPw6MD2XZUzxMopQYf97yzOGYsDL8Wtr0IjbUOLZKZGk5WXhlNep5AKTXIuGcQAMx4FGrOwO7lDs0+fVgk1Q3NfLTP+bc8KKVUX3LfIEiZCfETYcvz0HLxu4avGxtDWmwQv3hvD9U6aplSahBx3yAQsVoFZUdg//sXnd3Lw8Yvb0mnoLyOZ9cd6oMClVKqb7hvEACMng9hKfDp/zrUGd1lyeHcOXUIr2w+xv7CCufXp5RSfcC9g8DmAZc/DKey4MRWhxZ5fG4aIX5ePPFOLi0tjvdkqpRS/ZV7BwHAhLvAPwI+dawzulB/b348bzQ7j5/lb1knnVycUko5nwaBtz9MXQIHV0PxfocWuW1SApmp4fzn6v2UVtU7uUCllHIuDQKAKf8Enn6w1bHO6ESEX96STk1DE/+xyrHwUEqp/kqDACAgAibeDbv/DypOO7TI8Oggllw5lLc+z2frEe16Qik1cGkQtLr8O2CarbuNHfTw7BEMCffjiXdzqG/SEcyUUgOTBkGr8FQYswCyXoU6xy4N9fP24Bfz0zlaUs3Lm446uUCllHIODYK2pj8C9RXw+WsOLzI7LZp542J5bv1hjpdWO7E4pZRyDg2CthImQcoVsHUpNDU4vNhPbxqLp0346Yo9GAduTFNKqf5Eg6C9GY9CZQHkvuXwIrEhvvzLdaP4+GAJq3IKnVicUkr1Pg2C9oZfA9FjYMuzDnU70eoblyczNj6YJ9/bQ2VdoxMLVEqp3qVB0J6Ida6geC8c/sjhxTw9bPzylnGUVNXzzNqDTixQKaV6lwZBR9Jvg+AEqzO6bpgwJJS7M5N5fWseOTq+sVJqgNAg6IinN0x7EPI+gVM7u7XoD64fRXiAD0+8m0OzdkqnlBoANAg6M+le8AlxuDO6ViF+XvzkptFk55ezbNtxJxWnlFK9R4OgM77BMPk+2LcSyrp3s9j88fHMHB7Jb9YcoLiizkkFKqVU79Ag6ErmAyAesPWFbi0mIjy1MJ365haeen+fk4pTSqneoUHQleA4GH8HfLEMqs90a9HUyAAemjWM93YXsOlgiZMKVEqpntMguJjpj0BTLWx/uduLPnDVMFIjA/jJilzqGrVTOqVU/6RBcDFRo2DkDbD9JWio6daivl4ePLUgneOlNSzdeMRJBSqlVM9oEDhixiNQWwa7lnV70ZkjIlkwIZ4XNx7hSEmVE4pTSqme0SBwRNLlkDgFtj4PzU3dXvyJG0fj42XjJ+/maqd0Sql+x6EgEJEAEbHZn48Ukfki4nWRZV4VkWIRye1k+l0ikm1/bBGR8d0vv4+IwMzH4GyedYiom6KDfPnXuWlsOVLKf6zap2GglOpXHG0RbAJ8RSQBWAfcB/zpIsv8CZjbxfRjwFXGmAzgKaD7e9i+NGqeda5g3S+gtPvH++/OTOIblyfz8ifHeHr1fg0DpVS/4WgQiDGmBrgVeM4YcwswpqsFjDGbgLIupm8xxpy1//oZkOhgLa4hAjf9N3h4w8pHoKWlm4sLT84fyz3Tkvn9pqM8vUbDQCnVPzgcBCJyOXAX8L79Nc9erOPbwOou3nyJiGSJSFZJiQuvyQ+Oh+t/Ccc3w85Xu724iPCLBWO5e1oSv//4KL9ac0DDQCnlco7uzL8H/BvwjjFmj4gMBTb0RgEiMhsrCGZ2No8x5iXsh44mT57s2j3nxLthz9vw4c9gxHUQmtStxUWEX8xPxxh48eMj2AR+eP0oRMRJBSulVNccahEYYz42xsw3xvzKftL4jDHmkZ6+uYhkAK8AC4wxpT1dX58QgZvt3VOvfKRbg9e0stmEpxakc+fUJJZuPMJ/rdWWgVLKdRy9auivIhIsIgHAXuCAiPywJ28sIknA28A9xpiBNZJLaBJc+yQc3QBf/OWSVmGzCb9cmM6dU4fwwoYjPLP2oIaBUsolHD1HMMYYUwEsBFYBScA9XS0gIsuBrcAoEckXkW+LyAMi8oB9lp8CEcBSEdklIlmX9Be4ymXfguSZ8METUFFwSauwwmAci6cM4fkNh/mfDzUMlFJ9z9FzBF72+wYWAs8bYxpFpMs9ljHmzotMvx+438H3739sNpj/LPxuBvzjMbjzDeuwUbdXI/zHLeMwBp5dfxhE+P61I51QsFJKdczRFsHvgTwgANgkIslAhbOKGjAihsGcn8LBNZDz90tejc0m/Oet47h9ciLPrjvEbz8aWEfKlFIDm0MtAmPMs0DbobqO26/2UZn/DHvegdX/CkNnQWD0Ja3GZhOevjWDFgO//egQgvDoNSN6t1allOqAoyeLQ0Tkv1uv5ReRZ7BaB8rmAQtesHomff9ferYqm/Cr2zK4bVIi//PRQZ5dd6iXilRKqc45emjoVaASuN3+qAD+6KyiBpyokTDrR9awlnve7dGqPGzCrxdlcOukBP77w4M8p2GglHIyR08WDzPG3Nbm9ydFZJcT6hm4pj8Ce1fAqh9AyhUQEHHJq/KwCb9ZNB4MPPPhQWw24Tuzh/disUopdYGjLYJaETl/56+IzABqnVPSAOXhCQuXQu05WPN4z1dnE37ztfHcMjGB33xwgBc2HO55jUop1QFHWwQPAK+LSIj997PAvc4paQCLGQtX/gA2/ieMvRXS5vVodR424b++Nh5jDL/54AAi8NAsbRkopXqXo1cN7QbGi0iw/fcKEfkekO3E2gammd+Hfe9Z9xYkTwe/0B6tzsMmPHP7BAzw6zUHKK9t5PHr07DZtG8ipVTv6NYIZcaYCvsdxgDfd0I9A5+nNyx4HqpLYO0TvbJKD5vwzNfGn++19LvLv6CusblX1q2UUj0ZqlK/knYmfiLMeNTqh+jwR72ySk8PG08tSOfH89J4P+c0d72yjbLqhl5Zt1LKvfUkCLRTnK5c9ThEjoSVj0Jd79yELSIsuXIYS++aRO6pcm5d+inHzlT3yrqVUu6ryyAQkUoRqejgUQnE91GNA5OXr3WjWcUp+OjnvbrqeePiWL5kGhV1Tdyy9FN25HU6EJxSSl1Ul0FgjAkyxgR38AgyxvTmCGWD05CpcPl3IOsPcGxTr656UlIY7zw0nXB/b+56eRsrd19aD6hKKdWTQ0PKEbOfgLBUWPldaOjdwzjJEQG8/dB0JgwJ5ZHlX7B042Htxlop1W0aBM7m7W9dRXQ2D9b/v15ffai/N3++fyoLJsTz6zUH+Le3c2hsbun191FKDV56eKcvpMyEKf8Eny2FA6shLgNiMyBuvPW4xB5LW/l4evDbOyaQFO7Pc+sPc+pcLUvvmkSQr1cv/QFKqcFMBtqhhMmTJ5usrIE1mBkAjbWw/SXIz4LCbKuF0Cowtk042H+GpVzSQDd/23GSH7+Tw/DoQF795hTiQ/167U9QSg1cIrLTGDO5w2kaBC5Sew6KcuH0bjidbYVDyQEw9hvFfEIgdpy91WAPh8iRVp9GF7H50Bke/MtO/H08ePWbUxgbH3LRZZRSg5sGwUDRWAvFey8Ew+lsKNoDTfb+/Tz9IGUGDL/GekQM77TVcKCwkvv+uJ3y2kae//okZqf17PCTUmpg0yAYyJqboPSQFQqnsuDIeii190QammQFwrA5kHol+AZ/adGiijq+/doO9hZU8OSCdO6ZluyCP0Ap1R9oEAw2Z/Pg8DrrcexjaKgCmycMmQbDr7bCIWYc2GxU1zfxyPIvWLe/mCVXDuXxuWl4aId1SrkdDYLBrKkBTm6DI+usfo0Kc6zXA6Jh+BwYNofm1Fk8ub6I17ceZ/qwCP7njgnEBPu6tGylVN/SIHAnlYXW4aPD66yftWWAYOInsidwGvfuy8R4B/DM7eOZPUrPGyjlLjQI3FVLMxTssloKR9bBye3UxUzk7tofkFUM/3RFKj+8Pg1vT72vUKnBrqsg0D3AYGbzgMTLYNbj8O21cMef8T2Ty998nuI7k/15+ZNjLHpxC3nag6lSbk2DwJ2Mvhnu+ju28pP8MP9RXl8YyfHSGm56bjMrdp1ydXVKKRfRIHA3Q2fBvSuhvpIrP7mbtV+PIC02iEff2MUP/76bmoYmV1eolOpjGgTuKOEy+NYasHkS8+YtvHEDPHL1cN78PJ+bn9vM3oLeGUhHKTUwOC0IRORVESkWkdxOpouIPCsih0UkW0QmOasW1YGoUfDtDyAgEs+/3Mr3U0+y7P5MKuuaWLj0U17fmqddWivlJpzZIvgTMLeL6TcAI+yPJcDvnFiL6khoEnzrA4gcDsvvYHrNRlY/egUzhkXw0xV7+Oc/7+RcjY6LrNRg57QgMMZsAroaQ3EB8LqxfAaEikics+pRnQiMgm++D4lT4a37idj3F/5w7xT+/cbRbDhQzLz//USHwlRqkHPlOYIE4GSb3/Ptr32FiCwRkSwRySopKemT4tyKbwjc8zaMvB7e/z62zc9w/8xU3npwOl6eNu74/VaeW3eI5hY9VKTUYOTKIOiow5sO9zTGmJeMMZONMZOjoqKcXJab8vKDO/4CGXfA+qdg7b+TkRDCP747k5vHx/PMhwe565XPyMkvd3WlSqle5soRyvKBIW1+TwR0BHZX8vCChS+CbyhsfR5qzxJ087P89o4JzBweyS/e28vNz29mamo4989MZc7oGO3ATqlBwJVBsBJ4WETeADKBcmPMaRfWowBsNrjhV+AfDhv/E+rKkdv+wNcmD2Fueiz/t+Mkf/w0jyV/3klyhD/fmpHKossSCfDRUU+VGqic1teQiCwHZgGRQBHwM8ALwBjzoogI8DzWlUU1wH3GmIt2IqR9DfWhbb+H1f8KKVfAncvBJwiApuYW1u4t4pVPjvL5iXME+3py59Qk7p2eokNjKtVPaadz6tJl/w3eecAaLvOutyAg4kuTPz9xlj9sPsaa3EIA5o2L4/6ZqYwfEuqCYpVSndEgUD1zYA38/V4ISYSJd1tjKceMg6CY87Pkn63htS15vLH9JJX1TUxODuP+K1K5dkysnkdQqh/QIFA9l/cprHwYyo5eeC0gCmLSrWCIHQcx6VQFpfK3zwv545ZjnCyrZUi4H/dNT+X2KUMIvJTzCE0NUFVojbNQew6Spn1lSE6l1MVpEKjeU3sWivZAYa41GlpRDhTvh+Z6a7qHN0SPpiUmnQMmmeUnQnj3dBjGJ5Q7pgzh3ukpDAn3h5YWqDkDlaetnXxFgfWzsvXnaag4bc3Tlpc/jL0FJn0DhmSCaGtDKUdoECjnam6E0sNWMBTmQJE9JKov3PxX5hlDbkMMgdSQ7FVBWEsZNtO+p1OxWhnBcRDU5tH6u4c37Hkbct60xmmOHGUFwvjFEBDZt3+zUgOMBoFyjcoiq8VQmAtFuTQUHaCg3pfcCj+ON4bQEhjLuLQ0pmaMxT9iCARGW/cyXEx9Fex9Fz5/3Rqv2eYFaTdaoTB0tnUJrFLqSzQIVL9S19jMqpzTvLYlj9355QT5eHLbZYncOz2F1MiA7q2seL8VCLuXW+MzhyRZJ7Qn3mWd3O4pY6CqGMqOWIevkqb1znqV6mMaBKrf+uLEWV7bksf7OadpbDZcNTKKb05P4aqRUdi6c7VRUz3sf98KhaMbAIHh11ithFE3dN3SMAZqyqydfekR6zBX6/Oyo9ZhqPMEhs2GCXdZrRAvvW9CDQwaBKrfK66sY/m2kyzbdpziynpSIvy55/IUvjY5kWBfBw4XtXU2D75YBl/8xTr5HBAFE75u9aPUVAelR+07+sP2nf0RqGvTh5J4WF10RwyD8GHWz4hh4B8BB1bDrr9C+UnwCYH0W61QSJysJ65Vv6ZBoAaMhqYW1uwp5LUteew8fhZ/bw9unZTAvZenMCImqHsra26CI+usVsKB1WCa20wUCBkCEUPb7OyHW89Dk8DTu/P1trRA3iewaxnsXQlNtRA50h42i62T20r1MxoEakDKPVXOn7bksXJ3AQ1NLUwfFsFtkxK5bmwMQd1tJVQWwaEPrG/14cMgLAW8fHteZF2FdeL6i2Vw8jMQGwybY4XCqHm98x5K9QINAjWglVU38MaOE/x12wnyz9bi7Wnj6lHRzJ8Qz9Vp0fh6ebi6REvpEauVsPsNqDhl9eI6bpEVCvGT9NCRcikNAjUoGGP4/MQ53ttdwPs5pymprCfA24Nrx8Qwf0I8M4dH4e3ZDy4dbWmGYx9brYT9/7DOS0SNtgJh7C0QOuTi61Cql2kQqEGnucWw7Wgp72UXsCqnkPLaRkL8vLghPZb54+PJHBrRP/o4qj0He96xWgr5O6zX4ibA6JutR9QoV1an3IgGgRrUGppa2Hy4hPd2n2btnkKqG5qJCvLhxnFx3Dw+nklJoUh/OCxTegT2vWc9Ttk/w5EjIe0mKxTiJ+rhI+U0GgTKbdQ2NLPhQDErdxWw/kAxDU0tJIT6cdP4OOaPj2dMXHD/CIWKAuu+h33vQd5m64qm4EQYfZMVDEmXg4cO9qN6jwaBckuVdY2s3VPEe9kFbD50hqYWQ2pkADekxzJvXBxj4/tJKNSUwcE1VigcWW+dU/ALh7R5kHYzDJ2lVx+pHtMgUG6vrLqBNbmFrMo5zdajpTS3GJIj/LkhPY4bx8WRntBPQqG+Cg5/ZJ1kPvgB1FeAdyCMuNZqKQy72hpGtC+VHrFqydsM4alWf07J08Hbv2/rUD2iQaBUG2XVDazdU8iq3EK2HLZaCkPC/ZiXHse8cXFkJIb0j1Boqodjn8C+lXBglb03V4H4CVYrYegsGDKt91sLzY1wYqu18z/4AZQesl4PTba6B29usHqCHZJp1TBstnUC3NZPLuNVHdIgUKoTZ6sb+HBvEatyT58/fJQQ6se8cbHcMC6OiUP6yYnmlmbrqqOjG61H/g5oaQJPX6sjvNZgiM24tB1ydSkc/tA6RHV4PdSXWzv7lJkwci6MuM5qDTTUwIktVg1HNlq9ywL4hUHqlVZrYegsa97+oPas1SX66d1WB4VhKTD86r4PLmOscTYCIh3rYdcJNAiUckB5TSMf7itiVc5pPjlUQmOzIT7ElxvGxTFvXCwTh4R1ryM8Z6qvhONbLgRD8V7r9fM75Fn2HfLQjpc3xhpg6OAa61t//g7AQGCMtdMfOdda3iew6zqqiuHox/Y6Nlg30oG1wx0622otpF5p1eVMrTvawmw4nQ2nd1nPz524MI9/5IWBjvzC7PVdbT1CEnq/ntLD1uG041vg+KfWtglOhBmPwqR7+rzDQg0CpbqpvLaRdfuKWJVTyKaDJTQ0txAb7Muc0dHMGR3N9GGR/eeOZrB2gsc2XQiG1h1yaFKbw0iZX975t84TP/HCt/64CZc+noMxcOaQFQhHNlg7wYZKq9uNuAlWDaFJ4BP05Yd3IPgEW8+76uOp7fucPWZ9yz+dfWHnX118YZ7wYRCXAXHjrVZS3Hjr23j1GWv7HF5nnZivKrTmjxptBcLwqyF5Rvd30i0tULLP2um37vxb6wmMsc6pxE+yrhQ7+ZnVEeLl34HJ3+6zoVc1CJTqgcq6RtbvL2Z1TiGfHCqhuqEZXy8b04dFcnVaNFenRRMf2o+6o279NtoaCsc+sQ71tPIKsL6pj7ze2vkHxTqnjuZGOLXTCoWjGyA/q13Hfx3w8G4TEO0Cw8sXyo5Zh3rqK6z5bZ4QldZmh59hjaPtyM7VGKsl1RoKx7dYQ656+Fg77mFXw/A5ED3mq/d3tDRbdRz/1BrP+8QW6zAUWN/6U2ZYgZI8w+rQsO3yeZ/CJ/9lvadvCEz9Z5j2oNMvAtAgUKqX1Dc1s/1YGev2FbN+fzEnymoASIsNYs5oKxQmDAnrH3c1t2pusg6VnNxu3cmcMhM8ffq+jsZa607r+kr7o8Ia66Ht7/Vtfj8/rcL+e7XVY2zc+Avf9qNG997J8tbzH4fXWzvpkn3W64GxViikXmm1II5vgROfXQijsFT7jn+mFSBhyY6936nP4ZNnrCvEvAJg8n1w+cNO671Wg0ApJzDGcKSkmvX7i1i/v5gdeWdpbjGE+Xsxe1Q0s9OiuXJkFCF+rjk5qHqo/JTVkjm8zvrZ+o0/clSbb/zTITi+Z+9TvA82/481FrfNwxphb8aj1nmWXqRBoFQfKK9tZNPBEjbsL2bDgWLO1jTiYRMmJ4fZWwsxDI++yMlX1T+1NFs77MAYCIxyznuUHYNP/9fql6qlGcZ9DWY+BtFpvbJ6DQKl+lhzi2HXybOs31/Mun3F7C+sBGBkTCDzx8czf3wCSRF6Q5bqQEUBbH0Bsl61DqeNvgmu+BfrpH4PaBAo5WKnztWybl8R7+0uYEeedYhhwpBQ5o+P56aMOKKDtQsJ1U51KWz7HWx7yTrZP2wOXPU4JGVe0upcFgQiMhf4X8ADeMUY83S76SHAX4AkwBP4L2PMH7tapwaBGuhOnavlvd0FrNxVwN7TFdgEpg2NYMGEeOaOjSPEX88pqDbqKmDHK1YrYeoSmPX4Ja3GJUEgIh7AQeBaIB/YAdxpjNnbZp4fAyHGmMdFJAo4AMQaYxo6W68GgRpMDhdXsXJ3ASt3nSKvtAYvD+Gqkdboa9eMjsbfW3sgVXYNNWBaLn6TXye6CgJnfsqmAoeNMUftRbwBLAD2tpnHAEFi3cMfCJQBTU6sSal+ZXh0IN+/diSPXTOCnFPlrNxVwD+yT/PRviL8vT24ZnQMCybEc8WIfjL6mnIdJ3by58wgSABOtvk9H2h/cOt5YCVQAAQBdxhjWtqvSESWAEsAkpKSnFKsUq4kImQkhpKRGMqP541me14ZK3YVsDr3NCt3FxDi58W8cbFMGxrBuIQQUiIC+k93F2rAc2YQdPQpbX8c6npgF3A1MAz4UEQ+McZUfGkhY14CXgLr0FDvl6pU/2GzCdOGRjBtaARPzh/L5sMlrNxVwIpdBSzfbn23CvLxJD0hhIzEEMYlhpCREMqQcL/+0UGeGnCcGQT5QNtRuhOxvvm3dR/wtLFOVBwWkWNAGrDdiXUpNWB4e9q4Oi2Gq9NiaGxu4VBRFTmnzpFzqpyc/HL++GkeDc1WIzrEz8sKBntApCeEkBCq4aAuzplBsAMYISKpwClgMfD1dvOcAOYAn4hIDDAKOOrEmpQasLw8bIyJD2ZMfDB3TLFea2hq4WBRJdn55eScOkd2fjkvbTpKU4vVcA4P8D4fDOMSQpg2LIJgX70qSX2Z04LAGNMkIg8DH2BdPvqqMWaPiDxgn/4i8BTwJxHJwTqU9Lgx5oyzalJqsPH2tJGeYH37t67ChrrGZvYXVpKTf84eEOW8sKGEFgNeHsL0YZFcNzaGa8fEEB2k9y8ovaFMKbdQ29DM7vxzrNtXxAd7ijhRVoMITEoK47oxMVw/NpaUyABXl6mcSO8sVkqdZ4zhQFElH+QWsXZvIXsKrGszRsUEcf3YGK4bG8vY+H4yhrPqNRoESqlOnSyrYe3eItbuKWRHXhktBhJC/bhubAzXjYllSkoYnh56D8NAp0GglHJIaVU96/YVs3ZvIZsOnaGhqYUwfy+uGW2dU0iLDSY62Kd/jc6mHKJBoJTqtur6Jj4+WMLaPYWs219MZd2Fm/5D/b2IDfYlOtiXmCAfYkOs57HBvsQE+xAT7EtkoE//GqDHzbmqiwml1AAW4OPJvHFxzBsXR0NTC5+fOMuJshqKK+oorKijqKKe4oo6DhRWUFJZT0u775Q2gaggn/OBERvsy6TkUK4aGU14gANjE6s+oy0CpVSPNbcYSqvqzwdEYUUdxRV1FFXUUWgPjFPnaqmsa0LE6oJ79qhoZo+KZmx8sHaX0Qf00JBSyuVaWgw5p8rZcKCYDQdKyM4/hzEQGejDrFFRzB4VzcwRkTq0p5NoECil+p0zVfXW0J4HSth0sITyWmtoz8uSw5g9Kpqr06IZGROol7H2Eg0CpVS/1tTcwq6T56zWwv4S9p627m2ID/FlVpp1CGn6sAgCfPS05qXSIFBKDSiF5XVsPFDMhgPFbD50huqGZrw9bKRE+pMUHkByhD/JEf4MCfcnOdyfxDB/Ha/hIjQIlFIDVkNTC1l5ZXx8qIQjxdWcKKvmRFkNdY0Xhi6xCcSF+JEU3iYgIvxJDg8gKcJfzzugl48qpQYwb08b04dHMn145PnXjDGUVNZzvKyGE6U19p/VHC+r4aN9RZyp+vJotyF+XiRH+DNjeCQLJyQwKjaor/+Mfk1bBEqpQaeqvokTpTWcKKvhRFk1x0trOFxcRdbxszS3GNJig1g4MYH54+OJD/Vzdbl9Qg8NKaUUUFJZz/vZBby7q4BdJ88hAlNTwlk4MYF56XGE+A/eQ0gaBEop1U7emWpW7Cpgxa5THD1TjbeHjdlpUSyckMDstOhB15+SBoFSSnXCGOtGt3e/KOC97AJKKusJ8vXkhvRYFk5IIHNoxKDoM0mDQCmlHNDU3MLWo6W8+0UBH+wppKq+iZhgH+aPj2fBhIQBPU6DBoFSSnVTXWMzH+0r4t0vTrHxQAlNLYbEMD+uGhnFrAF4g5sGgVJK9cDZ6gZW5xayfn8xW46cocZ+g9uU1DBmjYxm1qgohkf37+4wNAiUUqqX1Dc1szPvLBsPlrDxQDEHi6oAa1S3K0dGMWtUFDOGRxLYz1oLGgRKKeUkp87VsskeCp8eLqWqvgkvD2FycjizRlmHkfpD53kaBEop1QcamlrYefwsGw8W8/GBEvYXVgIQF+LLVSOjmJgUyvDoIEbEBBLs27f3LGgQKKWUCxSW1/HxwWI2Hihh86EzVNZfGO4zNtiXETGBjIwJYkR0ICNinBsQGgRKKeVizS2GU2drOVhUyaHiKg4VVXKwuJLDxVVf6kCvNSBGRAcxMiaQETGBDI8O6nHHedrpnFJKuZiHTUiK8Ccpwp9rxsScf72lxZB/tpZDxZUcLKriUHElh4qqWL79BLWNzefniwn24Z+uGMr9Vwzt9do0CJRSyoVsbQJizugvB8SpcxdaEAeLKokK8nFKDRoESinVD9lswpBwa2yFtgHhlPdy5spFZK6IHBCRwyLyo07mmSUiu0Rkj4h87Mx6lFJKfZXTWgQi4gG8AFwL5AM7RGSlMWZvm3lCgaXAXGPMCRGJdlY9SimlOubMFsFU4LAx5qgxpgF4A1jQbp6vA28bY04AGGOKnViPUkqpDjgzCBKAk21+z7e/1tZIIExENorIThH5RkcrEpElIpIlIlklJSVOKlcppdyTM4Ogo/up29+04AlcBtwIXA/8RERGfmUhY14yxkw2xkyOiorq/UqVUsqNOfOqoXxgSJvfE4GCDuY5Y4ypBqpFZBMwHjjoxLqUUkq14cwWwQ5ghIikiog3sBhY2W6eFcAVIuIpIv5AJrDPiTUppZRqx2ktAmNMk4g8DHwAeACvGmP2iMgD9ukvGmP2icgaIBtoAV4xxuQ6qyallFJfNeD6GhKREuD4JS4eCZzpxXJ6W3+vD/p/jVpfz2h9PdOf60s2xnR4knXABUFPiEhWZ50u9Qf9vT7o/zVqfT2j9fVMf6+vM069s1gppVT/p0GglFJuzt2C4CVXF3AR/b0+6P81an09o/X1TH+vr0NudY5AKaXUV7lbi0AppVQ7GgRKKeXmBmUQXGwcBLE8a5+eLSKT+rC2ISKyQUT22cdgeLSDeWaJSLl9nIZdIvLTvqrP/v55IpJjf++vDBDt4u03qs122SUiFSLyvXbz9Pn2E5FXRaRYRHLbvBYuIh+KyCH7z7BOlr3ouB1Oqu83IrLf/m/4jr1b+I6W7fLz4MT6fi4ip9r8O87rZFlXbb//a1Nbnojs6mRZp2+/HjPGDKoH1l3MR4ChgDewGxjTbp55wGqsjvGmAdv6sL44YJL9eRBWv0rt65sF/MOF2zAPiOxiusu2Xwf/1oVYN8q4dPsBVwKTgNw2r/0a+JH9+Y+AX3XyN3T5eXVifdcBnvbnv+qoPkc+D06s7+fADxz4DLhk+7Wb/gzwU1dtv54+BmOLwJFxEBYArxvLZ0CoiMT1RXHGmNPGmM/tzyux+lZq3z13f+ey7dfOHOCIMeZS7zTvNcaYTUBZu5cXAK/Zn78GLOxgUUc+r06pzxiz1hjTZP/1M6yOIV2ik+3nCJdtv1YiIsDtwPLeft++MhiDwJFxEByZx+lEJAWYCGzrYPLlIrJbRFaLyNi+rQwDrLWPEbGkg+n9YvthdWTY2X8+V26/VjHGmNNgfQEAOhqBr79sy29htfI6crHPgzM9bD909Wonh9b6w/a7AigyxhzqZLort59DBmMQODIOgiPzOJWIBAJvAd8zxlS0m/w51uGO8cBzwLt9WRswwxgzCbgB+I6IXNluen/Yft7AfODvHUx29fbrjv6wLZ8AmoBlncxysc+Ds/wOGAZMAE5jHX5pz+XbD7iTrlsDrtp+DhuMQeDoOAgXm8dpRMQLKwSWGWPebj/dGFNhjKmyP18FeIlIZF/VZ4wpsP8sBt7Ban635dLtZ3cD8Lkxpqj9BFdvvzaKWg+Z2X92NBSrqz+L9wI3AXcZ+wHt9hz4PDiFMabIGNNsjGkBXu7kfV29/TyBW4H/62weV22/7hiMQeDIOAgrgW/Yr36ZBpS3NuGdzX488Q/APmPMf3cyT6x9PkRkKta/U2kf1RcgIkGtz7FOKLbvGtxl26+NTr+FuXL7tbMSuNf+/F6s8Tfac+Tz6hQiMhd4HJhvjKnpZB5HPg/Oqq/teadbOnlfl20/u2uA/caY/I4munL7dYurz1Y744F1VctBrKsJnrC/9gDwgP25AC/Yp+cAk/uwtplYTddsYJf9Ma9dfQ8De7CugPgMmN6H9Q21v+9uew39avvZ398fa8ce0uY1l24/rFA6DTRifUv9NhABrAMO2X+G2+eNB1Z19Xnto/oOYx1fb/0cvti+vs4+D31U35/tn69srJ17XH/afvbX/9T6uWszb59vv54+tIsJpZRyc4Px0JBSSqlu0CBQSik3p0GglFJuToNAKaXcnAaBUkq5OQ0CpfqQWD2j/sPVdSjVlgaBUkq5OQ0CpTogIneLyHZ7H/K/FxEPEakSkWdE5HMRWSciUfZ5J4jIZ2369Q+zvz5cRD6yd373uYgMs68+UETeFGssgGWtd0Er5SoaBEq1IyKjgTuwOgubADQDdwEBWP0bTQI+Bn5mX+R14HFjTAbWnbCtry8DXjBW53fTse5MBavH2e8BY7DuPJ3h5D9JqS55uroApfqhOcBlwA77l3U/rA7jWrjQudhfgLdFJAQINcZ8bH/9NeDv9v5lEowx7wAYY+oA7Ovbbux909hHtUoBNjv9r1KqExoESn2VAK8ZY/7tSy+K/KTdfF31z9LV4Z76Ns+b0f+HysX00JBSX7UOWCQi0XB+7OFkrP8vi+zzfB3YbIwpB86KyBX21+8BPjbWGBP5IrLQvg4fEfHvyz9CKUfpNxGl2jHG7BWRf8caVcqG1ePkd4BqYKyI7ATKsc4jgNXF9Iv2Hf1R4D776/cAvxeRX9jX8bU+/DOUcpj2PqqUg0SkyhgT6Oo6lOptemhIKaXcnLYIlFLKzWmLQCml3JwGgVJKuTkNAqWUcnMaBEop5eY0CJRSys39f41PtrzHr3caAAAAAElFTkSuQmCC\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- },
- {
- "data": {
- "image/png": "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\n",
- "text/plain": [
- "<Figure size 432x288 with 1 Axes>"
- ]
- },
- "metadata": {
- "needs_background": "light"
- },
- "output_type": "display_data"
- }
- ],
- "source": [
- "import matplotlib.pyplot as plt\n",
- "%matplotlib inline\n",
- "\n",
- "plt.plot(res[0], label='train')\n",
- "plt.plot(res[2], label='valid')\n",
- "plt.xlabel('epoch')\n",
- "plt.ylabel('Loss')\n",
- "plt.legend(loc='best')\n",
- "plt.savefig('fig-res-alexnet-train-validate-loss.pdf')\n",
- "plt.show()\n",
- "\n",
- "plt.plot(res[1], label='train')\n",
- "plt.plot(res[3], label='valid')\n",
- "plt.xlabel('epoch')\n",
- "plt.ylabel('Acc')\n",
- "plt.legend(loc='best')\n",
- "plt.savefig('fig-res-alexnet-train-validate-acc.pdf')\n",
- "plt.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "# save raw data\n",
- "import numpy\n",
- "numpy.save('fig-res-alexnet_data.npy', res)"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "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.5.4"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
|