├── .gitignore ├── README.md ├── class_01 ├── .ipynb_checkpoints │ └── Intro-checkpoint.ipynb ├── Intro.ipynb ├── README.md ├── main.py ├── pack.py ├── pack.pyc └── qstn.py ├── class_02 ├── .ipynb_checkpoints │ └── KNN-checkpoint.ipynb └── KNN.ipynb ├── class_03 ├── face_data.py ├── face_rec.py ├── haarcascade_frontalface_alt.xml └── haarcascade_frontalface_default.xml ├── class_04 ├── .ipynb_checkpoints │ ├── DomColor-checkpoint.ipynb │ └── K-Means-checkpoint.ipynb ├── DomColor.ipynb ├── K-Means.ipynb ├── im.jpg ├── image.jpg └── img.jpg ├── class_05 ├── .ipynb_checkpoints │ └── DecisionTrees-checkpoint.ipynb └── DecisionTrees.ipynb ├── class_06 ├── .ipynb_checkpoints │ └── PCA-checkpoint.ipynb └── PCA.ipynb ├── class_07 ├── .ipynb_checkpoints │ ├── LinearRegression-checkpoint.ipynb │ ├── LogisticRegression-checkpoint.ipynb │ └── data_generate-checkpoint.ipynb ├── LinearRegression.ipynb ├── LogisticRegression.ipynb └── data_generate.ipynb ├── class_08 ├── .ipynb_checkpoints │ ├── NN-checkpoint.ipynb │ └── NN_Keras-checkpoint.ipynb ├── NN.ipynb └── NN_Keras.ipynb ├── class_09 ├── .ipynb_checkpoints │ ├── AutoEncoderSimple-checkpoint.ipynb │ ├── NN_MNIST-checkpoint.ipynb │ └── NN_numpy-checkpoint.ipynb ├── AutoEncoderSimple.ipynb ├── NN_MNIST.ipynb └── NN_numpy.ipynb ├── class_11 ├── .ipynb_checkpoints │ ├── CNN_MNIST-checkpoint.ipynb │ ├── ConvAE-checkpoint.ipynb │ └── Convolutions_basic-checkpoint.ipynb ├── CNN_MNIST.ipynb ├── ConvAE.ipynb ├── Convolutions_basic.ipynb └── img.jpg ├── class_13 ├── .ipynb_checkpoints │ ├── DifferentialEvolution-checkpoint.ipynb │ ├── GeneticAlgo-checkpoint.ipynb │ └── TransferLearning-checkpoint.ipynb ├── DifferentialEvolution.ipynb ├── GeneticAlgo.ipynb └── TransferLearning.ipynb ├── class_14 ├── .ipynb_checkpoints │ └── MarkovChains_Simple-checkpoint.ipynb └── MarkovChains_Simple.ipynb ├── class_15 ├── .ipynb_checkpoints │ ├── lstm_image_gen-checkpoint.ipynb │ └── rnn_addition-checkpoint.ipynb ├── lstm_image_gen.ipynb └── rnn_addition.ipynb ├── class_16 ├── .ipynb_checkpoints │ ├── DeepDream-checkpoint.ipynb │ └── NeuralArt-checkpoint.ipynb ├── DeepDream.ipynb ├── NeuralArt.ipynb └── results │ ├── 2007_000187.jpg │ ├── im_at_iteration_0.png │ ├── im_at_iteration_1.png │ ├── im_at_iteration_2.png │ ├── im_at_iteration_3.png │ ├── im_at_iteration_4.png │ ├── new_img_at_iteration_0.png │ ├── new_img_at_iteration_1.png │ ├── new_img_at_iteration_10.png │ ├── new_img_at_iteration_11.png │ ├── new_img_at_iteration_2.png │ ├── new_img_at_iteration_3.png │ ├── new_img_at_iteration_4.png │ ├── new_img_at_iteration_5.png │ ├── new_img_at_iteration_6.png │ ├── new_img_at_iteration_7.png │ ├── new_img_at_iteration_8.png │ └── new_img_at_iteration_9.png ├── class_17 ├── .ipynb_checkpoints │ ├── NaiveBayes-checkpoint.ipynb │ └── SVM-checkpoint.ipynb ├── NaiveBayes.ipynb └── SVM.ipynb ├── class_18 ├── .ipynb_checkpoints │ ├── SimpleWordVectors-checkpoint.ipynb │ ├── TrainSimpleW2V-checkpoint.ipynb │ └── scraping-checkpoint.ipynb ├── SimpleWordVectors.ipynb ├── TrainSimpleW2V.ipynb └── scraping.ipynb ├── class_19 ├── .ipynb_checkpoints │ └── SimpleSoftAttention-checkpoint.ipynb └── SimpleSoftAttention.ipynb ├── class_20 ├── .ipynb_checkpoints │ └── Simple_Q_RL-checkpoint.ipynb └── Simple_Q_RL.ipynb ├── class_21 ├── .ipynb_checkpoints │ ├── data_processing-checkpoint.ipynb │ └── sentimentAnalysis-checkpoint.ipynb ├── data_processing.ipynb └── sentimentAnalysis.ipynb ├── class_22 ├── .ipynb_checkpoints │ └── gan_mnist-checkpoint.ipynb ├── gan_mnist.ipynb └── mnist_dcgan.py └── data ├── imgs ├── 2007_000187.jpg ├── 2007_000241.jpg ├── 2007_000333.jpg ├── 2007_000423.jpg ├── 2007_000464.jpg ├── 2007_000480.jpg ├── 2007_000491.jpg ├── 2007_000529.jpg ├── 2007_000648.jpg ├── 2007_000664.jpg ├── 2007_000733.jpg ├── 2007_000837.jpg ├── 2007_000862.jpg ├── 2007_000876.jpg ├── 2007_001027.jpg ├── 2007_001073.jpg ├── 2007_001149.jpg ├── 2007_001154.jpg ├── 2007_001377.jpg ├── 2007_001397.jpg ├── 2007_001416.jpg ├── 2007_001457.jpg ├── 2007_001558.jpg ├── 2007_001568.jpg ├── 2007_001587.jpg ├── 2007_001774.jpg ├── 2007_001825.jpg ├── 2007_001834.jpg ├── 2007_002024.jpg ├── 2007_002132.jpg ├── 2007_002142.jpg ├── 2007_002262.jpg ├── 2007_002266.jpg ├── 2007_002268.jpg ├── 2007_002293.jpg └── 2007_002361.jpg ├── input.txt ├── monet ├── download (1).jpg ├── download (2).jpg ├── download (3).jpg ├── download (4).jpg ├── download (5).jpg ├── download (6).jpg ├── download (7).jpg ├── download (8).jpg ├── download.jpg ├── images (1).jpg ├── images (10).jpg ├── images (11).jpg ├── images (12).jpg ├── images (13).jpg ├── images (14).jpg ├── images (15).jpg ├── images (16).jpg ├── images (17).jpg ├── images (18).jpg ├── images (19).jpg ├── images (2).jpg ├── images (20).jpg ├── images (21).jpg ├── images (22).jpg ├── images (23).jpg ├── images (24).jpg ├── images (25).jpg ├── images (26).jpg ├── images (27).jpg ├── images (28).jpg ├── images (29).jpg ├── images (3).jpg ├── images (30).jpg ├── images (31).jpg ├── images (32).jpg ├── images (33).jpg ├── images (34).jpg ├── images (35).jpg ├── images (36).jpg ├── images (37).jpg ├── images (38).jpg ├── images (39).jpg ├── images (4).jpg ├── images (5).jpg ├── images (6).jpg ├── images (7).jpg ├── images (8).jpg ├── images (9).jpg └── images.jpg ├── movie_review ├── rt-polarity.neg └── rt-polarity.pos └── styles ├── donelli.jpg ├── groening.jpg ├── lundstroem.jpg ├── picasso.jpg ├── skrik.jpg └── style.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | *.csv 3 | *.pdf 4 | *.npy 5 | *.tsv 6 | *.bin 7 | *.zip 8 | *.png 9 | *.h5 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Perceptron Summer 2017 (Machine Learning Course) 2 | 3 | Coding Blocks, Pitampura. 4 | 5 | 6 | ### Contents 7 | 8 | 1. Class_01: Introduction to Python and Machine Learning 9 | 2. Class_02: K-Nearest Neighbours 10 | 3. Class_03: Face Recognition with KNN 11 | 4. Class_04: K-Means clustering and Most Dominant Color extraction 12 | 5. Class_05: Decision Trees and Random Forests 13 | 6. Class_06: Principal Component Analysis 14 | 7. Class_07: Linear Regression 15 | 8. Class_08: NeuralNets w/ Keras 16 | 9. Class_09: Neural Nets (numpy), MNIST classification, AutoEncoder (stacked, simple) 17 | 10. Class_11: ConvNets and Conv Auto Encoders 18 | 11. Class_13: Transfer Learning, Differential Evolution, Genetic Algorithm 19 | 12. Class_14: Markov chains, intro to RNN 20 | 13. Class_15: RNN for Addition, LSTM for image generation 21 | 14. Class_16: Deep Dream and Neural Art 22 | 15. Class_17: Naive Bayes and SVM 23 | 16. Class_18: Word2Vec and Scraping 24 | 17. Class_19: Attention mechanism 25 | 18. Class_20: Simple RL and Q-leanring 26 | 19. Class_21: Deep Q-learning and Sentiment Analysis 27 | 20. Class_22: Generative Adversarial Networks 28 | -------------------------------------------------------------------------------- /class_01/.ipynb_checkpoints/Intro-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 21, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "\n", 15 | "this is a string \n", 16 | "this is a new string\n", 17 | "--------------------------------------------------------------------------------\n", 18 | "16\n", 19 | "this is a string\n", 20 | "['ThiS I', ' a String']\n" 21 | ] 22 | } 23 | ], 24 | "source": [ 25 | "# Integers, Strings\n", 26 | "my_var = 1\n", 27 | "\n", 28 | "print type(my_var)\n", 29 | "\n", 30 | "my_var = 'this is a string'\n", 31 | "print my_var,\n", 32 | "print type(my_var)\n", 33 | "\n", 34 | "print 'this is ' + 'a new string'\n", 35 | "print '-'*80\n", 36 | "\n", 37 | "# Strings\n", 38 | "s = 'ThiS Is a String'\n", 39 | "print s.__len__()\n", 40 | "\n", 41 | "print s.lower()\n", 42 | "\n", 43 | "print s.lower().split('s')" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 49, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "0.1\n", 58 | "[1.0, 'ac', [1, 2, '111'], 0.1]\n", 59 | "111\n", 60 | "97 b\n", 61 | "--------------------------------------------------------------------------------\n", 62 | "[[1, 5], [4, 2], [7, 3], [0, -1]]\n", 63 | "[[0, -1], [1, 5], [4, 2], [7, 3]]\n", 64 | "[[0, -1], [4, 2], [7, 3], [1, 5]]\n", 65 | "[[1, 5], [4, 2], [7, 3], [0, -1], 12, 100]\n" 66 | ] 67 | } 68 | ], 69 | "source": [ 70 | "# Lists\n", 71 | "l = [1.0, 'ac', [1, 2, '111'], 0.1]\n", 72 | "print l[-1]\n", 73 | "print l\n", 74 | "\n", 75 | "print int(l[2][-1])\n", 76 | "\n", 77 | "print ord('a'), chr(98)\n", 78 | "\n", 79 | "print '-'*80\n", 80 | "\n", 81 | "nums = [[1, 5], [4, 2], [7, 3], [0, -1]]\n", 82 | "print nums\n", 83 | "\n", 84 | "# print nums.sort()\n", 85 | "# print nums\n", 86 | "\n", 87 | "print sorted(nums)\n", 88 | "print sorted(nums, key=lambda x:[x[1], x[0]])# , reverse=True)\n", 89 | "\n", 90 | "nums.append(12)\n", 91 | "nums.append(100)\n", 92 | "print nums" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 66, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "name": "stdout", 104 | "output_type": "stream", 105 | "text": [ 106 | "qwqwqww\n", 107 | "[[0, {0: 10, 'k': 1200}], 1221, 'val', 'qwqwqww', 0.1]\n" 108 | ] 109 | } 110 | ], 111 | "source": [ 112 | "# Dictionaries\n", 113 | "d = {2: 'val', 'k': 0.1, 'q': [0, {0: 10, 'k': 1200}]}\n", 114 | "# print d['my_key']\n", 115 | "print d.setdefault('my_key', 'qwqwqww')\n", 116 | "d['qqq'] = 1221\n", 117 | "print d.values()" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 79, 123 | "metadata": { 124 | "collapsed": false 125 | }, 126 | "outputs": [ 127 | { 128 | "name": "stdout", 129 | "output_type": "stream", 130 | "text": [ 131 | "(1, 2, 3)\n", 132 | "set([1, 2, 3, 4, 5, 6, 8, 9])\n", 133 | "set([0, 2, 3, 4, 6, 99, -1])\n" 134 | ] 135 | } 136 | ], 137 | "source": [ 138 | "# Tuples\n", 139 | "a = (1, 2, 3)\n", 140 | "print a\n", 141 | "\n", 142 | "# Sets\n", 143 | "p = set([1, 4, 3, 2, 2, 3, 4, 5, 6, 4, 5, 3, 8, 9])\n", 144 | "q = set([-1, 0, 4, 3, 2, 3, 3, 2, 6, 99])\n", 145 | "\n", 146 | "print p\n", 147 | "print q" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 85, 153 | "metadata": { 154 | "collapsed": false 155 | }, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "xrange(10, 20, 2)" 161 | ] 162 | }, 163 | "execution_count": 85, 164 | "metadata": {}, 165 | "output_type": "execute_result" 166 | } 167 | ], 168 | "source": [ 169 | "xrange(10, 20, 2)" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 98, 175 | "metadata": { 176 | "collapsed": false 177 | }, 178 | "outputs": [ 179 | { 180 | "name": "stdout", 181 | "output_type": "stream", 182 | "text": [ 183 | "NO\n" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "x = 20\n", 189 | "\n", 190 | "if x > 5 and x < 12:\n", 191 | " print \"YES\"\n", 192 | "elif x >= 12 and x<20:\n", 193 | " print 'MED'\n", 194 | "else:\n", 195 | " print 'NO'" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 105, 201 | "metadata": { 202 | "collapsed": false 203 | }, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "0 1.0\n", 210 | "1 ac\n", 211 | "2 [1, 2, '111']\n", 212 | "3 0.1\n", 213 | "1.0\n", 214 | "ac\n", 215 | "[1, 2, '111']\n", 216 | "0.1\n", 217 | "--------------------------------------------------------------------------------\n", 218 | "0\n", 219 | "1\n", 220 | "2\n", 221 | "3\n", 222 | "4\n", 223 | "5\n", 224 | "6\n", 225 | "7\n", 226 | "8\n", 227 | "9\n" 228 | ] 229 | } 230 | ], 231 | "source": [ 232 | "for ix in range(len(l)):\n", 233 | " print ix, l[ix]\n", 234 | "\n", 235 | "for ix in l:\n", 236 | " print ix\n", 237 | "\n", 238 | "print '-'*80\n", 239 | "i = 0\n", 240 | "while i<10:\n", 241 | " print i\n", 242 | " i += 1" 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": 117, 248 | "metadata": { 249 | "collapsed": false 250 | }, 251 | "outputs": [ 252 | { 253 | "name": "stdout", 254 | "output_type": "stream", 255 | "text": [ 256 | "1\n", 257 | "2\n", 258 | "Fizz\n", 259 | "4\n", 260 | "Buzz\n", 261 | "Fizz\n", 262 | "7\n", 263 | "8\n", 264 | "Fizz\n", 265 | "Buzz\n", 266 | "11\n", 267 | "Fizz\n", 268 | "13\n", 269 | "14\n", 270 | "FizzBuzz\n", 271 | "16\n", 272 | "17\n", 273 | "Fizz\n", 274 | "19\n", 275 | "Buzz\n", 276 | "Fizz\n", 277 | "22\n", 278 | "23\n", 279 | "Fizz\n", 280 | "Buzz\n", 281 | "26\n", 282 | "Fizz\n", 283 | "28\n", 284 | "29\n" 285 | ] 286 | } 287 | ], 288 | "source": [ 289 | "# FizzBuzz\n", 290 | "r = range(1, 30)\n", 291 | "for ix in r:\n", 292 | " if ix%3==0:\n", 293 | " if ix%5==0:\n", 294 | " print \"FizzBuzz\"\n", 295 | " else:\n", 296 | " print \"Fizz\"\n", 297 | " elif ix%5==0:\n", 298 | " print \"Buzz\"\n", 299 | " else:\n", 300 | " print ix" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 137, 306 | "metadata": { 307 | "collapsed": false 308 | }, 309 | "outputs": [ 310 | { 311 | "name": "stdout", 312 | "output_type": "stream", 313 | "text": [ 314 | "(12.01, 12)\n", 315 | "{'a': 10, 'pq': -3, 'b': 20}\n", 316 | "None\n" 317 | ] 318 | } 319 | ], 320 | "source": [ 321 | "def avg(*args, **kwargs):\n", 322 | " print args\n", 323 | " print kwargs\n", 324 | "\n", 325 | "\n", 326 | "\n", 327 | "print avg(12.01, 12, a=10, b=20, pq=-3)" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 141, 333 | "metadata": { 334 | "collapsed": false 335 | }, 336 | "outputs": [ 337 | { 338 | "name": "stdout", 339 | "output_type": "stream", 340 | "text": [ 341 | "1.41421356237\n" 342 | ] 343 | } 344 | ], 345 | "source": [ 346 | "from math import sqrt as sq\n", 347 | "\n", 348 | "print sq(2)" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 154, 354 | "metadata": { 355 | "collapsed": true 356 | }, 357 | "outputs": [], 358 | "source": [ 359 | "class MyClass:\n", 360 | " x = 100\n", 361 | " def __init__(self, x=0.1, y=10):\n", 362 | " self.x = x\n", 363 | " self.y = y\n", 364 | " def create_new_z(self, z=11):\n", 365 | " self.z = z\n", 366 | " \n", 367 | " def self_square(self):\n", 368 | " self.x = self.x**2\n", 369 | " self.y = self.y**2\n", 370 | " self.z = self.z**2\n", 371 | " \n", 372 | " def multiply_w_sq(self, p):\n", 373 | " self.self_square()\n", 374 | " return p*(self.x) + p*(self.y) + p*(self.z)" 375 | ] 376 | }, 377 | { 378 | "cell_type": "code", 379 | "execution_count": 155, 380 | "metadata": { 381 | "collapsed": false 382 | }, 383 | "outputs": [ 384 | { 385 | "name": "stdout", 386 | "output_type": "stream", 387 | "text": [ 388 | "<__main__.MyClass instance at 0x7f28d42e45a8>\n", 389 | "0.1\n", 390 | "10\n", 391 | "11\n", 392 | "0\n" 393 | ] 394 | } 395 | ], 396 | "source": [ 397 | "a = MyClass()\n", 398 | "print a\n", 399 | "print a.x\n", 400 | "print a.y\n", 401 | "a.create_new_z()\n", 402 | "print a.z\n", 403 | "\n", 404 | "print a.multiply_w_sq(-10)" 405 | ] 406 | } 407 | ], 408 | "metadata": { 409 | "kernelspec": { 410 | "display_name": "Python 2", 411 | "language": "python", 412 | "name": "python2" 413 | }, 414 | "language_info": { 415 | "codemirror_mode": { 416 | "name": "ipython", 417 | "version": 2 418 | }, 419 | "file_extension": ".py", 420 | "mimetype": "text/x-python", 421 | "name": "python", 422 | "nbconvert_exporter": "python", 423 | "pygments_lexer": "ipython2", 424 | "version": "2.7.12" 425 | } 426 | }, 427 | "nbformat": 4, 428 | "nbformat_minor": 2 429 | } 430 | -------------------------------------------------------------------------------- /class_01/Intro.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 21, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stdout", 12 | "output_type": "stream", 13 | "text": [ 14 | "\n", 15 | "this is a string \n", 16 | "this is a new string\n", 17 | "--------------------------------------------------------------------------------\n", 18 | "16\n", 19 | "this is a string\n", 20 | "['ThiS I', ' a String']\n" 21 | ] 22 | } 23 | ], 24 | "source": [ 25 | "# Integers, Strings\n", 26 | "my_var = 1\n", 27 | "\n", 28 | "print type(my_var)\n", 29 | "\n", 30 | "my_var = 'this is a string'\n", 31 | "print my_var,\n", 32 | "print type(my_var)\n", 33 | "\n", 34 | "print 'this is ' + 'a new string'\n", 35 | "print '-'*80\n", 36 | "\n", 37 | "# Strings\n", 38 | "s = 'ThiS Is a String'\n", 39 | "print s.__len__()\n", 40 | "\n", 41 | "print s.lower()\n", 42 | "\n", 43 | "print s.lower().split('s')" 44 | ] 45 | }, 46 | { 47 | "cell_type": "code", 48 | "execution_count": 49, 49 | "metadata": { 50 | "collapsed": false 51 | }, 52 | "outputs": [ 53 | { 54 | "name": "stdout", 55 | "output_type": "stream", 56 | "text": [ 57 | "0.1\n", 58 | "[1.0, 'ac', [1, 2, '111'], 0.1]\n", 59 | "111\n", 60 | "97 b\n", 61 | "--------------------------------------------------------------------------------\n", 62 | "[[1, 5], [4, 2], [7, 3], [0, -1]]\n", 63 | "[[0, -1], [1, 5], [4, 2], [7, 3]]\n", 64 | "[[0, -1], [4, 2], [7, 3], [1, 5]]\n", 65 | "[[1, 5], [4, 2], [7, 3], [0, -1], 12, 100]\n" 66 | ] 67 | } 68 | ], 69 | "source": [ 70 | "# Lists\n", 71 | "l = [1.0, 'ac', [1, 2, '111'], 0.1]\n", 72 | "print l[-1]\n", 73 | "print l\n", 74 | "\n", 75 | "print int(l[2][-1])\n", 76 | "\n", 77 | "print ord('a'), chr(98)\n", 78 | "\n", 79 | "print '-'*80\n", 80 | "\n", 81 | "nums = [[1, 5], [4, 2], [7, 3], [0, -1]]\n", 82 | "print nums\n", 83 | "\n", 84 | "# print nums.sort()\n", 85 | "# print nums\n", 86 | "\n", 87 | "print sorted(nums)\n", 88 | "print sorted(nums, key=lambda x:[x[1], x[0]])# , reverse=True)\n", 89 | "\n", 90 | "nums.append(12)\n", 91 | "nums.append(100)\n", 92 | "print nums" 93 | ] 94 | }, 95 | { 96 | "cell_type": "code", 97 | "execution_count": 66, 98 | "metadata": { 99 | "collapsed": false 100 | }, 101 | "outputs": [ 102 | { 103 | "name": "stdout", 104 | "output_type": "stream", 105 | "text": [ 106 | "qwqwqww\n", 107 | "[[0, {0: 10, 'k': 1200}], 1221, 'val', 'qwqwqww', 0.1]\n" 108 | ] 109 | } 110 | ], 111 | "source": [ 112 | "# Dictionaries\n", 113 | "d = {2: 'val', 'k': 0.1, 'q': [0, {0: 10, 'k': 1200}]}\n", 114 | "# print d['my_key']\n", 115 | "print d.setdefault('my_key', 'qwqwqww')\n", 116 | "d['qqq'] = 1221\n", 117 | "print d.values()" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 79, 123 | "metadata": { 124 | "collapsed": false 125 | }, 126 | "outputs": [ 127 | { 128 | "name": "stdout", 129 | "output_type": "stream", 130 | "text": [ 131 | "(1, 2, 3)\n", 132 | "set([1, 2, 3, 4, 5, 6, 8, 9])\n", 133 | "set([0, 2, 3, 4, 6, 99, -1])\n" 134 | ] 135 | } 136 | ], 137 | "source": [ 138 | "# Tuples\n", 139 | "a = (1, 2, 3)\n", 140 | "print a\n", 141 | "\n", 142 | "# Sets\n", 143 | "p = set([1, 4, 3, 2, 2, 3, 4, 5, 6, 4, 5, 3, 8, 9])\n", 144 | "q = set([-1, 0, 4, 3, 2, 3, 3, 2, 6, 99])\n", 145 | "\n", 146 | "print p\n", 147 | "print q" 148 | ] 149 | }, 150 | { 151 | "cell_type": "code", 152 | "execution_count": 85, 153 | "metadata": { 154 | "collapsed": false 155 | }, 156 | "outputs": [ 157 | { 158 | "data": { 159 | "text/plain": [ 160 | "xrange(10, 20, 2)" 161 | ] 162 | }, 163 | "execution_count": 85, 164 | "metadata": {}, 165 | "output_type": "execute_result" 166 | } 167 | ], 168 | "source": [ 169 | "xrange(10, 20, 2)" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 98, 175 | "metadata": { 176 | "collapsed": false 177 | }, 178 | "outputs": [ 179 | { 180 | "name": "stdout", 181 | "output_type": "stream", 182 | "text": [ 183 | "NO\n" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "x = 20\n", 189 | "\n", 190 | "if x > 5 and x < 12:\n", 191 | " print \"YES\"\n", 192 | "elif x >= 12 and x<20:\n", 193 | " print 'MED'\n", 194 | "else:\n", 195 | " print 'NO'" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 105, 201 | "metadata": { 202 | "collapsed": false 203 | }, 204 | "outputs": [ 205 | { 206 | "name": "stdout", 207 | "output_type": "stream", 208 | "text": [ 209 | "0 1.0\n", 210 | "1 ac\n", 211 | "2 [1, 2, '111']\n", 212 | "3 0.1\n", 213 | "1.0\n", 214 | "ac\n", 215 | "[1, 2, '111']\n", 216 | "0.1\n", 217 | "--------------------------------------------------------------------------------\n", 218 | "0\n", 219 | "1\n", 220 | "2\n", 221 | "3\n", 222 | "4\n", 223 | "5\n", 224 | "6\n", 225 | "7\n", 226 | "8\n", 227 | "9\n" 228 | ] 229 | } 230 | ], 231 | "source": [ 232 | "for ix in range(len(l)):\n", 233 | " print ix, l[ix]\n", 234 | "\n", 235 | "for ix in l:\n", 236 | " print ix\n", 237 | "\n", 238 | "print '-'*80\n", 239 | "i = 0\n", 240 | "while i<10:\n", 241 | " print i\n", 242 | " i += 1" 243 | ] 244 | }, 245 | { 246 | "cell_type": "code", 247 | "execution_count": 117, 248 | "metadata": { 249 | "collapsed": false 250 | }, 251 | "outputs": [ 252 | { 253 | "name": "stdout", 254 | "output_type": "stream", 255 | "text": [ 256 | "1\n", 257 | "2\n", 258 | "Fizz\n", 259 | "4\n", 260 | "Buzz\n", 261 | "Fizz\n", 262 | "7\n", 263 | "8\n", 264 | "Fizz\n", 265 | "Buzz\n", 266 | "11\n", 267 | "Fizz\n", 268 | "13\n", 269 | "14\n", 270 | "FizzBuzz\n", 271 | "16\n", 272 | "17\n", 273 | "Fizz\n", 274 | "19\n", 275 | "Buzz\n", 276 | "Fizz\n", 277 | "22\n", 278 | "23\n", 279 | "Fizz\n", 280 | "Buzz\n", 281 | "26\n", 282 | "Fizz\n", 283 | "28\n", 284 | "29\n" 285 | ] 286 | } 287 | ], 288 | "source": [ 289 | "# FizzBuzz\n", 290 | "r = range(1, 30)\n", 291 | "for ix in r:\n", 292 | " if ix%3==0:\n", 293 | " if ix%5==0:\n", 294 | " print \"FizzBuzz\"\n", 295 | " else:\n", 296 | " print \"Fizz\"\n", 297 | " elif ix%5==0:\n", 298 | " print \"Buzz\"\n", 299 | " else:\n", 300 | " print ix" 301 | ] 302 | }, 303 | { 304 | "cell_type": "code", 305 | "execution_count": 137, 306 | "metadata": { 307 | "collapsed": false 308 | }, 309 | "outputs": [ 310 | { 311 | "name": "stdout", 312 | "output_type": "stream", 313 | "text": [ 314 | "(12.01, 12)\n", 315 | "{'a': 10, 'pq': -3, 'b': 20}\n", 316 | "None\n" 317 | ] 318 | } 319 | ], 320 | "source": [ 321 | "def avg(*args, **kwargs):\n", 322 | " print args\n", 323 | " print kwargs\n", 324 | "\n", 325 | "\n", 326 | "\n", 327 | "print avg(12.01, 12, a=10, b=20, pq=-3)" 328 | ] 329 | }, 330 | { 331 | "cell_type": "code", 332 | "execution_count": 141, 333 | "metadata": { 334 | "collapsed": false 335 | }, 336 | "outputs": [ 337 | { 338 | "name": "stdout", 339 | "output_type": "stream", 340 | "text": [ 341 | "1.41421356237\n" 342 | ] 343 | } 344 | ], 345 | "source": [ 346 | "from math import sqrt as sq\n", 347 | "\n", 348 | "print sq(2)" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 154, 354 | "metadata": { 355 | "collapsed": true 356 | }, 357 | "outputs": [], 358 | "source": [ 359 | "class MyClass:\n", 360 | " x = 100\n", 361 | " def __init__(self, x=0.1, y=10):\n", 362 | " self.x = x\n", 363 | " self.y = y\n", 364 | " def create_new_z(self, z=11):\n", 365 | " self.z = z\n", 366 | " \n", 367 | " def self_square(self):\n", 368 | " self.x = self.x**2\n", 369 | " self.y = self.y**2\n", 370 | " self.z = self.z**2\n", 371 | " \n", 372 | " def multiply_w_sq(self, p):\n", 373 | " self.self_square()\n", 374 | " return p*(self.x) + p*(self.y) + p*(self.z)" 375 | ] 376 | }, 377 | { 378 | "cell_type": "code", 379 | "execution_count": 156, 380 | "metadata": { 381 | "collapsed": false 382 | }, 383 | "outputs": [ 384 | { 385 | "name": "stdout", 386 | "output_type": "stream", 387 | "text": [ 388 | "<__main__.MyClass instance at 0x7f28d42e4710>\n", 389 | "0.1\n", 390 | "10\n", 391 | "11\n", 392 | "-2210.1\n" 393 | ] 394 | } 395 | ], 396 | "source": [ 397 | "a = MyClass()\n", 398 | "print a\n", 399 | "print a.x\n", 400 | "print a.y\n", 401 | "a.create_new_z()\n", 402 | "print a.z\n", 403 | "\n", 404 | "print a.multiply_w_sq(-10)" 405 | ] 406 | } 407 | ], 408 | "metadata": { 409 | "kernelspec": { 410 | "display_name": "Python 2", 411 | "language": "python", 412 | "name": "python2" 413 | }, 414 | "language_info": { 415 | "codemirror_mode": { 416 | "name": "ipython", 417 | "version": 2 418 | }, 419 | "file_extension": ".py", 420 | "mimetype": "text/x-python", 421 | "name": "python", 422 | "nbconvert_exporter": "python", 423 | "pygments_lexer": "ipython2", 424 | "version": "2.7.12" 425 | } 426 | }, 427 | "nbformat": 4, 428 | "nbformat_minor": 2 429 | } 430 | -------------------------------------------------------------------------------- /class_01/README.md: -------------------------------------------------------------------------------- 1 | # Questions to practice 2 | 3 | ## Questions 4 | 5 | 1. Calculate length of a list 6 | 7 | 2. which will create a list: 8 | - `some_list = list()` 9 | - `some_list = list([1, 2, 3])` 10 | - `some_list = [1, 2, 3]` 11 | - `some_list = list(1, 2, 3)` 12 | 13 | 3. let a list be `s = [1, 3, 2, 1, 5, 3, 9]`. use `min(s)`, `max(s)`, `sum(s)`. 14 | also calculate the average of the list. 15 | 16 | 4. use `import random` and call `random.shuffle(some_list)` to shuffle the contents of the list `some_list`. 17 | 18 | 5. print the last 3 elements of a list without using for loops. 19 | 20 | 6. let `some_list = [1, 2, 3, 6, 5, 1, 7, 3]`. what is the output of: 21 | - `some_list[:-1]` 22 | - `some_list[-4:-2]` 23 | - `some_list[2:-3]` 24 | 25 | 7. Let this section of code 26 | ```python 27 | def extendList(val, list=[]): 28 | list.append(val) 29 | return list 30 | 31 | list1 = extendList(10) 32 | list2 = extendList(123,[]) 33 | list3 = extendList('a') 34 | 35 | print "list1 = %s" % list1 36 | print "list2 = %s" % list2 37 | print "list3 = %s" % list3 38 | ``` 39 | > What should be the output? 40 | 41 | > Why is it different? 42 | 43 | > How to fix this? 44 | 45 | . 46 | 8. given some code using classes: 47 | ```python 48 | class A(): 49 | x = 1 50 | 51 | a = A() 52 | print a.x 53 | 54 | b = [A()] * 10 55 | 56 | for ix in b: 57 | print ix.x 58 | 59 | b[2].x = 5 60 | 61 | for ix in b: 62 | print ix.x 63 | ``` 64 | 65 | > Why is output different from expected? 66 | 67 | > How can we fix this problem? 68 | 69 | . 70 | 9. use `sorted` in lists. consider the code below: 71 | ```python 72 | class Obj: 73 | def __init__(self, a=0, b=1): 74 | self.a = a 75 | self.b = b 76 | 77 | if __name__ == "__main__": 78 | objects = [Obj(1, 2), Obj(5, 4), Obj(7, 3), 79 | Obj(11, 42), Obj(8, 0), Obj(5, 9)] 80 | 81 | ``` 82 | > Sort the above list of objects using 83 | >> a as key 84 | >> b as key 85 | 86 | . 87 | 10. List and string slicing 88 | ```python 89 | s = "This is introduction to python for web development" 90 | 91 | # Obtain each word of the string in a list. 92 | ``` 93 | . 94 | 11. Print Pyramid patterns using for and while loops 95 | > @ 96 | > 97 | > @@ 98 | > 99 | > @@@ 100 | > 101 | > @@@@ 102 | > 103 | > @@@@@ 104 | 105 | . 106 | 12. What will the following code print 107 | ```python 108 | some_string = "abacdaegakialaop" 109 | print some_string.split('a', 2) 110 | ``` 111 | -------------------------------------------------------------------------------- /class_01/main.py: -------------------------------------------------------------------------------- 1 | import pack 2 | 3 | # github url: https://github.com/coding-blocks-archives/Perceptron_Summer_2017/ 4 | 5 | 6 | if __name__ == '__main__': 7 | print pack.avg(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) 8 | -------------------------------------------------------------------------------- /class_01/pack.py: -------------------------------------------------------------------------------- 1 | def avg(*args): 2 | return float(sum(args))/len(args) 3 | 4 | 5 | if __name__ == '__main__': 6 | print avg(1, 4, 3, 2, 5) -------------------------------------------------------------------------------- /class_01/pack.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_01/pack.pyc -------------------------------------------------------------------------------- /class_01/qstn.py: -------------------------------------------------------------------------------- 1 | """class A(): 2 | x = 1 3 | 4 | a = A() 5 | print a.x 6 | 7 | b = [A() for ix in range(5)] 8 | # for ix in range(5): 9 | # b.append(A()) 10 | 11 | for ix in b: 12 | print ix.x 13 | 14 | b[2].x = 10 15 | 16 | for ix in b: 17 | print ix.x""" 18 | 19 | 20 | class Obj: 21 | def __init__(self, x=0, y=10): 22 | self.x = x 23 | self.y = y 24 | 25 | objects = [Obj(1, 0), Obj(70, -1), Obj(11, -1), Obj(4, 2), Obj(-1, 10)] 26 | 27 | for ix in objects: 28 | print ix.x, ix.y 29 | 30 | print '-'*80 31 | X = sorted(objects, key=lambda z: [z.y, z.x]) 32 | 33 | for ix in X: 34 | print ix.x, ix.y 35 | 36 | # s.split('a', 2) 37 | -------------------------------------------------------------------------------- /class_03/face_data.py: -------------------------------------------------------------------------------- 1 | # Collect face data 2 | 3 | import numpy as np 4 | import cv2 5 | 6 | cam = cv2.VideoCapture(0) 7 | facec = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') 8 | 9 | data = [] 10 | ix = 0 11 | 12 | while True: 13 | ret, fr = cam.read() 14 | if ret == True: 15 | gray = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) 16 | faces = facec.detectMultiScale(gray, 1.3, 5) 17 | for (x,y,w,h) in faces: 18 | fc = fr[y:y+h, x:x+w, :] 19 | 20 | r = cv2.resize(fc, (50, 50)) 21 | 22 | if ix%10 == 0 and len(data)<20: 23 | data.append(r) 24 | 25 | cv2.rectangle(fr, (x, y), (x+w, y+h), (0, 0, 255), 2) 26 | ix += 1 27 | cv2.imshow('fr', fr) 28 | if cv2.waitKey(1) == 27 or len(data) >= 20: 29 | break 30 | else: 31 | print "error" 32 | break 33 | 34 | cv2.destroyAllWindows() 35 | data = np.asarray(data) 36 | 37 | print data.shape 38 | np.save('face_03', data) 39 | -------------------------------------------------------------------------------- /class_03/face_rec.py: -------------------------------------------------------------------------------- 1 | # Face recognition 2 | import numpy as np 3 | import cv2 4 | 5 | cam = cv2.VideoCapture(0) 6 | facec = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') 7 | font = cv2.FONT_HERSHEY_SIMPLEX 8 | 9 | # Load data in train (X and y) 10 | 11 | f_01 = np.load('face_01.npy').reshape((20, -1)) 12 | f_02 = np.load('face_02.npy').reshape((20, -1)) 13 | f_03 = np.load('face_03.npy').reshape((20, -1)) 14 | 15 | data = np.concatenate((f_01, f_02, f_03)) 16 | labels = np.zeros((data.shape[0],)) 17 | 18 | labels[20:40] = 1.0 19 | labels[40:] = 2.0 20 | 21 | names = { 22 | 0: 'Shubham', 23 | 1: 'Laksh', 24 | 2: 'Sachin' 25 | } 26 | 27 | # Define KNN functions 28 | 29 | def distance(x1, x2): 30 | d = np.sqrt(((x1-x2)**2).sum()) 31 | return d 32 | 33 | def knn(X_train, y_train, xt, k=5): 34 | vals = [] 35 | for ix in range(X_train.shape[0]): 36 | d = distance(X_train[ix], xt) 37 | vals.append([d, y_train[ix]]) 38 | sorted_labels = sorted(vals, key=lambda z: z[0]) 39 | neighbours = np.asarray(sorted_labels)[:k, -1] 40 | 41 | freq = np.unique(neighbours, return_counts=True) 42 | 43 | return freq[0][freq[1].argmax()] 44 | 45 | # Run the main loop 46 | 47 | while True: 48 | ret, fr = cam.read() 49 | if ret == True: 50 | gray = cv2.cvtColor(fr, cv2.COLOR_BGR2GRAY) 51 | faces = facec.detectMultiScale(gray, 1.3, 5) 52 | for (x,y,w,h) in faces: 53 | # Extract detected face 54 | fc = fr[y:y+h, x:x+w, :] 55 | # resize to a fixed shape 56 | r = cv2.resize(fr, (50, 50)).flatten() 57 | 58 | text = names[int(knn(data, labels, r))] 59 | cv2.putText(fr, text, (x, y), font, 1, (255, 255, 0), 2) 60 | 61 | cv2.rectangle(fr, (x, y), (x+w, y+h), (0, 0, 255), 2) 62 | cv2.imshow('fr', fr) 63 | if cv2.waitKey(1) == 27: 64 | break 65 | else: 66 | print "error" 67 | break 68 | 69 | cv2.destroyAllWindows() -------------------------------------------------------------------------------- /class_04/im.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_04/im.jpg -------------------------------------------------------------------------------- /class_04/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_04/image.jpg -------------------------------------------------------------------------------- /class_04/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_04/img.jpg -------------------------------------------------------------------------------- /class_11/img.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_11/img.jpg -------------------------------------------------------------------------------- /class_13/.ipynb_checkpoints/GeneticAlgo-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import random" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 80, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "# Define some initial params\n", 26 | "# Dimensionality\n", 27 | "Dn = 10\n", 28 | "\n", 29 | "# Mutation probability\n", 30 | "M = 0.02\n", 31 | "\n", 32 | "# Population size\n", 33 | "NP = 100\n", 34 | "\n", 35 | "# No. of generations\n", 36 | "G = 50" 37 | ] 38 | }, 39 | { 40 | "cell_type": "code", 41 | "execution_count": 81, 42 | "metadata": { 43 | "collapsed": false 44 | }, 45 | "outputs": [ 46 | { 47 | "name": "stdout", 48 | "output_type": "stream", 49 | "text": [ 50 | "[ 0.94228917 0.88850707]\n" 51 | ] 52 | } 53 | ], 54 | "source": [ 55 | "r = np.random.random((Dn,))\n", 56 | "def f(x):\n", 57 | " return ((x + r)**2).sum()\n", 58 | "\n", 59 | "print r" 60 | ] 61 | }, 62 | { 63 | "cell_type": "code", 64 | "execution_count": 82, 65 | "metadata": { 66 | "collapsed": false 67 | }, 68 | "outputs": [ 69 | { 70 | "name": "stdout", 71 | "output_type": "stream", 72 | "text": [ 73 | "20\n" 74 | ] 75 | } 76 | ], 77 | "source": [ 78 | "# Generate population\n", 79 | "pop = []\n", 80 | "\n", 81 | "for ix in range(NP):\n", 82 | " # generate a random vector\n", 83 | " vec = np.random.uniform(-10, 10, (Dn,))\n", 84 | " \n", 85 | " # Add to population\n", 86 | " pop.append(vec)\n", 87 | "\n", 88 | "print len(pop)" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 85, 94 | "metadata": { 95 | "collapsed": true 96 | }, 97 | "outputs": [], 98 | "source": [ 99 | "def crossover(parent_1, parent_2):\n", 100 | " child_1 = np.zeros(parent_1.shape)\n", 101 | " child_2 = np.zeros(parent_2.shape)\n", 102 | " \n", 103 | " dim = int(parent_1.shape[0] / 2.0)\n", 104 | " \n", 105 | " child_1[:dim] = parent_1[:dim]\n", 106 | " child_1[dim:] = parent_2[dim:]\n", 107 | " \n", 108 | " child_2[:dim] = parent_2[:dim]\n", 109 | " child_2[dim:] = parent_1[dim:]\n", 110 | " \n", 111 | " return child_1, child_2\n", 112 | "\n", 113 | "def mutate(x):\n", 114 | " for ix in range(x.shape[0]):\n", 115 | " # Generate a random number for probability\n", 116 | " R = np.random.random()\n", 117 | " \n", 118 | " if R < M:\n", 119 | " # Mutate random index \n", 120 | " x[ix] = np.random.uniform(-5, 5)\n", 121 | " else:\n", 122 | " pass\n", 123 | " return x" 124 | ] 125 | }, 126 | { 127 | "cell_type": "code", 128 | "execution_count": 86, 129 | "metadata": { 130 | "collapsed": false 131 | }, 132 | "outputs": [ 133 | { 134 | "name": "stdout", 135 | "output_type": "stream", 136 | "text": [ 137 | "Generation: 0 | Best Value: 15.6201282362\n", 138 | "Generation: 1 | Best Value: 6.34740456973\n", 139 | "Generation: 2 | Best Value: 4.1166686289\n", 140 | "Generation: 3 | Best Value: 3.30122358817\n", 141 | "Generation: 4 | Best Value: 0.539570098056\n", 142 | "Generation: 5 | Best Value: 0.539570098056\n", 143 | "Generation: 6 | Best Value: 0.539570098056\n", 144 | "Generation: 7 | Best Value: 0.539570098056\n", 145 | "Generation: 8 | Best Value: 0.539570098056\n", 146 | "Generation: 9 | Best Value: 0.539570098056\n" 147 | ] 148 | } 149 | ], 150 | "source": [ 151 | "loss = []\n", 152 | "\n", 153 | "# Main Genetic Algo loop\n", 154 | "for gx in range(G):\n", 155 | " pop = sorted(pop, key=lambda z: f(z))\n", 156 | " print \"Generation: {0} | Best Value: {1}\".format(gx, f(pop[0]))\n", 157 | " loss.append(f(pop[0]))\n", 158 | " \n", 159 | " # create a temp population\n", 160 | " temp = []\n", 161 | " \n", 162 | " while not len(temp) == NP:\n", 163 | " # Select 2 parents from good section of population\n", 164 | " p1, p2 = random.sample(pop[:int(NP/4.0)], 2)\n", 165 | " \n", 166 | " # Apply crossover\n", 167 | " c1, c2 = crossover(p1, p2)\n", 168 | " \n", 169 | " # mutate\n", 170 | " c1 = mutate(c1)\n", 171 | " c2 = mutate(c2)\n", 172 | " \n", 173 | " temp.append(c1)\n", 174 | " temp.append(c2)\n", 175 | " \n", 176 | " # create a combined population\n", 177 | " comb = temp + pop\n", 178 | " \n", 179 | " # survival of the fittest\n", 180 | " pop = sorted(comb, key=lambda z: f(z))[:NP]" 181 | ] 182 | }, 183 | { 184 | "cell_type": "code", 185 | "execution_count": 87, 186 | "metadata": { 187 | "collapsed": false 188 | }, 189 | "outputs": [ 190 | { 191 | "data": { 192 | "text/plain": [ 193 | "[]" 194 | ] 195 | }, 196 | "execution_count": 87, 197 | "metadata": {}, 198 | "output_type": "execute_result" 199 | }, 200 | { 201 | "data": { 202 | "image/png": "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\nYII=\n", 203 | "text/plain": [ 204 | "" 205 | ] 206 | }, 207 | "metadata": {}, 208 | "output_type": "display_data" 209 | } 210 | ], 211 | "source": [ 212 | "plt.plot(loss)" 213 | ] 214 | } 215 | ], 216 | "metadata": { 217 | "kernelspec": { 218 | "display_name": "Python 2", 219 | "language": "python", 220 | "name": "python2" 221 | }, 222 | "language_info": { 223 | "codemirror_mode": { 224 | "name": "ipython", 225 | "version": 2 226 | }, 227 | "file_extension": ".py", 228 | "mimetype": "text/x-python", 229 | "name": "python", 230 | "nbconvert_exporter": "python", 231 | "pygments_lexer": "ipython2", 232 | "version": "2.7.12" 233 | } 234 | }, 235 | "nbformat": 4, 236 | "nbformat_minor": 2 237 | } 238 | -------------------------------------------------------------------------------- /class_13/.ipynb_checkpoints/TransferLearning-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /class_13/DifferentialEvolution.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import random" 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": 22, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [ 25 | "# Define some initial params\n", 26 | "# Dimensionality\n", 27 | "Dn = 20\n", 28 | "\n", 29 | "# Mutation probability\n", 30 | "CR = 0.5\n", 31 | "\n", 32 | "# Population size\n", 33 | "NP = 200\n", 34 | "\n", 35 | "# No. of iterations\n", 36 | "I = 100\n", 37 | "\n", 38 | "# Differential Weight\n", 39 | "F = 0.48" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 28, 45 | "metadata": { 46 | "collapsed": false 47 | }, 48 | "outputs": [ 49 | { 50 | "name": "stdout", 51 | "output_type": "stream", 52 | "text": [ 53 | "[ 0.17871008 0.26721801 0.65812566 0.72025386 0.81739885 0.07463849\n", 54 | " 0.43782103 0.91645824 0.41815538 0.97528039 0.11776782 0.32116634\n", 55 | " 0.37482151 0.8377566 0.27985571 0.75367316 0.97173693 0.69804289\n", 56 | " 0.7397362 0.3227467 ]\n" 57 | ] 58 | } 59 | ], 60 | "source": [ 61 | "r = np.random.random((Dn,))\n", 62 | "def f(x):\n", 63 | " return ((x + r)**2).sum()\n", 64 | "\n", 65 | "print r" 66 | ] 67 | }, 68 | { 69 | "cell_type": "code", 70 | "execution_count": 29, 71 | "metadata": { 72 | "collapsed": false 73 | }, 74 | "outputs": [ 75 | { 76 | "name": "stdout", 77 | "output_type": "stream", 78 | "text": [ 79 | "200\n" 80 | ] 81 | } 82 | ], 83 | "source": [ 84 | "# Generate population\n", 85 | "pop = []\n", 86 | "\n", 87 | "for ix in range(NP):\n", 88 | " # generate a random vector\n", 89 | " vec = np.random.uniform(-10, 10, (Dn,))\n", 90 | " \n", 91 | " # Add to population\n", 92 | " pop.append(vec)\n", 93 | "\n", 94 | "print len(pop)" 95 | ] 96 | }, 97 | { 98 | "cell_type": "code", 99 | "execution_count": 31, 100 | "metadata": { 101 | "collapsed": false 102 | }, 103 | "outputs": [ 104 | { 105 | "name": "stdout", 106 | "output_type": "stream", 107 | "text": [ 108 | "Iteration: 0 | Best Value: 26.5465930691\n", 109 | "Iteration: 1 | Best Value: 25.9409732555\n", 110 | "Iteration: 2 | Best Value: 21.3792510742\n", 111 | "Iteration: 3 | Best Value: 19.72935823\n", 112 | "Iteration: 4 | Best Value: 26.7404632298\n", 113 | "Iteration: 5 | Best Value: 23.0071776759\n", 114 | "Iteration: 6 | Best Value: 27.3972675965\n", 115 | "Iteration: 7 | Best Value: 17.0525669466\n", 116 | "Iteration: 8 | Best Value: 19.8112403567\n", 117 | "Iteration: 9 | Best Value: 17.8943702182\n", 118 | "Iteration: 10 | Best Value: 17.9391075401\n", 119 | "Iteration: 11 | Best Value: 16.612853771\n", 120 | "Iteration: 12 | Best Value: 16.5975933951\n", 121 | "Iteration: 13 | Best Value: 17.4599142879\n", 122 | "Iteration: 14 | Best Value: 13.6971047893\n", 123 | "Iteration: 15 | Best Value: 16.6532507299\n", 124 | "Iteration: 16 | Best Value: 16.9711687745\n", 125 | "Iteration: 17 | Best Value: 18.2882590497\n", 126 | "Iteration: 18 | Best Value: 16.381883733\n", 127 | "Iteration: 19 | Best Value: 16.7714353598\n", 128 | "Iteration: 20 | Best Value: 16.6714402945\n", 129 | "Iteration: 21 | Best Value: 12.1719253806\n", 130 | "Iteration: 22 | Best Value: 11.5190584455\n", 131 | "Iteration: 23 | Best Value: 12.3254219529\n", 132 | "Iteration: 24 | Best Value: 11.8980832168\n", 133 | "Iteration: 25 | Best Value: 11.298190834\n", 134 | "Iteration: 26 | Best Value: 15.4562831185\n", 135 | "Iteration: 27 | Best Value: 12.6874883281\n", 136 | "Iteration: 28 | Best Value: 13.5001002485\n", 137 | "Iteration: 29 | Best Value: 13.6369026623\n", 138 | "Iteration: 30 | Best Value: 13.0372627033\n", 139 | "Iteration: 31 | Best Value: 11.2963683702\n", 140 | "Iteration: 32 | Best Value: 15.2264632214\n", 141 | "Iteration: 33 | Best Value: 12.4912173754\n", 142 | "Iteration: 34 | Best Value: 11.5672055676\n", 143 | "Iteration: 35 | Best Value: 15.7635514628\n", 144 | "Iteration: 36 | Best Value: 12.0146712358\n", 145 | "Iteration: 37 | Best Value: 11.7449316244\n", 146 | "Iteration: 38 | Best Value: 12.8676096053\n", 147 | "Iteration: 39 | Best Value: 13.3230346939\n", 148 | "Iteration: 40 | Best Value: 12.94279774\n", 149 | "Iteration: 41 | Best Value: 11.5519469766\n", 150 | "Iteration: 42 | Best Value: 12.8508627635\n", 151 | "Iteration: 43 | Best Value: 12.8128894158\n", 152 | "Iteration: 44 | Best Value: 11.3367795564\n", 153 | "Iteration: 45 | Best Value: 11.3273162878\n", 154 | "Iteration: 46 | Best Value: 11.296385762\n", 155 | "Iteration: 47 | Best Value: 11.5621763726\n", 156 | "Iteration: 48 | Best Value: 12.9012688367\n", 157 | "Iteration: 49 | Best Value: 9.19772489409\n", 158 | "Iteration: 50 | Best Value: 11.61986888\n", 159 | "Iteration: 51 | Best Value: 11.805286819\n", 160 | "Iteration: 52 | Best Value: 10.2234941259\n", 161 | "Iteration: 53 | Best Value: 8.63352579455\n", 162 | "Iteration: 54 | Best Value: 8.86682489716\n", 163 | "Iteration: 55 | Best Value: 8.53423138649\n", 164 | "Iteration: 56 | Best Value: 8.21497346159\n", 165 | "Iteration: 57 | Best Value: 8.74867629997\n", 166 | "Iteration: 58 | Best Value: 10.1679494542\n", 167 | "Iteration: 59 | Best Value: 9.89836459023\n", 168 | "Iteration: 60 | Best Value: 8.86252475074\n", 169 | "Iteration: 61 | Best Value: 8.21666881802\n", 170 | "Iteration: 62 | Best Value: 8.27997565659\n", 171 | "Iteration: 63 | Best Value: 9.96990982985\n", 172 | "Iteration: 64 | Best Value: 8.25327471071\n", 173 | "Iteration: 65 | Best Value: 8.62530883673\n", 174 | "Iteration: 66 | Best Value: 9.17787083458\n", 175 | "Iteration: 67 | Best Value: 8.22127205446\n", 176 | "Iteration: 68 | Best Value: 8.2840974278\n", 177 | "Iteration: 69 | Best Value: 8.25639654375\n", 178 | "Iteration: 70 | Best Value: 8.21485684416\n", 179 | "Iteration: 71 | Best Value: 8.20724247746\n", 180 | "Iteration: 72 | Best Value: 8.10404784982\n", 181 | "Iteration: 73 | Best Value: 7.29600940661\n", 182 | "Iteration: 74 | Best Value: 7.17847609841\n", 183 | "Iteration: 75 | Best Value: 7.62818176812\n", 184 | "Iteration: 76 | Best Value: 8.1024527144\n", 185 | "Iteration: 77 | Best Value: 7.30945307915\n", 186 | "Iteration: 78 | Best Value: 8.1224729654\n", 187 | "Iteration: 79 | Best Value: 7.39348491769\n", 188 | "Iteration: 80 | Best Value: 6.54725014513\n", 189 | "Iteration: 81 | Best Value: 6.13815769304\n", 190 | "Iteration: 82 | Best Value: 6.01656025667\n", 191 | "Iteration: 83 | Best Value: 7.59736732322\n", 192 | "Iteration: 84 | Best Value: 5.3962783741\n", 193 | "Iteration: 85 | Best Value: 9.48431530004\n", 194 | "Iteration: 86 | Best Value: 8.62487290969\n", 195 | "Iteration: 87 | Best Value: 5.01939615067\n", 196 | "Iteration: 88 | Best Value: 5.23189385231\n", 197 | "Iteration: 89 | Best Value: 6.55353650179\n", 198 | "Iteration: 90 | Best Value: 6.99736183209\n", 199 | "Iteration: 91 | Best Value: 6.18110563834\n", 200 | "Iteration: 92 | Best Value: 5.07389155064\n", 201 | "Iteration: 93 | Best Value: 7.92808882058\n", 202 | "Iteration: 94 | Best Value: 5.88428020514\n", 203 | "Iteration: 95 | Best Value: 3.93720425366\n", 204 | "Iteration: 96 | Best Value: 4.53667003901\n", 205 | "Iteration: 97 | Best Value: 4.1972386768\n", 206 | "Iteration: 98 | Best Value: 5.74285964158\n", 207 | "Iteration: 99 | Best Value: 4.4603769229\n" 208 | ] 209 | } 210 | ], 211 | "source": [ 212 | "loss = []\n", 213 | "# Main DE loop\n", 214 | "for ix in range(I):\n", 215 | " pop = sorted(pop, key=lambda z: f(z))\n", 216 | " print \"Iteration: {0} | Best Value: {1}\".format(ix, f(pop[0]))\n", 217 | " loss.append(f(pop[0]))\n", 218 | " \n", 219 | " # Leader point\n", 220 | " X_l = pop[0]\n", 221 | " \n", 222 | " for px_index in range(NP):\n", 223 | " px = pop[px_index]\n", 224 | " \n", 225 | " # pick a random point\n", 226 | " a, b, c = random.sample(pop, 3)\n", 227 | " \n", 228 | " # generate linear combination\n", 229 | " y = px + F*(X_l - c)\n", 230 | " \n", 231 | " # pick a random dimension\n", 232 | " R = random.choice(range(Dn))\n", 233 | " \n", 234 | " # temporary vector\n", 235 | " t = np.zeros(px.shape)\n", 236 | " \n", 237 | " for dx in range(Dn):\n", 238 | " r = np.random.random()\n", 239 | " if r < CR or dx == R:\n", 240 | " t[dx] = y[dx]\n", 241 | " else:\n", 242 | " t[dx] = px[dx]\n", 243 | " \n", 244 | " # check if new point is better\n", 245 | " if f(t) < f(px):\n", 246 | " pop[px_index] = t\n", 247 | " else:\n", 248 | " pass" 249 | ] 250 | }, 251 | { 252 | "cell_type": "code", 253 | "execution_count": 26, 254 | "metadata": { 255 | "collapsed": false 256 | }, 257 | "outputs": [ 258 | { 259 | "data": { 260 | "text/plain": [ 261 | "[]" 262 | ] 263 | }, 264 | "execution_count": 26, 265 | "metadata": {}, 266 | "output_type": "execute_result" 267 | }, 268 | { 269 | "data": { 270 | "image/png": "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\n", 271 | "text/plain": [ 272 | "" 273 | ] 274 | }, 275 | "metadata": {}, 276 | "output_type": "display_data" 277 | } 278 | ], 279 | "source": [ 280 | "plt. plot(loss)" 281 | ] 282 | } 283 | ], 284 | "metadata": { 285 | "kernelspec": { 286 | "display_name": "Python 2", 287 | "language": "python", 288 | "name": "python2" 289 | }, 290 | "language_info": { 291 | "codemirror_mode": { 292 | "name": "ipython", 293 | "version": 2 294 | }, 295 | "file_extension": ".py", 296 | "mimetype": "text/x-python", 297 | "name": "python", 298 | "nbconvert_exporter": "python", 299 | "pygments_lexer": "ipython2", 300 | "version": "2.7.12" 301 | } 302 | }, 303 | "nbformat": 4, 304 | "nbformat_minor": 2 305 | } 306 | -------------------------------------------------------------------------------- /class_15/.ipynb_checkpoints/rnn_addition-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from keras.models import Sequential\n", 12 | "from keras import layers\n", 13 | "import numpy as np\n", 14 | "from six.moves import range\n", 15 | "\n", 16 | "import numpy as np\n", 17 | "from matplotlib import pyplot as plt\n", 18 | "%matplotlib inline" 19 | ] 20 | }, 21 | { 22 | "cell_type": "code", 23 | "execution_count": 3, 24 | "metadata": { 25 | "collapsed": true 26 | }, 27 | "outputs": [], 28 | "source": [ 29 | "class CharacterTable(object):\n", 30 | " def __init__(self, chars):\n", 31 | " \"\"\"Initialize character table.\n", 32 | " # Arguments\n", 33 | " chars: Characters that can appear in the input.\n", 34 | " \"\"\"\n", 35 | " self.chars = sorted(set(chars))\n", 36 | " self.char_indices = dict((c, i) for i, c in enumerate(self.chars))\n", 37 | " self.indices_char = dict((i, c) for i, c in enumerate(self.chars))\n", 38 | "\n", 39 | " def encode(self, C, num_rows):\n", 40 | " \"\"\"One hot encode given string C.\n", 41 | " # Arguments\n", 42 | " num_rows: Number of rows in the returned one hot encoding. This is\n", 43 | " used to keep the # of rows for each data the same.\n", 44 | " \"\"\"\n", 45 | " x = np.zeros((num_rows, len(self.chars)))\n", 46 | " for i, c in enumerate(C):\n", 47 | " x[i, self.char_indices[c]] = 1\n", 48 | " return x\n", 49 | "\n", 50 | " def decode(self, x, calc_argmax=True):\n", 51 | " if calc_argmax:\n", 52 | " x = x.argmax(axis=-1)\n", 53 | " return ''.join(self.indices_char[x] for x in x)\n", 54 | "\n", 55 | "class colors:\n", 56 | " ok = '\\033[92m'\n", 57 | " fail = '\\033[91m'\n", 58 | " close = '\\033[0m'" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 5, 64 | "metadata": { 65 | "collapsed": true 66 | }, 67 | "outputs": [], 68 | "source": [ 69 | "TRAINING_SIZE = 50000\n", 70 | "DIGITS = 3\n", 71 | "INVERT = True\n", 72 | "\n", 73 | "MAXLEN = DIGITS + 1 + DIGITS" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 7, 79 | "metadata": { 80 | "collapsed": true 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "chars = '0123456789+ '\n", 85 | "ctable = CharacterTable(chars)" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 8, 91 | "metadata": { 92 | "collapsed": true 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "questions = []\n", 97 | "expected = []\n", 98 | "seen = set()" 99 | ] 100 | }, 101 | { 102 | "cell_type": "code", 103 | "execution_count": null, 104 | "metadata": { 105 | "collapsed": false 106 | }, 107 | "outputs": [], 108 | "source": [] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 11, 113 | "metadata": { 114 | "collapsed": false 115 | }, 116 | "outputs": [ 117 | { 118 | "name": "stdout", 119 | "output_type": "stream", 120 | "text": [ 121 | "('Total addition questions:', 50000)\n" 122 | ] 123 | } 124 | ], 125 | "source": [ 126 | "while len(questions) < TRAINING_SIZE:\n", 127 | " f = lambda: int(''.join(np.random.choice(list('0123456789'))\n", 128 | " for i in range(np.random.randint(1, DIGITS + 1))))\n", 129 | " a, b = f(), f()\n", 130 | " # Skip any addition questions we've already seen\n", 131 | " # Also skip any such that x+Y == Y+x (hence the sorting).\n", 132 | " key = tuple(sorted((a, b)))\n", 133 | " if key in seen:\n", 134 | " continue\n", 135 | " seen.add(key)\n", 136 | " # Pad the data with spaces such that it is always MAXLEN.\n", 137 | " q = '{}+{}'.format(a, b)\n", 138 | " query = q + ' ' * (MAXLEN - len(q))\n", 139 | " ans = str(a + b)\n", 140 | " # Answers can be of maximum size DIGITS + 1.\n", 141 | " ans += ' ' * (DIGITS + 1 - len(ans))\n", 142 | " if INVERT:\n", 143 | " # Reverse the query, e.g., '12+345 ' becomes ' 543+21'. (Note the\n", 144 | " # space used for padding.)\n", 145 | " query = query[::-1]\n", 146 | " questions.append(query)\n", 147 | " expected.append(ans)\n", 148 | "print('Total addition questions:', len(questions))" 149 | ] 150 | }, 151 | { 152 | "cell_type": "code", 153 | "execution_count": 17, 154 | "metadata": { 155 | "collapsed": true 156 | }, 157 | "outputs": [], 158 | "source": [ 159 | "x = np.zeros((len(questions), MAXLEN, len(chars)), dtype=np.bool)\n", 160 | "y = np.zeros((len(questions), DIGITS + 1, len(chars)), dtype=np.bool)\n", 161 | "for i, sentence in enumerate(questions):\n", 162 | " x[i] = ctable.encode(sentence, MAXLEN)\n", 163 | "for i, sentence in enumerate(expected):\n", 164 | " y[i] = ctable.encode(sentence, DIGITS + 1)" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 18, 170 | "metadata": { 171 | "collapsed": true 172 | }, 173 | "outputs": [], 174 | "source": [ 175 | "indices = np.arange(len(y))\n", 176 | "np.random.shuffle(indices)\n", 177 | "x = x[indices]\n", 178 | "y = y[indices]" 179 | ] 180 | }, 181 | { 182 | "cell_type": "code", 183 | "execution_count": 19, 184 | "metadata": { 185 | "collapsed": false 186 | }, 187 | "outputs": [ 188 | { 189 | "name": "stdout", 190 | "output_type": "stream", 191 | "text": [ 192 | "Training Data:\n", 193 | "(45000, 7, 12)\n", 194 | "(45000, 4, 12)\n", 195 | "Validation Data:\n", 196 | "(5000, 7, 12)\n", 197 | "(5000, 4, 12)\n" 198 | ] 199 | } 200 | ], 201 | "source": [ 202 | "split_at = len(x) - len(x) // 10\n", 203 | "(x_train, x_val) = x[:split_at], x[split_at:]\n", 204 | "(y_train, y_val) = y[:split_at], y[split_at:]\n", 205 | "\n", 206 | "print('Training Data:')\n", 207 | "print(x_train.shape)\n", 208 | "print(y_train.shape)\n", 209 | "\n", 210 | "print('Validation Data:')\n", 211 | "print(x_val.shape)\n", 212 | "print(y_val.shape)\n" 213 | ] 214 | }, 215 | { 216 | "cell_type": "code", 217 | "execution_count": 20, 218 | "metadata": { 219 | "collapsed": true 220 | }, 221 | "outputs": [], 222 | "source": [ 223 | "RNN = layers.SimpleRNN\n", 224 | "HIDDEN_SIZE = 128\n", 225 | "BATCH_SIZE = 128\n", 226 | "LAYERS = 1" 227 | ] 228 | }, 229 | { 230 | "cell_type": "code", 231 | "execution_count": null, 232 | "metadata": { 233 | "collapsed": true 234 | }, 235 | "outputs": [], 236 | "source": [ 237 | "print('Build model...')\n", 238 | "model = Sequential()\n", 239 | "model.add(RNN(HIDDEN_SIZE, input_shape=(MAXLEN, len(chars))))\n", 240 | "model.add(layers.RepeatVector(DIGITS + 1))\n", 241 | "\n", 242 | "for _ in range(LAYERS):\n", 243 | " # By setting return_sequences to True, return not only the last output but\n", 244 | " # all the outputs so far in the form of (num_samples, timesteps,\n", 245 | " # output_dim). This is necessary as TimeDistributed in the below expects\n", 246 | " # the first dimension to be the timesteps.\n", 247 | " model.add(RNN(HIDDEN_SIZE, return_sequences=True))" 248 | ] 249 | } 250 | ], 251 | "metadata": { 252 | "kernelspec": { 253 | "display_name": "Python 2", 254 | "language": "python", 255 | "name": "python2" 256 | }, 257 | "language_info": { 258 | "codemirror_mode": { 259 | "name": "ipython", 260 | "version": 2 261 | }, 262 | "file_extension": ".py", 263 | "mimetype": "text/x-python", 264 | "name": "python", 265 | "nbconvert_exporter": "python", 266 | "pygments_lexer": "ipython2", 267 | "version": "2.7.12" 268 | } 269 | }, 270 | "nbformat": 4, 271 | "nbformat_minor": 2 272 | } 273 | -------------------------------------------------------------------------------- /class_16/results/2007_000187.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/2007_000187.jpg -------------------------------------------------------------------------------- /class_16/results/im_at_iteration_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/im_at_iteration_0.png -------------------------------------------------------------------------------- /class_16/results/im_at_iteration_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/im_at_iteration_1.png -------------------------------------------------------------------------------- /class_16/results/im_at_iteration_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/im_at_iteration_2.png -------------------------------------------------------------------------------- /class_16/results/im_at_iteration_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/im_at_iteration_3.png -------------------------------------------------------------------------------- /class_16/results/im_at_iteration_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/im_at_iteration_4.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_0.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_1.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_10.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_11.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_2.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_3.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_4.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_5.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_6.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_7.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_8.png -------------------------------------------------------------------------------- /class_16/results/new_img_at_iteration_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/class_16/results/new_img_at_iteration_9.png -------------------------------------------------------------------------------- /class_17/.ipynb_checkpoints/NaiveBayes-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /class_17/.ipynb_checkpoints/SVM-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import pandas as pd\n", 15 | "\n", 16 | "from sklearn.svm import SVC\n", 17 | "from sklearn.preprocessing import LabelEncoder" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "ds = pd.read_csv('../data/mushrooms.csv')" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 5, 34 | "metadata": { 35 | "collapsed": false 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "le = LabelEncoder()\n", 40 | "\n", 41 | "df = ds.apply(le.fit_transform)\n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 13, 47 | "metadata": { 48 | "collapsed": true 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "split = int(0.8 * df.values.shape[0])\n", 53 | "\n", 54 | "train = df.loc[:split]\n", 55 | "test = df.loc[split:]\n", 56 | "test = test.reset_index().drop('index', axis=1)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 23, 62 | "metadata": { 63 | "collapsed": false 64 | }, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/plain": [ 69 | "0.97107692307692306" 70 | ] 71 | }, 72 | "execution_count": 23, 73 | "metadata": {}, 74 | "output_type": "execute_result" 75 | } 76 | ], 77 | "source": [ 78 | "svm = SVC(kernel='rbf')\n", 79 | "\n", 80 | "svm.fit(train[train.columns[1:]], train['class'])\n", 81 | "svm.score(test[test.columns[1:]], test['class'])" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "metadata": { 88 | "collapsed": true 89 | }, 90 | "outputs": [], 91 | "source": [] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 2", 97 | "language": "python", 98 | "name": "python2" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 2 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython2", 110 | "version": "2.7.12" 111 | } 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 2 115 | } 116 | -------------------------------------------------------------------------------- /class_17/SVM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import pandas as pd\n", 15 | "\n", 16 | "from sklearn.svm import SVC\n", 17 | "from sklearn.preprocessing import LabelEncoder" 18 | ] 19 | }, 20 | { 21 | "cell_type": "code", 22 | "execution_count": 2, 23 | "metadata": { 24 | "collapsed": true 25 | }, 26 | "outputs": [], 27 | "source": [ 28 | "ds = pd.read_csv('../data/mushrooms.csv')" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 5, 34 | "metadata": { 35 | "collapsed": false 36 | }, 37 | "outputs": [], 38 | "source": [ 39 | "le = LabelEncoder()\n", 40 | "\n", 41 | "df = ds.apply(le.fit_transform)\n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 13, 47 | "metadata": { 48 | "collapsed": true 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "split = int(0.8 * df.values.shape[0])\n", 53 | "\n", 54 | "train = df.loc[:split]\n", 55 | "test = df.loc[split:]\n", 56 | "test = test.reset_index().drop('index', axis=1)" 57 | ] 58 | }, 59 | { 60 | "cell_type": "code", 61 | "execution_count": 23, 62 | "metadata": { 63 | "collapsed": false 64 | }, 65 | "outputs": [ 66 | { 67 | "data": { 68 | "text/plain": [ 69 | "0.97107692307692306" 70 | ] 71 | }, 72 | "execution_count": 23, 73 | "metadata": {}, 74 | "output_type": "execute_result" 75 | } 76 | ], 77 | "source": [ 78 | "svm = SVC(kernel='rbf')\n", 79 | "\n", 80 | "svm.fit(train[train.columns[1:]], train['class'])\n", 81 | "svm.score(test[test.columns[1:]], test['class'])" 82 | ] 83 | }, 84 | { 85 | "cell_type": "code", 86 | "execution_count": null, 87 | "metadata": { 88 | "collapsed": true 89 | }, 90 | "outputs": [], 91 | "source": [] 92 | } 93 | ], 94 | "metadata": { 95 | "kernelspec": { 96 | "display_name": "Python 2", 97 | "language": "python", 98 | "name": "python2" 99 | }, 100 | "language_info": { 101 | "codemirror_mode": { 102 | "name": "ipython", 103 | "version": 2 104 | }, 105 | "file_extension": ".py", 106 | "mimetype": "text/x-python", 107 | "name": "python", 108 | "nbconvert_exporter": "python", 109 | "pygments_lexer": "ipython2", 110 | "version": "2.7.12" 111 | } 112 | }, 113 | "nbformat": 4, 114 | "nbformat_minor": 2 115 | } 116 | -------------------------------------------------------------------------------- /class_18/.ipynb_checkpoints/SimpleWordVectors-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /class_18/.ipynb_checkpoints/TrainSimpleW2V-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [], 3 | "metadata": {}, 4 | "nbformat": 4, 5 | "nbformat_minor": 2 6 | } 7 | -------------------------------------------------------------------------------- /class_18/.ipynb_checkpoints/scraping-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 79, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import requests\n", 12 | "from bs4 import BeautifulSoup as BS\n", 13 | "import pandas as pd" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 4, 19 | "metadata": { 20 | "collapsed": true 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "url = 'http://www.datatau.com/'" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 5, 30 | "metadata": { 31 | "collapsed": true 32 | }, 33 | "outputs": [], 34 | "source": [ 35 | "r = requests.get(url)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 8, 41 | "metadata": { 42 | "collapsed": false 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "html = r.text" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 12, 52 | "metadata": { 53 | "collapsed": false 54 | }, 55 | "outputs": [], 56 | "source": [ 57 | "soup = BS(html)" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 34, 63 | "metadata": { 64 | "collapsed": false 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "child = soup.find_all('td', {'class': 'title'})" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 40, 74 | "metadata": { 75 | "collapsed": false 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "table = child[10].parent.parent" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 45, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [], 89 | "source": [ 90 | "data = table.find_all('tr')[:90]" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 59, 96 | "metadata": { 97 | "collapsed": true 98 | }, 99 | "outputs": [], 100 | "source": [ 101 | "news = {\n", 102 | " 'title': None,\n", 103 | " 'link': None,\n", 104 | " 'points': None,\n", 105 | " 'user': None\n", 106 | "}" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 72, 112 | "metadata": { 113 | "collapsed": false 114 | }, 115 | "outputs": [ 116 | { 117 | "data": { 118 | "text/plain": [ 119 | "u'm31'" 120 | ] 121 | }, 122 | "execution_count": 72, 123 | "metadata": {}, 124 | "output_type": "execute_result" 125 | } 126 | ], 127 | "source": [ 128 | "#data[1].span.text.split()[0]\n", 129 | "data[1].a.text" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 77, 135 | "metadata": { 136 | "collapsed": false 137 | }, 138 | "outputs": [], 139 | "source": [ 140 | "all_data = []\n", 141 | "for ix in range(0, len(data), 3):\n", 142 | " d = {}\n", 143 | " \n", 144 | " d['title'] = data[ix].find_all('a')[1].text\n", 145 | " d['link'] = data[ix].find_all('a')[1]['href']\n", 146 | " d['points'] = data[ix+1].span.text.split()[0]\n", 147 | " d['user'] = data[ix+1].a.text\n", 148 | " \n", 149 | " all_data.append(d)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 81, 155 | "metadata": { 156 | "collapsed": false 157 | }, 158 | "outputs": [], 159 | "source": [ 160 | "info = pd.DataFrame(all_data)" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 83, 166 | "metadata": { 167 | "collapsed": false 168 | }, 169 | "outputs": [], 170 | "source": [ 171 | "info.to_excel('datatau.xlsx')" 172 | ] 173 | } 174 | ], 175 | "metadata": { 176 | "kernelspec": { 177 | "display_name": "Python 2", 178 | "language": "python", 179 | "name": "python2" 180 | }, 181 | "language_info": { 182 | "codemirror_mode": { 183 | "name": "ipython", 184 | "version": 2 185 | }, 186 | "file_extension": ".py", 187 | "mimetype": "text/x-python", 188 | "name": "python", 189 | "nbconvert_exporter": "python", 190 | "pygments_lexer": "ipython2", 191 | "version": "2.7.12" 192 | } 193 | }, 194 | "nbformat": 4, 195 | "nbformat_minor": 2 196 | } 197 | -------------------------------------------------------------------------------- /class_18/SimpleWordVectors.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stderr", 12 | "output_type": "stream", 13 | "text": [ 14 | "Using TensorFlow backend.\n" 15 | ] 16 | } 17 | ], 18 | "source": [ 19 | "import numpy as np\n", 20 | "import sklearn\n", 21 | "import matplotlib.pyplot as plt\n", 22 | "%matplotlib inline\n", 23 | "import gensim" 24 | ] 25 | }, 26 | { 27 | "cell_type": "code", 28 | "execution_count": 5, 29 | "metadata": { 30 | "collapsed": false 31 | }, 32 | "outputs": [], 33 | "source": [ 34 | "model_path = '../../GoogleNews-vectors-negative300 (1).bin'\n", 35 | "model = gensim.models.KeyedVectors.load_word2vec_format(model_path, binary=True)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": null, 41 | "metadata": { 42 | "collapsed": false 43 | }, 44 | "outputs": [ 45 | { 46 | "data": { 47 | "text/plain": [ 48 | "[(u'vehicle', 0.7821096181869507),\n", 49 | " (u'cars', 0.7423830032348633),\n", 50 | " (u'SUV', 0.7160962820053101),\n", 51 | " (u'minivan', 0.6907036304473877),\n", 52 | " (u'truck', 0.6735789775848389),\n", 53 | " (u'Car', 0.6677608489990234),\n", 54 | " (u'Ford_Focus', 0.667320191860199),\n", 55 | " (u'Honda_Civic', 0.662684977054596),\n", 56 | " (u'Jeep', 0.6511331796646118),\n", 57 | " (u'pickup_truck', 0.64414381980896)]" 58 | ] 59 | }, 60 | "execution_count": 10, 61 | "metadata": {}, 62 | "output_type": "execute_result" 63 | } 64 | ], 65 | "source": [ 66 | "model.similar_by_word('car')" 67 | ] 68 | } 69 | ], 70 | "metadata": { 71 | "kernelspec": { 72 | "display_name": "Python 2", 73 | "language": "python", 74 | "name": "python2" 75 | }, 76 | "language_info": { 77 | "codemirror_mode": { 78 | "name": "ipython", 79 | "version": 2 80 | }, 81 | "file_extension": ".py", 82 | "mimetype": "text/x-python", 83 | "name": "python", 84 | "nbconvert_exporter": "python", 85 | "pygments_lexer": "ipython2", 86 | "version": "2.7.12" 87 | } 88 | }, 89 | "nbformat": 4, 90 | "nbformat_minor": 2 91 | } 92 | -------------------------------------------------------------------------------- /class_18/TrainSimpleW2V.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 85, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "import gensim\n", 13 | "import re\n", 14 | "from matplotlib import pyplot as plt\n", 15 | "%matplotlib inline\n", 16 | "import seaborn as sns" 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 2, 22 | "metadata": { 23 | "collapsed": true 24 | }, 25 | "outputs": [], 26 | "source": [ 27 | "f = open('../data/input.txt')\n", 28 | "ds = f.read()\n", 29 | "f.close()" 30 | ] 31 | }, 32 | { 33 | "cell_type": "code", 34 | "execution_count": 38, 35 | "metadata": { 36 | "collapsed": true 37 | }, 38 | "outputs": [], 39 | "source": [ 40 | "syms = ['\"', ';', ':', ',', '?', '!', '&', '(', ')', '[', ']', \"'\", '$', '@', '~', '-', '#']\n", 41 | "syms_2 = ['\\n', '\\t', '_', '>', '<']\n", 42 | "\n" 43 | ] 44 | }, 45 | { 46 | "cell_type": "code", 47 | "execution_count": 47, 48 | "metadata": { 49 | "collapsed": false, 50 | "scrolled": false 51 | }, 52 | "outputs": [], 53 | "source": [ 54 | "data = []\n", 55 | "for ix in ds.split('.')[:]:\n", 56 | " val = ix\n", 57 | " for s in syms:\n", 58 | " val = val.strip().replace(s, '')\n", 59 | " for s in syms_2:\n", 60 | " val = val.strip().replace(s, ' ')\n", 61 | " if len(val) < 500 and len(val) > 40:\n", 62 | " data.append(val)" 63 | ] 64 | }, 65 | { 66 | "cell_type": "code", 67 | "execution_count": 34, 68 | "metadata": { 69 | "collapsed": false 70 | }, 71 | "outputs": [], 72 | "source": [ 73 | "# f = np.unique(data, return_counts=True)" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 36, 79 | "metadata": { 80 | "collapsed": false 81 | }, 82 | "outputs": [], 83 | "source": [ 84 | "#plt.figure(0, figsize=(10, 10))\n", 85 | "#plt.plot(f[0], f[1])" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 55, 91 | "metadata": { 92 | "collapsed": false, 93 | "scrolled": false 94 | }, 95 | "outputs": [], 96 | "source": [ 97 | "train = []\n", 98 | "for ix in data[:]:\n", 99 | " train.append(ix.lower().split())\n", 100 | " #print '-'*80" 101 | ] 102 | }, 103 | { 104 | "cell_type": "code", 105 | "execution_count": 59, 106 | "metadata": { 107 | "collapsed": false 108 | }, 109 | "outputs": [], 110 | "source": [ 111 | "model = gensim.models.Word2Vec(train, workers=6, iter=20)" 112 | ] 113 | }, 114 | { 115 | "cell_type": "code", 116 | "execution_count": 117, 117 | "metadata": { 118 | "collapsed": false 119 | }, 120 | "outputs": [ 121 | { 122 | "data": { 123 | "text/plain": [ 124 | "[('affair', 0.7701476812362671),\n", 125 | " ('problem', 0.7476425170898438),\n", 126 | " ('investigation', 0.6302639245986938),\n", 127 | " ('incident', 0.6289407014846802),\n", 128 | " ('instance', 0.6138631105422974),\n", 129 | " ('business', 0.6063700914382935),\n", 130 | " ('chain', 0.5894591808319092),\n", 131 | " ('episode', 0.5805294513702393),\n", 132 | " ('object', 0.5788438320159912),\n", 133 | " ('proof', 0.5696870684623718)]" 134 | ] 135 | }, 136 | "execution_count": 117, 137 | "metadata": {}, 138 | "output_type": "execute_result" 139 | } 140 | ], 141 | "source": [ 142 | "model.similar_by_word('mystery')" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 138, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [], 152 | "source": [ 153 | "w = 'horse car engine'.split()\n", 154 | "# model.similarity?" 155 | ] 156 | }, 157 | { 158 | "cell_type": "code", 159 | "execution_count": 139, 160 | "metadata": { 161 | "collapsed": false 162 | }, 163 | "outputs": [], 164 | "source": [ 165 | "m = np.zeros((len(w), len(w)))\n", 166 | "for ix in range(len(w)):\n", 167 | " for wx in range(len(w)):\n", 168 | " m[ix, wx] = model.similarity(w[ix], w[wx])" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 140, 174 | "metadata": { 175 | "collapsed": false 176 | }, 177 | "outputs": [ 178 | { 179 | "name": "stdout", 180 | "output_type": "stream", 181 | "text": [ 182 | "['horse', 'car', 'engine']\n" 183 | ] 184 | }, 185 | { 186 | "data": { 187 | "text/plain": [ 188 | "" 189 | ] 190 | }, 191 | "execution_count": 140, 192 | "metadata": {}, 193 | "output_type": "execute_result" 194 | }, 195 | { 196 | "data": { 197 | "image/png": "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\nAICE/D98GBOvWBp31gAAAABJRU5ErkJggg==\n", 198 | "text/plain": [ 199 | "" 200 | ] 201 | }, 202 | "metadata": {}, 203 | "output_type": "display_data" 204 | } 205 | ], 206 | "source": [ 207 | "print w\n", 208 | "sns.heatmap(m)" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 134, 214 | "metadata": { 215 | "collapsed": false 216 | }, 217 | "outputs": [ 218 | { 219 | "data": { 220 | "text/plain": [ 221 | "array([ 2.50067185, 2.32342875, 1.73701952, 2.25684862])" 222 | ] 223 | }, 224 | "execution_count": 134, 225 | "metadata": {}, 226 | "output_type": "execute_result" 227 | } 228 | ], 229 | "source": [ 230 | "m.sum(axis=0)" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": 141, 236 | "metadata": { 237 | "collapsed": true 238 | }, 239 | "outputs": [], 240 | "source": [ 241 | "import spacy" 242 | ] 243 | }, 244 | { 245 | "cell_type": "code", 246 | "execution_count": 142, 247 | "metadata": { 248 | "collapsed": true 249 | }, 250 | "outputs": [], 251 | "source": [ 252 | "word_embeddings = spacy.load('en', vectors='glove.6B.300d.txt')" 253 | ] 254 | }, 255 | { 256 | "cell_type": "code", 257 | "execution_count": 160, 258 | "metadata": { 259 | "collapsed": false 260 | }, 261 | "outputs": [], 262 | "source": [ 263 | "q = word_embeddings(u'what')" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 162, 269 | "metadata": { 270 | "collapsed": false 271 | }, 272 | "outputs": [], 273 | "source": [ 274 | "from sklearn.metrics.pairwise import cosine_similarity" 275 | ] 276 | }, 277 | { 278 | "cell_type": "code", 279 | "execution_count": 163, 280 | "metadata": { 281 | "collapsed": true 282 | }, 283 | "outputs": [], 284 | "source": [ 285 | "def sim(w1, w2):\n", 286 | " v1 = word_embeddings(w1)\n", 287 | " v2 = word_embeddings(w2)\n", 288 | " \n", 289 | " return cosine_similarity(v1.vector, v2.vector)" 290 | ] 291 | }, 292 | { 293 | "cell_type": "code", 294 | "execution_count": 171, 295 | "metadata": { 296 | "collapsed": false 297 | }, 298 | "outputs": [ 299 | { 300 | "name": "stdout", 301 | "output_type": "stream", 302 | "text": [ 303 | "[[ 0.56668288]]\n" 304 | ] 305 | }, 306 | { 307 | "name": "stderr", 308 | "output_type": "stream", 309 | "text": [ 310 | "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n", 311 | " DeprecationWarning)\n", 312 | "/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py:395: DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.\n", 313 | " DeprecationWarning)\n" 314 | ] 315 | } 316 | ], 317 | "source": [ 318 | "word1 = u'money'\n", 319 | "word2 = u'bank'\n", 320 | "print sim(word1, word2)" 321 | ] 322 | } 323 | ], 324 | "metadata": { 325 | "kernelspec": { 326 | "display_name": "Python 2", 327 | "language": "python", 328 | "name": "python2" 329 | }, 330 | "language_info": { 331 | "codemirror_mode": { 332 | "name": "ipython", 333 | "version": 2 334 | }, 335 | "file_extension": ".py", 336 | "mimetype": "text/x-python", 337 | "name": "python", 338 | "nbconvert_exporter": "python", 339 | "pygments_lexer": "ipython2", 340 | "version": "2.7.12" 341 | } 342 | }, 343 | "nbformat": 4, 344 | "nbformat_minor": 2 345 | } 346 | -------------------------------------------------------------------------------- /class_18/scraping.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 79, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import requests\n", 12 | "from bs4 import BeautifulSoup as BS\n", 13 | "import pandas as pd" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 4, 19 | "metadata": { 20 | "collapsed": true 21 | }, 22 | "outputs": [], 23 | "source": [ 24 | "url = 'http://www.datatau.com/'" 25 | ] 26 | }, 27 | { 28 | "cell_type": "code", 29 | "execution_count": 5, 30 | "metadata": { 31 | "collapsed": true 32 | }, 33 | "outputs": [], 34 | "source": [ 35 | "r = requests.get(url)" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 8, 41 | "metadata": { 42 | "collapsed": false 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "html = r.text" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 12, 52 | "metadata": { 53 | "collapsed": false 54 | }, 55 | "outputs": [], 56 | "source": [ 57 | "soup = BS(html)" 58 | ] 59 | }, 60 | { 61 | "cell_type": "code", 62 | "execution_count": 34, 63 | "metadata": { 64 | "collapsed": false 65 | }, 66 | "outputs": [], 67 | "source": [ 68 | "child = soup.find_all('td', {'class': 'title'})" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 40, 74 | "metadata": { 75 | "collapsed": false 76 | }, 77 | "outputs": [], 78 | "source": [ 79 | "table = child[10].parent.parent" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 45, 85 | "metadata": { 86 | "collapsed": false 87 | }, 88 | "outputs": [], 89 | "source": [ 90 | "data = table.find_all('tr')[:90]" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 59, 96 | "metadata": { 97 | "collapsed": true 98 | }, 99 | "outputs": [], 100 | "source": [ 101 | "news = {\n", 102 | " 'title': None,\n", 103 | " 'link': None,\n", 104 | " 'points': None,\n", 105 | " 'user': None\n", 106 | "}" 107 | ] 108 | }, 109 | { 110 | "cell_type": "code", 111 | "execution_count": 72, 112 | "metadata": { 113 | "collapsed": false 114 | }, 115 | "outputs": [ 116 | { 117 | "data": { 118 | "text/plain": [ 119 | "u'm31'" 120 | ] 121 | }, 122 | "execution_count": 72, 123 | "metadata": {}, 124 | "output_type": "execute_result" 125 | } 126 | ], 127 | "source": [ 128 | "#data[1].span.text.split()[0]\n", 129 | "data[1].a.text" 130 | ] 131 | }, 132 | { 133 | "cell_type": "code", 134 | "execution_count": 77, 135 | "metadata": { 136 | "collapsed": false 137 | }, 138 | "outputs": [], 139 | "source": [ 140 | "all_data = []\n", 141 | "for ix in range(0, len(data), 3):\n", 142 | " d = {}\n", 143 | " \n", 144 | " d['title'] = data[ix].find_all('a')[1].text\n", 145 | " d['link'] = data[ix].find_all('a')[1]['href']\n", 146 | " d['points'] = data[ix+1].span.text.split()[0]\n", 147 | " d['user'] = data[ix+1].a.text\n", 148 | " \n", 149 | " all_data.append(d)" 150 | ] 151 | }, 152 | { 153 | "cell_type": "code", 154 | "execution_count": 81, 155 | "metadata": { 156 | "collapsed": false 157 | }, 158 | "outputs": [], 159 | "source": [ 160 | "info = pd.DataFrame(all_data)" 161 | ] 162 | }, 163 | { 164 | "cell_type": "code", 165 | "execution_count": 83, 166 | "metadata": { 167 | "collapsed": false 168 | }, 169 | "outputs": [], 170 | "source": [ 171 | "info.to_excel('datatau.xlsx')" 172 | ] 173 | } 174 | ], 175 | "metadata": { 176 | "kernelspec": { 177 | "display_name": "Python 2", 178 | "language": "python", 179 | "name": "python2" 180 | }, 181 | "language_info": { 182 | "codemirror_mode": { 183 | "name": "ipython", 184 | "version": 2 185 | }, 186 | "file_extension": ".py", 187 | "mimetype": "text/x-python", 188 | "name": "python", 189 | "nbconvert_exporter": "python", 190 | "pygments_lexer": "ipython2", 191 | "version": "2.7.12" 192 | } 193 | }, 194 | "nbformat": 4, 195 | "nbformat_minor": 2 196 | } 197 | -------------------------------------------------------------------------------- /class_21/.ipynb_checkpoints/data_processing-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 42, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import re\n", 15 | "import spacy" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 97, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "f = open('../data/movie_review/rt-polarity.neg')\n", 27 | "ds = f.read()\n", 28 | "f.close()" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 98, 34 | "metadata": { 35 | "collapsed": false 36 | }, 37 | "outputs": [ 38 | { 39 | "name": "stdout", 40 | "output_type": "stream", 41 | "text": [ 42 | "5331\n" 43 | ] 44 | } 45 | ], 46 | "source": [ 47 | "ds = ds.lower()\n", 48 | "data = re.sub('[^a-z 0-9\\n \\'-/]+', '', ds)\n", 49 | "data = re.sub('[- .]+', ' ', data)\n", 50 | "text = data.split('\\n')[:-1]\n", 51 | "print len(text)\n", 52 | "#for ix in range(10)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 55, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "word_vec = spacy.load('en', vectors='glove.6B.300d.txt')" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 101, 69 | "metadata": { 70 | "collapsed": false 71 | }, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "a sentimental mess that never rings true \n" 78 | ] 79 | } 80 | ], 81 | "source": [ 82 | "q = word_vec(unicode(text[10]))\n", 83 | "print q\n", 84 | "#for ix in q:\n", 85 | "# print ix, ix.vector.mean()" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 102, 91 | "metadata": { 92 | "collapsed": false 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "l = []\n", 97 | "\n", 98 | "for ix in text:\n", 99 | " l.append(len(word_vec(unicode(ix))))" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": { 106 | "collapsed": false 107 | }, 108 | "outputs": [], 109 | "source": [] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 103, 114 | "metadata": { 115 | "collapsed": false 116 | }, 117 | "outputs": [ 118 | { 119 | "data": { 120 | "text/plain": [ 121 | "[]" 122 | ] 123 | }, 124 | "execution_count": 103, 125 | "metadata": {}, 126 | "output_type": "execute_result" 127 | }, 128 | { 129 | "data": { 130 | "image/png": "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\nYqTBAAAAAElFTkSuQmCC\n", 131 | "text/plain": [ 132 | "" 133 | ] 134 | }, 135 | "metadata": {}, 136 | "output_type": "display_data" 137 | } 138 | ], 139 | "source": [ 140 | "d = np.unique(l, return_counts=True)\n", 141 | "\n", 142 | "plt.plot(d[0], d[1])" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 104, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [ 152 | { 153 | "name": "stdout", 154 | "output_type": "stream", 155 | "text": [ 156 | "4079\n" 157 | ] 158 | } 159 | ], 160 | "source": [ 161 | "s = 0\n", 162 | "lower_limit = 10\n", 163 | "upper_limit = 35\n", 164 | "for ix in range(len(d[0])):\n", 165 | " sl = d[0][ix]\n", 166 | " if sl > lower_limit and sl < upper_limit:\n", 167 | " s += d[1][ix]\n", 168 | "print s" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 89, 174 | "metadata": { 175 | "collapsed": true 176 | }, 177 | "outputs": [], 178 | "source": [ 179 | "def sequence_to_mat(seq):\n", 180 | " vec_seq = word_vec(unicode(seq))\n", 181 | " if len(vec_seq) > lower_limit and len(vec_seq) < upper_limit:\n", 182 | " m = np.ones((upper_limit-1, 300))*5.0\n", 183 | " \n", 184 | " for ix in range(len(vec_seq)):\n", 185 | " m[ix, :] = vec_seq[ix].vector\n", 186 | " return m\n", 187 | " else:\n", 188 | " return None" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 105, 194 | "metadata": { 195 | "collapsed": false 196 | }, 197 | "outputs": [], 198 | "source": [ 199 | "mat = []\n", 200 | "\n", 201 | "for ix in text:\n", 202 | " seq_mat = sequence_to_mat(ix)\n", 203 | " \n", 204 | " if seq_mat is not None:\n", 205 | " mat.append(seq_mat)" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 106, 211 | "metadata": { 212 | "collapsed": false 213 | }, 214 | "outputs": [ 215 | { 216 | "name": "stdout", 217 | "output_type": "stream", 218 | "text": [ 219 | "(4079, 34, 300)\n" 220 | ] 221 | } 222 | ], 223 | "source": [ 224 | "mat = np.asarray(mat)\n", 225 | "print mat.shape\n", 226 | "\n", 227 | "# np.save('../data/movie_review/negative', mat)" 228 | ] 229 | } 230 | ], 231 | "metadata": { 232 | "kernelspec": { 233 | "display_name": "Python 2", 234 | "language": "python", 235 | "name": "python2" 236 | }, 237 | "language_info": { 238 | "codemirror_mode": { 239 | "name": "ipython", 240 | "version": 2 241 | }, 242 | "file_extension": ".py", 243 | "mimetype": "text/x-python", 244 | "name": "python", 245 | "nbconvert_exporter": "python", 246 | "pygments_lexer": "ipython2", 247 | "version": "2.7.12" 248 | } 249 | }, 250 | "nbformat": 4, 251 | "nbformat_minor": 2 252 | } 253 | -------------------------------------------------------------------------------- /class_21/data_processing.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 42, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "import numpy as np\n", 12 | "from matplotlib import pyplot as plt\n", 13 | "%matplotlib inline\n", 14 | "import re\n", 15 | "import spacy" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 97, 21 | "metadata": { 22 | "collapsed": true 23 | }, 24 | "outputs": [], 25 | "source": [ 26 | "f = open('../data/movie_review/rt-polarity.neg')\n", 27 | "ds = f.read()\n", 28 | "f.close()" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 98, 34 | "metadata": { 35 | "collapsed": false 36 | }, 37 | "outputs": [ 38 | { 39 | "name": "stdout", 40 | "output_type": "stream", 41 | "text": [ 42 | "5331\n" 43 | ] 44 | } 45 | ], 46 | "source": [ 47 | "ds = ds.lower()\n", 48 | "data = re.sub('[^a-z 0-9\\n \\'-/]+', '', ds)\n", 49 | "data = re.sub('[- .]+', ' ', data)\n", 50 | "text = data.split('\\n')[:-1]\n", 51 | "print len(text)\n", 52 | "#for ix in range(10)" 53 | ] 54 | }, 55 | { 56 | "cell_type": "code", 57 | "execution_count": 55, 58 | "metadata": { 59 | "collapsed": true 60 | }, 61 | "outputs": [], 62 | "source": [ 63 | "word_vec = spacy.load('en', vectors='glove.6B.300d.txt')" 64 | ] 65 | }, 66 | { 67 | "cell_type": "code", 68 | "execution_count": 101, 69 | "metadata": { 70 | "collapsed": false 71 | }, 72 | "outputs": [ 73 | { 74 | "name": "stdout", 75 | "output_type": "stream", 76 | "text": [ 77 | "a sentimental mess that never rings true \n" 78 | ] 79 | } 80 | ], 81 | "source": [ 82 | "q = word_vec(unicode(text[10]))\n", 83 | "print q\n", 84 | "#for ix in q:\n", 85 | "# print ix, ix.vector.mean()" 86 | ] 87 | }, 88 | { 89 | "cell_type": "code", 90 | "execution_count": 102, 91 | "metadata": { 92 | "collapsed": false 93 | }, 94 | "outputs": [], 95 | "source": [ 96 | "l = []\n", 97 | "\n", 98 | "for ix in text:\n", 99 | " l.append(len(word_vec(unicode(ix))))" 100 | ] 101 | }, 102 | { 103 | "cell_type": "code", 104 | "execution_count": null, 105 | "metadata": { 106 | "collapsed": false 107 | }, 108 | "outputs": [], 109 | "source": [] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 103, 114 | "metadata": { 115 | "collapsed": false 116 | }, 117 | "outputs": [ 118 | { 119 | "data": { 120 | "text/plain": [ 121 | "[]" 122 | ] 123 | }, 124 | "execution_count": 103, 125 | "metadata": {}, 126 | "output_type": "execute_result" 127 | }, 128 | { 129 | "data": { 130 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAg0AAAFkCAYAAACjCwibAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzt3XeYVPX5/vH3Q28CKiIKqCCYRcXCKovirgWVSLFiQU2M\nxkRjDZpobDGWGGNs3xjNL4nGWCLGuipqLKCiy4qyq4JSbKgoRUEFpcN+fn88M2FYtszMljPlfl3X\nXOOec2b22SMw936qhRAQERERqU+LqAsQERGR7KDQICIiIklRaBAREZGkKDSIiIhIUhQaREREJCkK\nDSIiIpIUhQYRERFJikKDiIiIJEWhQURERJKi0CAiIiJJSSk0mNklZvaGmS0zs0Vm9riZ7VTtmpfN\nrCrhsd7M7qh2TW8ze9rMlpvZQjO7wcwUYERERDJYqxSvLwZuA6bFXvsH4HkzGxBCWBm7JgB/B64A\nLHZsRfwNYuHgGWA+MATYFrgPWANcnt6PISIiIk3NGrJhlZl1A74ESkIIr8WOvQS8FUK4oJbXHAY8\nCWwTQlgcO3YGcD2wVQhhXdoFiYiISJNpaJdAV7xl4etqx08ys6/MbIaZXWdm7RPODQFmxANDzHNA\nF2CXBtYjIiIiTSTV7on/MTMDbgVeCyHMTDj1b+BTvPthN+AGYCdgTOx8D2BRtbdblHDunRq+15bA\ncOATYFW6NYuIiOShdsAOwHMhhCUNeaO0QwNwB7AzMDTxYAjhzoQv3zOzhcBEM+sTQphbz3vW1lcy\nHA8jIiIikp6TgAca8gZphQYz+wswAigOISyo5/Kpsed+wFxgIbB3tWu2jj1Xb4GI+wTg/vvvZ8CA\nASnXm6/GjRvHLbfcEnUZWUf3LXW6Z+nRfUud7lnqZs2axcknnwyxz9KGSDk0xALDEcD+IYTPknjJ\nnngLQjxclAOXmlm3hHENhwJLgZk1vB5iXRIDBgxg0KBBqZact7p06aL7lQbdt9TpnqVH9y11umcN\n0uDu/ZRCQ2y9hbHA4cByM4u3ECwNIawys77AifiUyiXA7sDNwCshhHdj1z6Ph4P7zOxiYBvgGuAv\nIYS1Df2BREREpGmkOnviTKAz8DI+0DH+OC52fg1wMD4bYhbwJ+BhPGQAEEKoAkYB64EpwL3Av4Ar\n0/sRREREpDmk1NIQQqgzZIQQPgcOSOJ95uHBQURERLKElm7OYWPHjo26hKyk+5Y63bP06L6lTvcs\nWg1aEbK5mNkgoKKiokIDYERERFJQWVlJYWEhQGEIobIh76WWBhEREUmKQoOIiIgkRaFBREREkqLQ\nICIiIklRaBAREZGkKDSIiIhIUhQaREREJCkKDSIiIpIUhQYRERFJikKDiIiIJEWhQURERJKi0CAi\nIiJJUWgQERGRpCg0iIiISFIUGkRERCQpCg0iIiKSFIUGERERSYpCg4iIiCRFoUFERESSotAgIiIi\nSVFoEBERkaQoNIiIiEhSFBpEREQkKQoNIiIikhSFBhEREUmKQoOIiIgkRaFBREREkqLQIJLg889h\nyZKoqxARyUwKDSIxK1bAvvvCBRdEXYmISGZSaBCJufFGmDcPZsyIuhIRkcyk0CBZpaoKjj8epk5t\n3Pf94gv44x+hRw+YM8e/j4iIbEyhQbLK3Lnw0ENw3nkQQuO976WXQseOcPPN3k3x+eeN994iIrlC\noUGyyvTp/vzGG/DUU43zntOmwb33wjXXwODBfmz27MZ5bxGRXKLQIFll+nTYcks48EC4/PKGdyOE\nAL/8JQwcCD/9KeywA7Rpo9AgIlIThQbJKtOnw267we9/7wMW//Ofhr3fI49AWZl3S7RqBS1bwk47\nKTSIiNREoUGyyowZHhr22QdGjYIrr4R169J7r1Wr4KKLYPRoOPjgDccLChQaRERqotAgWWP5cvjw\nQw8N4GMQPvgA7rknvfe79VYf8HjjjRsfV2gQEamZQoNkjffe8zEI8dCwxx4+/fKqq2D16tTea+FC\n7+I45xzvjkg0YAAsWADLljVO3SIiuUKhQbLGjBlgBjvvvOHYVVf5Ggt/+1tq73X55T7g8be/3fRc\nQYE/z5mTeo3Ll6f+GhGRbKHQIFlj+nTo3x86dNhw7Ac/gFNO8VaDZD+w334b/vlP+N3vYPPNNz0f\nb3lItYvi9dd9Zse8eam9TkQkWyg0SNaIz5yo7re/hW++gdtuq/89QoBx4zxsnHlmzdd06gS9e6ce\nGl5+2btJXnoptdeJiGQLhQbJCiFsmDlR3Q47wBln+DLQ335b+3usWuXXvPwy3HQTtG5d+7XpDIac\nNs2fJ09O7XUiItlCoUGywoIFvmX1wIE1n7/sMv8t/6abNj23fLmvw9C3ry8XfdZZcNhhdX+/dEJD\nRYWPuXj11dReJyKSLRQaJCvEl4+uqaUBfKOpc8+FW26BL7/0Y99+C9deC9tvDxdfDMOHw6xZcPvt\n/uFel4ICn86Z7BoQixfDJ5/AEUfA++/77AwRkVyj0CBZYfp0H2uwww61X3PRRb6i42WXeYvC9tt7\naDjhBF/f4e67fSxDMgoKYO1a3yArGRUV/jxunD+rtUFEcpFCg2SFGTNg112hRR1/YrfcEi68EO68\n0wdFnnGG//b/l794gEhFfNplsl0UFRXQpQsUF8OOOyo0iEhuahV1ASLJmD4dhgyp/7pf/9oDwujR\nsMUW6X+/bbaBzTbz0DB6dP3XT5sGhYXe7VFcnN5gyDvvhK23Tu77iYhEQS0NkvHWrvWxCLWNZ0jU\nvr2v29CQwAD+4Z/KYMiKCthrL//vkhIPOXXN5Khu7Vr41a+8a0VEJFMpNEjGmzPHP1STCQ2NKdnQ\n8OWX8Nln3tIA3tIQgu+emaxXXoGlS70bJp2VKEVEmkNKocHMLjGzN8xsmZktMrPHzWynate0NbPb\nzWyxmX1nZo+YWfdq1/Q2s6fNbLmZLTSzG8xMAUZqFJ85seuuzft9Cwq8hSOEuq+LD4KMtzTsuKN3\nb6QyrqG0FHr18sGejzySXr0iIk0t1Q/qYuA2oAg4GGgNPG9m7ROuuRUYCRwDlADbAo/GT8bCwTP4\neIohwCnAT4Cr0/oJJKOsXu0rNG63nX8QNobp032FxpqWfG5KBQW+0uTixXVfV1HhtfXp41+nOq4h\nBL9XRx/t230rNIhIpkopNIQQRoQQ7gshzAohzMA/7LcDCgHMrDNwGjAuhPBKCOEt4FRgqJkNjr3N\ncKAAOCmEMCOE8BxwBXC2mWlgZhZ77TXfefL666FnTzjqKA8QVVUNe9/alo9uasnOoEgcBBlXUuLH\nV6yo//tUVPimW0ceCWPG+N4YH36Yft0iIk2loV0CXYEAfB37uhBvQZgYvyCEMAf4DNgndmgIMCOE\nkPj723NAF2CXBtYjEVi6FH7xC//tumtXqKyEKVPguut8nYTDD09tUGB1tS0f3dR23NHXfUgmNMS7\nJuKKi30cxtSp9X+f0lJvqSgu9pUqO3RQa4OIZKa0Q4OZGd4V8VoIYWbscA9gTQhhWbXLF8XOxa9Z\nVMN5Eq6RLPHEE75V9f33+9oIr73mYw/M4JJL4OmnfUDg4MEwc2b971fd11/D55/Xvnx0U2rb1pee\nris0LFzorQTVQ8Ouu3qASqaLorTUp1m2auWBYeRIhQYRyUwN6Q64A9gZ2C+Jaw1vkahPndeMGzeO\nLl26bHRs7NixjB07Nom3lsa0YAGcd55/uI0cCX/9q487qO6ww+DNN73pvagI7rvP/ztZM2b4cxQt\nDVD/DIr4IMj4zIm4Fi1gv/3qHwz5wQfw3ntwzTUbjo0ZA8cf76tRxsdJiIgkY/z48YwfP36jY0uX\nLm20908rNJjZX4ARQHEIYX7CqYVAGzPrXK21oTsbWhMWAntXe8utY8/VWyA2cssttzBo0KB0SpZG\ntGaN/2a9di08+CAcd1zdezn06wevvw6nnurjHK64An73u7pXd4ybMQPatIGddqr/2qZQUACPPlr7\n+YoKX4myphUnS0r851y7tvYdNZ94Atq1g0MP3XBsxAg/9uijvnaDiEiyavpFurKyksLqv9mkKeXu\niVhgOAI4MITwWbXTFcA6YFjC9TvhgyWnxA6VAwPNrFvC6w4FlgJpNGBLc5s5E+bP9w+144+vf/Mn\n8KmEDz20YZzDSScl972mT/fuj7q2sW5KBQX+G/+qVTWfr2kQZFxJiQ+ErKys/f1LSz0wdOy44Vin\nTt5Coy4KEck0qa7TcAdwEnAisNzMto492gHEWhfuAm42swPMrBC4GygLIbwZe5vn8XBwn5ntZmbD\ngWuAv4QQ1jbOjyVNqbLSPyRTbfSJj3O4805voZg2rf7XTJ8ezXiGuIICnxL5wQc1n69pEGTcoEE+\nRqG2cQ2LFvmA0Zq6a4491gdRflY9louIRCjVloYzgc7Ay8D8hMdxCdeMAyYAjyRcd0z8ZAihChgF\nrMdbH+4F/gVcmXr5EoXKSv8wTfztOBU//rHvVnnLLXVfV1UF774b3XgG2LArZk3jGubP97EdtYWG\n1q1hn31qH9fw1FMepEaN2vTcyJE+ELOurhERkeaW6joNLUIILWt43JtwzeoQwrkhhG4hhM1CCMeG\nEL6s9j7zQgijQgidQghbhxAujoUJyQKVlam3MiRq1Qp++Uvvrpg3r/br5s6F5cujDQ1bbglbbVVz\naKhtEGSi4mKfUVLTWhWlpT5YcqutNj3XuTMMH64uChHJLFq6WVKyfr0vPtTQ8ainneZN97fdVvs1\n8eWjo+yegNpnUEyb5h/4Nc0aiSsp8VUl33tv4+PffQcvvlj3TJIxY7z74osv0qtbRKSxKTRISubM\ngZUrGx4aNtsMfv5z+Pvf/QO0JtOnQ7du0CPi1TtqCw0VFbUPgowrKvJuiurjGp57zpfcPuKI2l87\nerS/9rHH0qtbRKSxKTRISuIzAfbYo+Hvdd558P33cPfdNZ+PrwSZzOyMphQPDYldDCHUPQgyrkMH\nv6Z6aCgt9Z+tb9/aX9u1KxxyCDz8cPq1i4g0JoUGSUllpS+v3LVrw9+rd29f4+HWW73bo7qo9pyo\nrqDAp04mdhPMn++zH+oLDeDjGl59dcNumWvXwoQJyS1ydeyxPiZiwYL0ahcRaUwKDZKShg6CrO6C\nC3zAY/UdMZcv902boh7PADVvXBWfLprMeiklJf6h/9FH/vUrr/h+HcmEhsMP9/0vHn88tZpFRJqC\nQoMkraoK3nqrcUPDXnv5h+rNN298fOZM/808E1oatt/epz9WDw1bb+27edZn6FDvYolPvSwt9a3D\nk+ni2WILGDZMsyhEJDMoNEjSPv4Yli1r3NAA3towZYovNR03fbovM73zzo37vdLRsqUvY50YGpIZ\nBBnXtauHn8mTPQiVlnorQ7JjNcaM8daJL7+s/1oRkaak0CBJiw+C3HPPxn3fUaN8f4rE1obp06F/\nfx9ImAkSZ1AkOwgyUXxcQ0WFj4046qjkXxsPGOqiEJGoKTRI0iorffBiTYsRNUTLljBunK9++Mkn\nfizq5aOrSwwN8+bBV1+lFhpKSnxMwx13eJfDfsnsDRvTrRsccIC6KEQkegoNkrTGHgSZ6JRToEsX\n+POf/Tf5+HTLTFFQ4DMmli1LbiXI6oqL/flf//L1F1qluL/sscfCSy/B4sWpvU5EpDEpNEhSQmja\n0NCxI5x5pm9mNXs2LFmSeaEBfHGradNgm21g222Tf32PHt7dEkJysyaqO+ooH4j69NOpv1ZEpLEo\nNEhS5s3zD/KmCg0A55zjW1Cff75/nUndEzvt5M+zZ3tLQypdE3ElJdC+vW+Fnaru3WHAACgvT/21\nIiKNRaFBkhIfBNmUoWHbbWHsWHjhBejUyXfCzBSdOvl4jlmzvKUhla6JuMsu83EJ6Q7uLCry7bJF\nRKKi0CBJqaz0dQm22aZpv88FF/jzwIE+5TKTFBT4nhFLlqTX0tCnD4wYkf73LyrysR4rVqT/HiIi\nDZFh/yxLpoqPZ2jqfSB23x2OP75hH65NpaBgQ4tLOi0NDVVU5Mttxwdiiog0txTHcEu+qqz07ayb\nw4MPNs/3SVV8MGTPntHsvLnrrt61MXXqhtkYIiLNSS0NUq8FC/zRlOMZskE8NKTTNdEYWrXy761x\nDSISFYUGqddbb/mzQoM/R9E1EVdUtPFy2yIizUmhQepVWQmbb+4bN+WzbbaBiy6CE0+MroaiIvj8\nc19oSkSkuSk0SL2aaxBkpjODP/4RdtwxuhqKivxZXRQiEgWFBqlXU64EKanp1cvXs1BoEJEoKDRI\nnZYsgU8/VWjIJFrkSUSiotAgddIgyMwzZAi8+aav2SAi0pwUGqROlZW+hHK/flFXInFFRbB8Obz3\nXtSViEi+UWiQOlVWwp57Zt6SzvmssND/f6iLQkSamz4KpE4aBJl5OnXy1SEVGkSkuSk0SK2WLYMP\nPlBoyEQaDCkiUVBokFq9/bY/KzRknqIiH9Pw3XdRVyIi+UShQWpVWQnt2m1YPlkyx5AhEILPohAR\naS4KDVKrykrfqrqV9kLNOAUFsNlm6qIQkeal0CC10iDIzNWyJey9t0KDiDQvhQap0YoVMGuWQkMm\niw+GDCHqSkQkXyg0SI2mT4eqKoWGTFZUBAsXwrx5UVciIvlCoUFqVFkJrVvDLrtEXYnURjteikhz\nU2iQGlVW+gJCbdtGXYnUpkcP2H57eP31qCsRkXyh0CCbqKqCSZNg8OCoK5H6aJEnEWlOCg2yiZdf\nhrlz4Uc/iroSqU9REVRUwNq1UVciIvlAoUE2ceedvg7AvvtGXYnUp6gIVq2CGTOirkRE8oFCg2xk\nyRJ49FE4/XQwi7oaqc+gQb74lrooRKQ5KDTIRv79b5/3r66J7NC+Pey2m0KDiDQPhQb5nxDgH/+A\nI46A7t2jrkaSNWRI/TMo1q+H779vnnpEJHcpNMj/vPEGvPuud01I9igqgjlz4Jtvaj4/bRoUFsK2\n28Idd/jsGBGRdCg0yP/ceSdstx0cfHDUlUgq4os8Vd/xcvlyuPBCP28GY8bA2WdDcTHMnNn8dYpI\n9lNoEAC++w7Gj4fTTvPNkCR79O8PXbtuPK7h+ed9ca477oDrrvNWpH/+E155BRYvhj33hKuugtWr\no6tbRLKPQoMA8NBDvknVqadGXYmkqkULX4hr6lSf/XLKKTB8OPTp41MxL77YlwQHKCmBd96Biy6C\na6/12Rfl5dHWLyLZQ6FBAO+aGD7cuyck+xQVeSvCgAHw5JNw110wcSL067fpte3awTXX+FLhnTrB\n0KFw7rne2iQiUheFBuHdd330vQZAZq8DDvDZEQce6Fuan3Za/etsDBwIU6bALbfA3Xfr/7+I1K9V\n1AVI9O66C7baCkaPjroSSddBB/kW2b16pfa6li3h/PN9gajzz4cvvoCePZumRhHJfmppyHOrV8O9\n93o/eJs2UVcjDZFqYEj0ox/5QlF//3vqr12wwLs31qxJ//uLSHZQaMhzpaXw9dfw059GXYlEqXNn\n+PGPPTSk+uF/7bXwl794t4iI5DaFhjx3552w336+QZXkt7POgoUL4fHHk3/NggXevQXePSIiuS3l\n0GBmxWb2pJl9YWZVZnZ4tfN3x44nPp6pds3mZvZvM1tqZt+Y2Z1m1rGhP4ykZu5cePFFDYATt8su\nsP/+vrZDsm6+Gdq29bERn3/edLWJSGZIp6WhI/A2cDYQarnmWWBroEfsMbba+QeAAcAwYCRQAvwt\njVqkAf75T2+WHjMm6kokU5x9NkyenNxW20uWwF//Cuec40tUq6VBJPelHBpCCP8NIfw2hFAK1Dap\na3UI4asQwpexx9L4CTMrAIYDPw0hTAshTAHOBU4wsx7p/BCSunXrfJrdiSdCR7XxSMyRR8I22yTX\n2vDnP/smZ7/8JfTurZYGkXzQVGMaDjCzRWY228zuMLMtEs7tA3wTQngr4diLeKtFURPVI9X8978+\nvU5dE5KodWv4+c/hvvtg2bLar1u2zEPDz3/u03V79VJLg0g+aIrQ8CzwY+Ag4CJgf+AZs/8tNdMD\n+DLxBSGE9cDXsXPSxL7+Gs47D/bd15cRFkn0s5/BqlU+Fbc2f/2rLzv+q1/51717KzSI5INGX9wp\nhPBQwpfvmdkM4CPgAOClOl5q1D5GAoBx48bRpUuXjY6NHTuWsWOrD5mQ2lRVwcknw9KlMGlS/asG\nSv7p2ROOOsq7KM4+e9M/IytWwE03wU9+smEhqHj3RAj6MyUSpfHjxzN+/PiNji1durSWq1PX5CtC\nhhDmmtlioB8eGhYC3ROvMbOWwObAorre65ZbbmGQfjVukGuu8a6JZ5+FHXaIuhrJVGef7UtSv/SS\nrzaZ6M47vbXq4os3HOvVy1snliyBbt2at1YR2aCmX6QrKyspLCxslPdv8nUazKwXsCWwIHaoHOhq\nZnsmXDYMb2mYijSZZ57x7ZCvvto3pxKpzf77w847bzogcs0a+NOffABt374bjvfu7c8aDCmS29JZ\np6Gjme1uZnvEDvWNfd07du4GMysys+3NbBhQCrwPPAcQQpgd++9/mNneZjYUuA0YH0JY2Dg/llT3\n8cdw0kkwciRcemnU1UimM/PFnkpLNw4C997rA2gvuWTj6+NLWGtcg0huS6elYS/gLaACH4NwE1AJ\nXAWsB3YDngDmAP8A3gRKQghrE97jRGA2PmtiAjAZOCO9H0Hqs3IlHHMMbLmlj4pvoXVAJQnV96NY\ntw6uvx6OPtq34E609da+6ZVaGkRyW8pjGkIIr1B32PhhEu/xLXByqt9bUhcC/OIXMGcOlJdD165R\nVyTZonNnDw7/+Adcfjk88gh89BE8/PCm17ZsqQWeRPKBfufMcX//O9xzjz/vvnvU1Ui2Ofts34/i\nscfguuvgsMNgzz1rvlbTLkVyX5PPnpDoTJ3qWxaffbZPsxRJVXw/inPO8ZkRf6tjsXetCimS+9TS\nkKO++sr3lCgs9E2FRNJ11lkeGPbfH4YOrf06rQopkvsUGnLQunVwwgk+Pe7hh6FNm6grkmx21FH+\n+OMf674ucYEnEclN6p7IQVdcAa+84ttex6fCiaSrdWsf01CfXr1g9WpYvNj3oxCR3KOWhhzz+OM+\nLe766+GAA6KuRvKJFngSyX0KDTnk/ffhlFN8TYYLL4y6Gsk38dCgcQ0iuUuhIUd8/70vutOzJ9x9\ntzYNkubXvbt3ZSg0iOQujWnIASHA6afDp5/CG2/AZptFXZHkoxYtPLSqe0Ikdyk05IA//xn+8x94\n6KFNl/cVaU6adimS29Q9keVefRV+9Ssfw3DssVFXI/lOCzyJ5DaFhiy2YAEcd5wvuHP99VFXI6KW\nBpFcp9CQpULwBZxatPCuiVbqaJIMoAWeRHKbPmqy1IwZMHkyPPmkb0sskgl69/aVSL/6ymdTiEhu\nUUtDlnrqKejUCYYPj7oSkQ3iK5BqXINIblJoyFITJnhg0L4Skkm0wJNIblNoyEJffunbXo8aFXUl\nIhvbaist8CSSyxQastCzz/rzYYdFW4dIdS1aeBeFuidEcpNCQxaaMAEGD9YASMlMvXurpUEkVyk0\nZJk1a+C552D06KgrEamZWhpEcpdCQ5aZPBm++07jGSRzqaVBJHcpNGSZCRP8N7nddou6EpGa9eoF\nX3wBVVVRVyIijU2hIYuE4OszjBqlra8lcyUu8CQiuUWhIYvMng0ff6yuCcls8QWe1EUhknsUGrLI\nhAnQvj0cdFDUlYjULr7AkwZDiuQehYYsMmECHHywBweRTLXVVr5SqVoaRHKPQkOW+PprKCtT14Rk\nPjNNuxTJVQoNWeK552D9ehg5MupKROqnaZciuUmhIUs89RTsuSf07Bl1JSL1U0uDSG5SaMgC69b5\nfhPqmpBsoZYGkdyk0JAFpkyBb7/V0tGSPXr31gJPIrlIoSELTJjgm1MVFkZdiUhyevWCtWt9G3cR\nyR0KDVlgwgQfANlC/7ckS8TXalAXhUhu0cdQhvvoI5g1S+MZJLvEV4XUYEiR3KLQkOEmTPCFcg4+\nOOpKRJLXrRu0bauWBpFco9CQ4SZMgAMOgM02i7oSkeRpgSeR3KTQkMGWLYNXXtGsCclOmnYpknta\nRV1APnvsMfjDH6B/fygogAED/NG/vzftPv+8j0DXKpCSjXr3hrlzo65CRBqTQkOE7r0XFi70Dahe\neAEWL/bjLVtC374eGHbZBfr0ibZOkXT06gWTJ0ddhYg0JoWGiITgG1D94hdw9dV+bPFinykRf8ye\nDWPHRlunSLriCzytX+9BWESyn0JDRN5/30PC0KEbjnXrBsXF/hDJdr16+RLoX34J22wTdTUi0hg0\nEDIiZWU+wnzIkKgrEWkaWuBJJPcoNESkrAwGDoQuXaKuRKRpxEODpl2K5A6FhoiUlcF++0VdhUjT\n2WILaNdOLQ0iuUShIQJffQVz5mw8nkEk15h5a4NaGkRyh0JDBKZM8WeFBsl1vXqppUEklyg0RKCs\nDHr2hO22i7oSkaalVSFFcotCQwTi4xnMoq5EpGlp/wmR3KLQ0MxWrYJp09Q1IfkhcYEnEcl+Cg3N\nbNo0WLNGoUHyQ+/eHhgWLYq6EhFpDAoNzaysDDp1gt12i7oSkabXq5c/a1yDSG5IOTSYWbGZPWlm\nX5hZlZkdXsM1V5vZfDNbYWYvmFm/auc3N7N/m9lSM/vGzO40s44N+UGyRVmZrwLZSgt4Sx7QAk8i\nuSWdloaOwNvA2UCoftLMLgbOAc4ABgPLgefMrE3CZQ8AA4BhwEigBPhbGrVklaoqn26prgnJF5tv\n7ru4qqVBJDek/PtuCOG/wH8BzGoc/38+cE0I4anYNT8GFgFHAg+Z2QBgOFAYQngrds25wNNm9qsQ\nwsK0fpIsMGcOLFmi0CD5I77Ak0KDSG5o1DENZtYH6AFMjB8LISwDpgL7xA4NAb6JB4aYF/FWi6LG\nrCfTlJVBixbapEryS03TLkPwIPH883DbbfDss35MRDJbY/es98A//KuPlV4UOxe/5svEkyGE9Wb2\ndcI1WeOjj2CHHaBly/qvLSuD3XeHzTZr8rJEMkbv3lBeDn/4A8ya5Y/Zs+H77/18q1a+hfbuu8Ol\nl8IxxySubLHCAAAaNElEQVT390lEml9zDcczahj/kOo148aNo0u1bSHHjh3L2LFjG1ZdmpYtg112\ngcsugyuuqP/6sjIYPrzp6xLJJDvvDPfcAzfcAAMG+O6uxx3n/z1ggIfuV1+F3/8ejj8efvAD+M1v\n4KSToHXrqKsXyS7jx49n/PjxGx1bunRpo72/hQa0CZpZFXBkCOHJ2Nd9gI+APUII0xOuexl4K4Qw\nzsxOBW4MIWyZcL4lsAoYE0J4oobvMwioqKioYNCgQWnX29heeAEOPRQ6d4aPP4Ytt6z92kWLoEcP\nGD8eTjih+WoUiVpVFXz9tf/9qG8V1DfegOuugyee8GXWL7oITjvNB1OKSHoqKyspLCwEH0tY2ZD3\natQxDSGEucBCfFYEAGbWGR+rENumiXKgq5ntmfDSYXhLw9TGrKeplZd7YFi/3n+Lqkt8kypthy35\npkUL6NYtuWXTBw+G0lKYPt0HDJ93HvTtC+++2/R1ikj90lmnoaOZ7W5me8QO9Y19HZuRza3A5WY2\n2swGAvcCnwNPAIQQZgPPAf8ws73NbChwGzA+22ZOlJf7P2zjxvlgrgULar+2rMx/c4ovdiMitRs4\nEB54wGccVVXB/fdHXZGIQHotDXsBbwEV+BiEm4BK4CqAEMINeAj4G95y0B44LISwJuE9TgRm47Mm\nJgCT8XUdskZVFbz+OuyzD1x4IbRt682qtSkr01RLkVT16wcHHgiTJ0ddiYhAGqEhhPBKCKFFCKFl\ntcdpCdf8LoSwbQihQwhheAjhw2rv8W0I4eQQQpcQwuYhhJ+FEFY0xg/UXGbPhm+/9dDQtav3vf7t\nb/DJJ5teu3IlVFSoa0IkHcXFvmfLiqz6F0IkN2nviTSVl3sf7eDB/vV55/nqd1dfvem1b74Ja9eq\npUEkHSUl/vdnalaNeBLJTQoNaSov937Xzp39644dferlPfd4P2yisjK/btddm79OkWy3yy4eyF99\nNepKREShIU3l5d41keiMM6BnT/jtbzc+Ht+kSgvWiKSuRQvv2tO4BpHoKTSk4dtvYebMTUND27Zw\n5ZXw0EPw9tt+rKrKQ4PGM4ikr7jYg/ratVFXIpLfFBrSEO9brR4aAE45Bfr3h8sv969nzfKQofEM\nIukrKfGBkJUNWpZGRBpKoSENU6b46nb9+296rlUrHwz59NP+m1FZmXdLFOX0VlwiTWvQIOjQQV0U\nIlFTaEhDebmPUahthbvjjoPddvPNd157DfbYwwdKikh6Wrf2lj0NhhSJlkJDiqqqvHuipq6JuBYt\n4Jpr4OWX4ZFHNJ5BpDEUF3sIr6qKuhKR/KXQkKKZM313y333rfu60aO9S2LlSo1nEGkMJSXwzTfw\n3ntRVyKSvxQaUlRe7i0Je+9d93VmvolVjx6w//7NU5tILisq8m4KjWsQiY5CQ4rKy328QqdO9V9b\nUuKbWHXv3vR1ieS6Dh1gr700rkEkSgoNKZoype7xDCLSdIqLvaUhhKgrEclPCg0p+PprXyJaoUEk\nGvHWu48/jroSkfyk0JCC11/3Z4UGkWgMHerjhTSuQSQaCg0pKC+HrbaCHXeMuhKR/NS1q48p0rgG\nkWgoNKQgvklVbYs6iUjTi49rEJHmp9CQpPXr61/USUSaXkkJfPQRzJ8fdSUi+UehIUnvvgvff6/Q\nIBK14mJ/VheFSPNTaEhSeblvPLXXXlFXIpLfevTwzeLURSHS/BQaklReDrvvro2nRDJBSYlaGkSi\noNCQpPggSBGJXnExzJjha6eISPNRaEjC4sXwwQf1b1IlIs2jpMSfy8qirUMk3yg0JEGLOolklh12\ngJ49Na5BpLkpNCRhyhTYemv/h0pEomemcQ0iUVBoSIIWdRLJPMXFUFEBy5dHXYlI/lBoqMe6dfDG\nG+qaEMk0JSX+9zPefSgiTU+hoR4zZsCKFQoNIplmwADYYguNaxBpTgoN9Sgvh1attKiTSKZp0cK7\nKDSuQaT5KDTUo7wc9twT2rePuhIRqa642P+OrlgRdSUi+UGhoQ4heNPn0KFRVyIiNRk92gcojxrl\ne8OISNNSaKjDRx/BZ5/BQQdFXYmI1GSnneC552DaNBg+HJYujboikdym0FCHSZN8k6r994+6EhGp\nTXExvPgizJwJw4bBkiVRVySSuxQa6jBxIuy9N3TuHHUlIlKXwYPhpZfg00/hwANh0aKoKxLJTQoN\ntaiq8pYGdU2IZIc99oBXXvG9YvbfHz7/POqKRHKPQkMt3n3X//EZNizqSkQkWTvv7IOXV670xZ/m\nzo26IpHcotBQi4kToW1b7Wwpkm369fPg0KKFB4f334+6IpHcodBQi4kTfaplu3ZRVyIiqdp+ew8O\nm20Ghx6qdRxEGotCQw3WrvW+UXVNiGSvbbeFJ5+E+fPhppuirkYkNyg01GDaNF8oRqFBJLv16wfn\nnQfXX+/hQUQaRqGhBhMn+jTLwsKoKxGRhrr8cujQAS69NOpKRLKfQkMNJk3yKVutWkVdiYg0VNeu\ncPXVcM89UFERdTUi2U2hoZqVK2HKFHVNiOSSn/0MdtkFfvlL31NGRNKj0FBNWRmsXq3QIJJLWrWC\nW26B116DRx+NuhqR7KXQUM2kSdC9u/9WIiK545BDYORI+PWvYdWqqKsRyU4KDdVMnOhLR5tFXYmI\nNLYbb/Tlpf/v/6KuRCQ7KTQk+PZbn26prgmR3FRQAGedBb//vTa1EkmHQkOCyZN9oyptUiWSu668\n0sc4XHFF1JWIZB+FhgQTJ8IOO0DfvlFXIiJNZYst4He/g7vugnfeiboakeyi0JBg0iR1TYjkg1/8\nAvr3hwsu0BRMkVRo+aKYRYt8O+xLLom6EhFpaq1b+34Uo0bBr37l+1TUpFUr+PGPYfPNm7c+kUyl\n0BAzaZI/azyDSH4YMQJOOcW7KWrz3Xc+QPrKK5uvLpFM1ujdE2Z2pZlVVXvMTDjf1sxuN7PFZvad\nmT1iZt0bu45UTZrkazP06BF1JSLSHMzgX//yUFDb48QT4ZFHoq5UJHM01ZiGd4GtgR6xx34J524F\nRgLHACXAtkDka7TF12cQEYkbM8a7LWfPjroSkczQVKFhXQjhqxDCl7HH1wBm1hk4DRgXQnglhPAW\ncCow1MwGN1Et9Zo71x8aBCkiiQ49FDp10tLTInFNFRr6m9kXZvaRmd1vZr1jxwvxcRQT4xeGEOYA\nnwH7NFEt9Zo0CVq08J0tRUTi2rf3wZLqohBxTREaXgd+AgwHzgT6AJPNrCPeVbEmhLCs2msWxc5F\nYuJEKCz0LXRFRBKNGQNvvw0ffhh1JSLRa/TZEyGE5xK+fNfM3gA+BY4DatsmxoB6Z0uPGzeOLl26\nbHRs7NixjB07Ns1qfY72pElw6qlpv4WI5LDDDoMOHby14Te/iboakbqNHz+e8ePHb3Rs6dKljfb+\nFpphZZNYcHgBeDH22DyxtcHMPgFuCSHUuI2MmQ0CKioqKhg0aFCj1vbee7DrrvDCC3DwwY361iKS\nI447Dj7+2PemEck2lZWVFBYWAhSGECob8l5NviKkmXUCdgTmAxXAOmBYwvmdgO2A8qaupSYTJ0Kb\nNjB0aBTfXUSywZgxUFHhA6ZF8llTrNPwJzMrMbPtzWxf4HE8KDwYa124C7jZzA4ws0LgbqAshPBG\nY9eSjGeegeJiH/AkIlKTESOgXTvNohBpipaGXsADwGzgQeArYEgIYUns/DhgAvAI8DLeAnFME9RR\nr++/h5degtGjo/juIpItOnXysQ0PPxx1JSLRaoqBkHWOSgwhrAbOjT0i9eKLsGaNT6kSEanLscf6\nCpGffgrbbx91NSLRyOtdLidMgAEDYMcdo65ERDLdyJHQti089ljUlYhEJ29DQ1UVPP20WhlEJDmd\nO8Pw4VroSfJb3oaGigpYuFChQUSSN2YMTJkCn38edSUi0cjb0DBhgq8Aue++UVciItli9Gho3Vpd\nFJK/8jo0HHYYtGr0oaAikqu6doVDDlEXheSvvAwNX3wBlZWaaikiqTv2WHjtNViwIOpKRJpfXoaG\nZ56Bli19UJOISCoOP9z//VAXheSjvAwNTz3ly0ZvsUXUlYhIttliCxg2TF0Ukp/yLjSsXOmLOmnW\nhIika8wYmDwZFi2KuhKR5pV3oeGllzw4KDSISLqOPBLMoLQ06kpEmlfehYYJE6BvXygoiLoSEclW\n3brBAQeoi0LyT16FhhA8NIwe7b8liIik69hjveXyrLO8y3Pt2qgrEml6eRUapk+HefPUNSEiDXfK\nKXDBBT4b65BDYOut4Sc/gSef9C5QkVyUV0sbTZjgW9yWlERdiYhku3bt4IYb4I9/hLffhkcf9WmY\n99wDHTvCiBFQXFz3AnIHHwz9+zdfzSINlXehYfhwaNMm6kpEJFeYwZ57+uPaa2H2bHj8cQ8Rjz9e\n++vWr/ep36++2ny1ijRU3nRPfPklTJ2qrgkRaVoFBXDJJTBtmo9zqO3xwAO+suScOVFXLJK8vAkN\nzz7rzyNGRFuHiAj4tM0ttoC77oq6EpHk5U1oeOopKCqC7t2jrkRExMdE/OhHPgZizZqoqxFJTl6E\nhjVr4Lnn1DUhIpnlpz/1rtMJE6KuRCQ5eREaJk+G779XaBCRzDJwoLeA3nln1JWIJCcvQsOECdCr\nF+y2W9SViIhs7PTT4b//9TVkRDJdzoeGEHw8w6hRWgVSRDLPCSf4ug533x11JSL1y/nQMHs2fPyx\nLx0tIpJpOnXy4HDXXb52g0gmy/nQ8MQT0KEDHHhg1JWIiNTs9NPhs89g4sSoKxGpW86HhtJS+OEP\noX37qCsREanZ4MGw664aECmZL6dDw/z5vgrkkUdGXYmISO3MvLWhtBS++irqakRql9Oh4amnoGVL\nGDky6kpEROp28skeHu67L+pKRGqX06GhtBT239+XahURyWRbbglHH+1dFCHUfe3kyXD44fDQQxo8\nKc0rZ0PDsmU+qEhdEyKSLU4/HWbNgvLyms+HALfdBsOGwVtvwfHHwy67wL/+5ZtgiTS1nA0Nzz7r\nf4mOOCLqSkREknPggdCnT80DIletglNPhfPOg3PPhblzfcxWQYEf798f7rjDrxNpKjkbGkpLYdAg\n2G67qCsREUlOixa+H8V//uOtpXHz5kFxsR+/7z64+WZo1cpnXZSWwvTpsO++Hib69IEbb/Sl80Ua\nW06GhtWr4emn1TUhItnnJz/x1oIHH/SvX3kFCgt9Y6uyMh8wWd3AgfDAA76Y3ciRcOmlsOOOPuah\nvvERIqnIydDw8svw3XcKDSKSfXr2hBEj4B//8PELBx/sazhMm+atp3Xp39+7Nj780Fsmjj/eu2i1\nr4U0lpwMDaWl0Lev/0UTEck2p5/uISE+fuH552GrrZJ//XbbwSOPwGOP+fvsvDPcfjtUVTVdzZIf\nci40VFX50tFHHqkNqkQkO40YAccdB/ffv2H8QjqOOgpmzoSTToJzzvHWh5kzG7dWyS85FxrefBMW\nLFDXhIhkr9atfdDjSSc1/L26doX/9/98bMTixbDHHnDVVT72SyRVORcaSkuhWzcfSSwiIq6kBN55\nBy6+GK691sc6aGEoSVVOhobDD/flo0VEZIN27eCaa+CZZ+CFF7zFQSQVORUaZs/2h7omRERqd8gh\n3tpwzTUwYULU1Ug2yanQ8MQT0KGDT1ESEZHaXXyxd1GcfLJP0RRJRk6FhtJS+OEPoX37qCsREcls\nLVrAPff4VM6jj4YVK6KuSLJBzoSGBQvg9dfVNSEikqwuXXwth48+gjPO0OqRUr+cCQ1PPumDH0eO\njLoSEZHsMXCgryJ5//2+4ZVIXdJcMiTzlJbC/vvDFltEXYmISHYZO9Zban/5S9hzT01Zl9rlREvD\nsmUwcaK6JkRE0vWnP0FRERx7LCxaFHU1kqlyoqXh2Wdh7VofCSwiIqlr08Z3xRw0yDe6uu229Jfi\n79YNevRI77Xz58M222gbgEyVE6GhtNT/oG+3XdSViIhkr2239eAwbBjstlvD3mvwYJ+VcfTRvvtm\nbUKAt9/2AZmPPw7vvQdnnunjKxQcMk/Wh4bVq+Hpp+HXv466EhGR7FdS4us2LFiQ/nt8+KEHgKuu\ngt/8xnccPvpo30Br9909KJSXe1B47DH45BPfI+Pww/3xhz9Ar15w2WWN9mNJI8n60LBuna9qdthh\nUVciIpIbtt/eH+kaMsQXjVqxwrf1fuwx+L//g6uvhj59YOVKWLjQuzCOOsofBxzgG3WBL3d9+eXe\n8nHqqY3yI0kjyfrQ0LEjnH9+1FWIiEh1HTr4APUjj4Q1a+Dll33l3vbtveVhyBBfZKq6K66AL76A\nn/0Mtt7atwqXzJATsyekZuPHj4+6hKyk+5Y63bP05NN9a9MGDj0Ubr8dbrzRp3XWFBjAxzLcfruv\nu3PssfDmmxvO5dM9y0SRhgYzO9vM5prZSjN73cz2jrKeXKO/XOnRfUud7ll6dN9q16oVjB/vYyBG\njtywP4buWbQi654ws+OBm4CfA28A44DnzGynEMLiqOoSEZHM0KEDPPUUDB0Kw4fDlCnJvS4E+Pxz\nmDVr48fs2T5uYsCATR/du2u2RjKiHNMwDvhbCOFeADM7ExgJnAbcEGFdIiKSIbbcEv77X9hnHxg1\nyjfYilu71vfNqCkcLF/u17RrBz/4ARQUwEEH+WtmzYIXX4S//tUH0wNsvnnNYWL77WvvRslHkYQG\nM2sNFALXxY+FEIKZvQjsE0VNIiKSmXbYwRfxKynxkHDMMf7B/+GHHgLAp2wOGODdGSecsPGHfsuW\nNb9vTaHj7bfhwQc3hI727T10DBgA/fptmOGRjt12y/5FCKNqaegGtASqL1a6CPhBDde3A5g1a1YT\nl5Vbli5dSmVlZdRlZB3dt9TpnqVH9y01N9wAF164lHnzKhk40Nd06NPHH1tuuWn3wrff+qM+8Smm\nP/yhf11V5Utpz53rj08+8daLF19s2E6ghxwCvXun//p0JXx2tmvoe1mIYC9UM9sG+ALYJ4QwNeH4\nDcB+IYR9q11/IvDv5q1SREQkp5wUQnigIW8QVUvDYmA9sHW1493ZtPUB4DngJOATYFWTViYiIpJb\n2gE74J+lDRJJSwOAmb0OTA0hnB/72oDPgD+HEP4USVEiIiJSqyhnT9wM3GNmFWyYctkB+FeENYmI\niEgtIgsNIYSHzKwbcDXeTfE2MDyE8FVUNYmIiEjtIuueEBERkeyiJStEREQkKQoNIiIikpSMDw3a\n1KpuZlZsZk+a2RdmVmVmh9dwzdVmNt/MVpjZC2bWL4paM4WZXWJmb5jZMjNbZGaPm9lO1a5pa2a3\nm9liM/vOzB4xs+5R1ZwJzOxMM3vHzJbGHlPM7IcJ53XP6hH7s1dlZjcnHNN9q8bMrozdp8THzITz\numc1MLNtzey+2H1ZEfv7OqjaNQ36PMjo0JCwqdWVwJ7AO/imVt0iLSyzdMQHkZ4NbDJAxcwuBs4B\nzgAGA8vxe9imOYvMMMXAbUARcDDQGnjezNonXHMrvhfKMUAJsC3waDPXmWnmARfjS8AXApOAJ8xs\nQOy87lkdYr/w/Az/dyyR7lvN3sUHyfeIPfZLOKd7Vo2ZdQXKgNXAcGAAcCHwTcI1Df88CCFk7AN4\nHfi/hK8N+By4KOraMvEBVAGHVzs2HxiX8HVnYCVwXNT1ZsoDX9a8Cl+NNH6PVgNHJVzzg9g1g6Ou\nN5MewBLgVN2zeu9TJ2AOcBDwEnBz7LjuW83360qgspZzumc135frgVfquabBnwcZ29KQsKnVxPix\n4D+lNrVKkpn1wRN64j1cBkxF9zBRV7yV5uvY14X4dOTE+zYHX3xM9w0wsxZmdgK+tko5umf1uR14\nKoQwqdrxvdB9q03/WLfrR2Z2v5nFd23Qn7WajQammdlDsW7XSjM7PX6ysT4PMjY0UPemVj2av5ys\n1AP/MNQ9rEVsJdJbgddCCPE+0x7AmthfqER5f9/MbFcz+w7/Te8O/Le92eie1SoWrvYALqnh9Nbo\nvtXkdeAneDP7mUAfYLKZdUR/1mrTF/gF3qJ1KPD/gD+b2cmx843yeRDlipDpMmrou5eU6B5ucAew\nMxv3l9ZG9w1mA7vjrTPHAPeaWUkd1+f1PTOzXngoPSSEsDaVl5LH9y2EkLhHwrtm9gbwKXActe8/\nlNf3DG8EeCOEcEXs63fMbBc8SNxfx+tSum+Z3NKQ6qZWsqmF+B8I3cMamNlfgBHAASGE+QmnFgJt\nzKxztZfk/X0LIawLIXwcQqgMIVyGD+o7H92z2hQCWwEVZrbWzNYC+wPnm9ka/N601X2rWwhhKfA+\n0A/9WavNAmBWtWOzgO1i/90onwcZGxpiqbwCGBY/FmtKHgZMiaqubBJCmIv/QUm8h53xWQN5fQ9j\ngeEI4MAQwmfVTlcA69j4vu2E/+Urb7Yis0MLoC26Z7V5ERiId0/sHntMw3/zi//3WnTf6mRmnYAd\n8YF8+rNWszJ8QGiiH+AtNI32eZDp3RPa1KoesT6+fniCBOhrZrsDX4cQ5uFNo5eb2Yf41uLX4DNQ\nnoig3IxgZncAY4HDgeVmFk/eS0MIq0IIy8zsLuBmM/sG+A74M1AWQngjmqqjZ2a/B57Fp15uhm9X\nvz9wqO5ZzUIIy4GZicfMbDmwJIQwK/a17ls1ZvYn4Cn8A68ncBUeFB7Un7Va3QKUmdklwEN4GDgd\nn+Yb1/DPg6iniSQxjeSs2A+3Ek+Re0VdUyY98H+0q/CunMTHPxOu+R2e0Ffg+6n3i7ruiO9ZTfdr\nPfDjhGva4ms5LMb/UXoY6B517RHftzuBj2N/FxcCzwMH6Z6lfB8nEZtyqftW6z0aH/swW4nPingA\n6KN7Vu99GwFMj/1b/x5wWg3XNOjzQBtWiYiISFIydkyDiIiIZBaFBhEREUmKQoOIiIgkRaFBRERE\nkqLQICIiIklRaBAREZGkKDSIiIhIUhQaREREJCkKDSIiIpIUhQYRERFJikKDiIiIJOX/AzEl1cIJ\nYqTBAAAAAElFTkSuQmCC\n", 131 | "text/plain": [ 132 | "" 133 | ] 134 | }, 135 | "metadata": {}, 136 | "output_type": "display_data" 137 | } 138 | ], 139 | "source": [ 140 | "d = np.unique(l, return_counts=True)\n", 141 | "\n", 142 | "plt.plot(d[0], d[1])" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 104, 148 | "metadata": { 149 | "collapsed": false 150 | }, 151 | "outputs": [ 152 | { 153 | "name": "stdout", 154 | "output_type": "stream", 155 | "text": [ 156 | "4079\n" 157 | ] 158 | } 159 | ], 160 | "source": [ 161 | "s = 0\n", 162 | "lower_limit = 10\n", 163 | "upper_limit = 35\n", 164 | "for ix in range(len(d[0])):\n", 165 | " sl = d[0][ix]\n", 166 | " if sl > lower_limit and sl < upper_limit:\n", 167 | " s += d[1][ix]\n", 168 | "print s" 169 | ] 170 | }, 171 | { 172 | "cell_type": "code", 173 | "execution_count": 89, 174 | "metadata": { 175 | "collapsed": true 176 | }, 177 | "outputs": [], 178 | "source": [ 179 | "def sequence_to_mat(seq):\n", 180 | " vec_seq = word_vec(unicode(seq))\n", 181 | " if len(vec_seq) > lower_limit and len(vec_seq) < upper_limit:\n", 182 | " m = np.ones((upper_limit-1, 300))*5.0\n", 183 | " \n", 184 | " for ix in range(len(vec_seq)):\n", 185 | " m[ix, :] = vec_seq[ix].vector\n", 186 | " return m\n", 187 | " else:\n", 188 | " return None" 189 | ] 190 | }, 191 | { 192 | "cell_type": "code", 193 | "execution_count": 105, 194 | "metadata": { 195 | "collapsed": false 196 | }, 197 | "outputs": [], 198 | "source": [ 199 | "mat = []\n", 200 | "\n", 201 | "for ix in text:\n", 202 | " seq_mat = sequence_to_mat(ix)\n", 203 | " \n", 204 | " if seq_mat is not None:\n", 205 | " mat.append(seq_mat)" 206 | ] 207 | }, 208 | { 209 | "cell_type": "code", 210 | "execution_count": 107, 211 | "metadata": { 212 | "collapsed": false 213 | }, 214 | "outputs": [ 215 | { 216 | "name": "stdout", 217 | "output_type": "stream", 218 | "text": [ 219 | "(4079, 34, 300)\n" 220 | ] 221 | } 222 | ], 223 | "source": [ 224 | "mat = np.asarray(mat)\n", 225 | "print mat.shape\n", 226 | "\n", 227 | "# np.save('../data/movie_review/negative', mat)" 228 | ] 229 | } 230 | ], 231 | "metadata": { 232 | "kernelspec": { 233 | "display_name": "Python 2", 234 | "language": "python", 235 | "name": "python2" 236 | }, 237 | "language_info": { 238 | "codemirror_mode": { 239 | "name": "ipython", 240 | "version": 2 241 | }, 242 | "file_extension": ".py", 243 | "mimetype": "text/x-python", 244 | "name": "python", 245 | "nbconvert_exporter": "python", 246 | "pygments_lexer": "ipython2", 247 | "version": "2.7.12" 248 | } 249 | }, 250 | "nbformat": 4, 251 | "nbformat_minor": 2 252 | } 253 | -------------------------------------------------------------------------------- /class_22/.ipynb_checkpoints/gan_mnist-checkpoint.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": false 8 | }, 9 | "outputs": [ 10 | { 11 | "name": "stderr", 12 | "output_type": "stream", 13 | "text": [ 14 | "Using TensorFlow backend.\n" 15 | ] 16 | } 17 | ], 18 | "source": [ 19 | "import os\n", 20 | "#os.environ[\"KERAS_BACKEND\"] = \"tensorflow\"\n", 21 | "import numpy as np\n", 22 | "from tqdm import tqdm\n", 23 | "import matplotlib.pyplot as plt\n", 24 | "%matplotlib inline\n", 25 | "\n", 26 | "from keras.layers import Input\n", 27 | "from keras.models import Model, Sequential\n", 28 | "from keras.layers.core import Reshape, Dense, Dropout, Flatten\n", 29 | "from keras.layers.advanced_activations import LeakyReLU\n", 30 | "from keras.layers.convolutional import Convolution2D, UpSampling2D\n", 31 | "from keras.layers.normalization import BatchNormalization\n", 32 | "from keras.regularizers import l1, l1_l2 as l1l2\n", 33 | "from keras.datasets import mnist\n", 34 | "from keras.optimizers import Adam\n", 35 | "from keras import backend as K" 36 | ] 37 | }, 38 | { 39 | "cell_type": "code", 40 | "execution_count": 2, 41 | "metadata": { 42 | "collapsed": true 43 | }, 44 | "outputs": [], 45 | "source": [ 46 | "K.set_image_dim_ordering('th')\n", 47 | "\n", 48 | "# Deterministic output.\n", 49 | "# Tired of seeing the same results every time? Remove the line below.\n", 50 | "np.random.seed(1000)\n", 51 | "\n", 52 | "# The results are a little better when the dimensionality of the random vector is only 10.\n", 53 | "# The dimensionality has been left at 100 for consistency with other GAN implementations.\n", 54 | "randomDim = 100" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 3, 60 | "metadata": { 61 | "collapsed": true 62 | }, 63 | "outputs": [], 64 | "source": [ 65 | "(X_train, y_train), (X_test, y_test) = mnist.load_data()\n", 66 | "X_train = (X_train.astype(np.float32) - 127.5)/127.5\n", 67 | "X_train = X_train.reshape(60000, 784)" 68 | ] 69 | }, 70 | { 71 | "cell_type": "code", 72 | "execution_count": 5, 73 | "metadata": { 74 | "collapsed": true 75 | }, 76 | "outputs": [], 77 | "source": [ 78 | "adam = Adam(lr=0.0002, beta_1=0.5)" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 8, 84 | "metadata": { 85 | "collapsed": false 86 | }, 87 | "outputs": [ 88 | { 89 | "name": "stdout", 90 | "output_type": "stream", 91 | "text": [ 92 | "_________________________________________________________________\n", 93 | "Layer (type) Output Shape Param # \n", 94 | "=================================================================\n", 95 | "dense_9 (Dense) (None, 256) 25856 \n", 96 | "_________________________________________________________________\n", 97 | "leaky_re_lu_7 (LeakyReLU) (None, 256) 0 \n", 98 | "_________________________________________________________________\n", 99 | "dense_10 (Dense) (None, 512) 131584 \n", 100 | "_________________________________________________________________\n", 101 | "leaky_re_lu_8 (LeakyReLU) (None, 512) 0 \n", 102 | "_________________________________________________________________\n", 103 | "dense_11 (Dense) (None, 1024) 525312 \n", 104 | "_________________________________________________________________\n", 105 | "leaky_re_lu_9 (LeakyReLU) (None, 1024) 0 \n", 106 | "_________________________________________________________________\n", 107 | "dense_12 (Dense) (None, 784) 803600 \n", 108 | "=================================================================\n", 109 | "Total params: 1,486,352\n", 110 | "Trainable params: 1,486,352\n", 111 | "Non-trainable params: 0\n", 112 | "_________________________________________________________________\n" 113 | ] 114 | } 115 | ], 116 | "source": [ 117 | "generator = Sequential()\n", 118 | "generator.add(Dense(256, input_dim=randomDim))\n", 119 | "generator.add(LeakyReLU(0.2))\n", 120 | "generator.add(Dense(512))\n", 121 | "generator.add(LeakyReLU(0.2))\n", 122 | "generator.add(Dense(1024))\n", 123 | "generator.add(LeakyReLU(0.2))\n", 124 | "generator.add(Dense(784, activation='tanh'))\n", 125 | "generator.compile(loss='binary_crossentropy', optimizer=adam)\n", 126 | "\n", 127 | "generator.summary()" 128 | ] 129 | }, 130 | { 131 | "cell_type": "code", 132 | "execution_count": 10, 133 | "metadata": { 134 | "collapsed": false 135 | }, 136 | "outputs": [ 137 | { 138 | "name": "stdout", 139 | "output_type": "stream", 140 | "text": [ 141 | "_________________________________________________________________\n", 142 | "Layer (type) Output Shape Param # \n", 143 | "=================================================================\n", 144 | "dense_17 (Dense) (None, 1024) 803840 \n", 145 | "_________________________________________________________________\n", 146 | "leaky_re_lu_13 (LeakyReLU) (None, 1024) 0 \n", 147 | "_________________________________________________________________\n", 148 | "dropout_4 (Dropout) (None, 1024) 0 \n", 149 | "_________________________________________________________________\n", 150 | "dense_18 (Dense) (None, 512) 524800 \n", 151 | "_________________________________________________________________\n", 152 | "leaky_re_lu_14 (LeakyReLU) (None, 512) 0 \n", 153 | "_________________________________________________________________\n", 154 | "dropout_5 (Dropout) (None, 512) 0 \n", 155 | "_________________________________________________________________\n", 156 | "dense_19 (Dense) (None, 256) 131328 \n", 157 | "_________________________________________________________________\n", 158 | "leaky_re_lu_15 (LeakyReLU) (None, 256) 0 \n", 159 | "_________________________________________________________________\n", 160 | "dropout_6 (Dropout) (None, 256) 0 \n", 161 | "_________________________________________________________________\n", 162 | "dense_20 (Dense) (None, 1) 257 \n", 163 | "=================================================================\n", 164 | "Total params: 1,460,225\n", 165 | "Trainable params: 1,460,225\n", 166 | "Non-trainable params: 0\n", 167 | "_________________________________________________________________\n" 168 | ] 169 | } 170 | ], 171 | "source": [ 172 | "discriminator = Sequential()\n", 173 | "discriminator.add(Dense(1024, input_dim=784))\n", 174 | "discriminator.add(LeakyReLU(0.2))\n", 175 | "discriminator.add(Dropout(0.3))\n", 176 | "discriminator.add(Dense(512))\n", 177 | "discriminator.add(LeakyReLU(0.2))\n", 178 | "discriminator.add(Dropout(0.3))\n", 179 | "discriminator.add(Dense(256))\n", 180 | "discriminator.add(LeakyReLU(0.2))\n", 181 | "discriminator.add(Dropout(0.3))\n", 182 | "discriminator.add(Dense(1, activation='sigmoid'))\n", 183 | "discriminator.compile(loss='binary_crossentropy', optimizer=adam)\n", 184 | "discriminator.summary()" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 11, 190 | "metadata": { 191 | "collapsed": false 192 | }, 193 | "outputs": [ 194 | { 195 | "name": "stdout", 196 | "output_type": "stream", 197 | "text": [ 198 | "_________________________________________________________________\n", 199 | "Layer (type) Output Shape Param # \n", 200 | "=================================================================\n", 201 | "input_1 (InputLayer) (None, 100) 0 \n", 202 | "_________________________________________________________________\n", 203 | "sequential_3 (Sequential) (None, 784) 1486352 \n", 204 | "_________________________________________________________________\n", 205 | "sequential_5 (Sequential) (None, 1) 1460225 \n", 206 | "=================================================================\n", 207 | "Total params: 2,946,577\n", 208 | "Trainable params: 1,486,352\n", 209 | "Non-trainable params: 1,460,225\n", 210 | "_________________________________________________________________\n" 211 | ] 212 | }, 213 | { 214 | "name": "stderr", 215 | "output_type": "stream", 216 | "text": [ 217 | "/usr/local/lib/python2.7/dist-packages/ipykernel/__main__.py:5: UserWarning: Update your `Model` call to the Keras 2 API: `Model(outputs=Tensor(\"se..., inputs=Tensor(\"in...)`\n" 218 | ] 219 | } 220 | ], 221 | "source": [ 222 | "discriminator.trainable = False\n", 223 | "ganInput = Input(shape=(randomDim,))\n", 224 | "x = generator(ganInput)\n", 225 | "ganOutput = discriminator(x)\n", 226 | "gan = Model(input=ganInput, output=ganOutput)\n", 227 | "gan.compile(loss='binary_crossentropy', optimizer=adam)\n", 228 | "gan.summary()" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 12, 234 | "metadata": { 235 | "collapsed": true 236 | }, 237 | "outputs": [], 238 | "source": [ 239 | "dLosses = []\n", 240 | "gLosses = []" 241 | ] 242 | }, 243 | { 244 | "cell_type": "code", 245 | "execution_count": 13, 246 | "metadata": { 247 | "collapsed": true 248 | }, 249 | "outputs": [], 250 | "source": [ 251 | "def plotLoss(epoch):\n", 252 | " plt.figure(figsize=(10, 8))\n", 253 | " plt.plot(dLosses, label='Discriminitive loss')\n", 254 | " plt.plot(gLosses, label='Generative loss')\n", 255 | " plt.xlabel('Epoch')\n", 256 | " plt.ylabel('Loss')\n", 257 | " plt.legend()\n", 258 | " plt.savefig('images/gan_loss_epoch_%d.png' % epoch)" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 14, 264 | "metadata": { 265 | "collapsed": true 266 | }, 267 | "outputs": [], 268 | "source": [ 269 | "def plotGeneratedImages(epoch, examples=100, dim=(10, 10), figsize=(10, 10)):\n", 270 | " noise = np.random.normal(0, 1, size=[examples, randomDim])\n", 271 | " generatedImages = generator.predict(noise)\n", 272 | " generatedImages = generatedImages.reshape(examples, 28, 28)\n", 273 | "\n", 274 | " plt.figure(figsize=figsize)\n", 275 | " for i in range(generatedImages.shape[0]):\n", 276 | " plt.subplot(dim[0], dim[1], i+1)\n", 277 | " plt.imshow(generatedImages[i], interpolation='nearest', cmap='gray_r')\n", 278 | " plt.axis('off')\n", 279 | " plt.tight_layout()\n", 280 | " plt.savefig('images/gan_generated_image_epoch_%d.png' % epoch)" 281 | ] 282 | }, 283 | { 284 | "cell_type": "code", 285 | "execution_count": 15, 286 | "metadata": { 287 | "collapsed": true 288 | }, 289 | "outputs": [], 290 | "source": [ 291 | "def saveModels(epoch):\n", 292 | " generator.save('models/gan_generator_epoch_%d.h5' % epoch)\n", 293 | " discriminator.save('models/gan_discriminator_epoch_%d.h5' % epoch)" 294 | ] 295 | }, 296 | { 297 | "cell_type": "code", 298 | "execution_count": 16, 299 | "metadata": { 300 | "collapsed": true 301 | }, 302 | "outputs": [], 303 | "source": [ 304 | "def train(epochs=1, batchSize=128):\n", 305 | " batchCount = X_train.shape[0] / batchSize\n", 306 | " print 'Epochs:', epochs\n", 307 | " print 'Batch size:', batchSize\n", 308 | " print 'Batches per epoch:', batchCount\n", 309 | " plotGeneratedImages(0)\n", 310 | " for e in xrange(1, epochs+1):\n", 311 | " print '-'*15, 'Epoch %d' % e, '-'*15\n", 312 | " for _ in tqdm(xrange(batchCount)):\n", 313 | " # Get a random set of input noise and images\n", 314 | " noise = np.random.normal(0, 1, size=[batchSize, randomDim])\n", 315 | " imageBatch = X_train[np.random.randint(0, X_train.shape[0], size=batchSize)]\n", 316 | "\n", 317 | " # Generate fake MNIST images\n", 318 | " generatedImages = generator.predict(noise)\n", 319 | " # print np.shape(imageBatch), np.shape(generatedImages)\n", 320 | " X = np.concatenate([imageBatch, generatedImages])\n", 321 | "\n", 322 | " # Labels for generated and real data\n", 323 | " yDis = np.zeros(2*batchSize)\n", 324 | " # One-sided label smoothing\n", 325 | " yDis[:batchSize] = 0.9\n", 326 | "\n", 327 | " # Train discriminator\n", 328 | " discriminator.trainable = True\n", 329 | " dloss = discriminator.train_on_batch(X, yDis)\n", 330 | "\n", 331 | " # Train generator\n", 332 | " noise = np.random.normal(0, 1, size=[batchSize, randomDim])\n", 333 | " yGen = np.ones(batchSize)\n", 334 | " discriminator.trainable = False\n", 335 | " gloss = gan.train_on_batch(noise, yGen)\n", 336 | "\n", 337 | " # Store loss of most recent batch from this epoch\n", 338 | " dLosses.append(dloss)\n", 339 | " gLosses.append(gloss)\n", 340 | "\n", 341 | " if e == 1 or e % 10 == 0:\n", 342 | " plotGeneratedImages(e)\n", 343 | " saveModels(e)\n", 344 | "\n", 345 | " # Plot losses from every epoch\n", 346 | " plotLoss(e)" 347 | ] 348 | }, 349 | { 350 | "cell_type": "code", 351 | "execution_count": null, 352 | "metadata": { 353 | "collapsed": true 354 | }, 355 | "outputs": [], 356 | "source": [ 357 | "train(50, 128)" 358 | ] 359 | } 360 | ], 361 | "metadata": { 362 | "kernelspec": { 363 | "display_name": "Python 2", 364 | "language": "python", 365 | "name": "python2" 366 | }, 367 | "language_info": { 368 | "codemirror_mode": { 369 | "name": "ipython", 370 | "version": 2 371 | }, 372 | "file_extension": ".py", 373 | "mimetype": "text/x-python", 374 | "name": "python", 375 | "nbconvert_exporter": "python", 376 | "pygments_lexer": "ipython2", 377 | "version": "2.7.12" 378 | } 379 | }, 380 | "nbformat": 4, 381 | "nbformat_minor": 2 382 | } 383 | -------------------------------------------------------------------------------- /class_22/mnist_dcgan.py: -------------------------------------------------------------------------------- 1 | import os 2 | os.environ["KERAS_BACKEND"] = "tensorflow" 3 | import numpy as np 4 | from tqdm import tqdm 5 | import matplotlib.pyplot as plt 6 | 7 | from keras.layers import Input 8 | from keras.models import Model, Sequential 9 | from keras.layers.core import Reshape, Dense, Dropout, Flatten 10 | from keras.layers.advanced_activations import LeakyReLU 11 | from keras.layers.convolutional import Convolution2D, UpSampling2D 12 | from keras.datasets import mnist 13 | from keras.optimizers import Adam 14 | from keras import backend as K 15 | from keras import initializations 16 | 17 | K.set_image_dim_ordering('th') 18 | 19 | # Deterministic output. 20 | # Tired of seeing the same results every time? Remove the line below. 21 | np.random.seed(1000) 22 | 23 | # The results are a little better when the dimensionality of the random vector is only 10. 24 | # The dimensionality has been left at 100 for consistency with other GAN implementations. 25 | randomDim = 100 26 | 27 | # Load MNIST data 28 | (X_train, y_train), (X_test, y_test) = mnist.load_data() 29 | X_train = (X_train.astype(np.float32) - 127.5)/127.5 30 | X_train = X_train[:, np.newaxis, :, :] 31 | 32 | # Function for initializing network weights 33 | def initNormal(shape, name=None): 34 | return initializations.normal(shape, scale=0.02, name=name) 35 | 36 | # Optimizer 37 | adam = Adam(lr=0.0002, beta_1=0.5) 38 | 39 | # Generator 40 | generator = Sequential() 41 | generator.add(Dense(128*7*7, input_dim=randomDim, init=initNormal)) 42 | generator.add(LeakyReLU(0.2)) 43 | generator.add(Reshape((128, 7, 7))) 44 | generator.add(UpSampling2D(size=(2, 2))) 45 | generator.add(Convolution2D(64, 5, 5, border_mode='same')) 46 | generator.add(LeakyReLU(0.2)) 47 | generator.add(UpSampling2D(size=(2, 2))) 48 | generator.add(Convolution2D(1, 5, 5, border_mode='same', activation='tanh')) 49 | generator.compile(loss='binary_crossentropy', optimizer=adam) 50 | 51 | # Discriminator 52 | discriminator = Sequential() 53 | discriminator.add(Convolution2D(64, 5, 5, border_mode='same', subsample=(2, 2), input_shape=(1, 28, 28), init=initNormal)) 54 | discriminator.add(LeakyReLU(0.2)) 55 | discriminator.add(Dropout(0.3)) 56 | discriminator.add(Convolution2D(128, 5, 5, border_mode='same', subsample=(2, 2))) 57 | discriminator.add(LeakyReLU(0.2)) 58 | discriminator.add(Dropout(0.3)) 59 | discriminator.add(Flatten()) 60 | discriminator.add(Dense(1, activation='sigmoid')) 61 | discriminator.compile(loss='binary_crossentropy', optimizer=adam) 62 | 63 | # Combined network 64 | discriminator.trainable = False 65 | ganInput = Input(shape=(randomDim,)) 66 | x = generator(ganInput) 67 | ganOutput = discriminator(x) 68 | gan = Model(input=ganInput, output=ganOutput) 69 | gan.compile(loss='binary_crossentropy', optimizer=adam) 70 | 71 | dLosses = [] 72 | gLosses = [] 73 | 74 | # Plot the loss from each batch 75 | def plotLoss(epoch): 76 | plt.figure(figsize=(10, 8)) 77 | plt.plot(dLosses, label='Discriminitive loss') 78 | plt.plot(gLosses, label='Generative loss') 79 | plt.xlabel('Epoch') 80 | plt.ylabel('Loss') 81 | plt.legend() 82 | plt.savefig('images/dcgan_loss_epoch_%d.png' % epoch) 83 | 84 | # Create a wall of generated MNIST images 85 | def plotGeneratedImages(epoch, examples=100, dim=(10, 10), figsize=(10, 10)): 86 | noise = np.random.normal(0, 1, size=[examples, randomDim]) 87 | generatedImages = generator.predict(noise) 88 | 89 | plt.figure(figsize=figsize) 90 | for i in range(generatedImages.shape[0]): 91 | plt.subplot(dim[0], dim[1], i+1) 92 | plt.imshow(generatedImages[i, 0], interpolation='nearest', cmap='gray_r') 93 | plt.axis('off') 94 | plt.tight_layout() 95 | plt.savefig('images/dcgan_generated_image_epoch_%d.png' % epoch) 96 | 97 | # Save the generator and discriminator networks (and weights) for later use 98 | def saveModels(epoch): 99 | generator.save('models/dcgan_generator_epoch_%d.h5' % epoch) 100 | discriminator.save('models/dcgan_discriminator_epoch_%d.h5' % epoch) 101 | 102 | def train(epochs=1, batchSize=128): 103 | batchCount = X_train.shape[0] / batchSize 104 | print 'Epochs:', epochs 105 | print 'Batch size:', batchSize 106 | print 'Batches per epoch:', batchCount 107 | 108 | for e in xrange(1, epochs+1): 109 | print '-'*15, 'Epoch %d' % e, '-'*15 110 | for _ in tqdm(xrange(batchCount)): 111 | # Get a random set of input noise and images 112 | noise = np.random.normal(0, 1, size=[batchSize, randomDim]) 113 | imageBatch = X_train[np.random.randint(0, X_train.shape[0], size=batchSize)] 114 | 115 | # Generate fake MNIST images 116 | generatedImages = generator.predict(noise) 117 | X = np.concatenate([imageBatch, generatedImages]) 118 | 119 | # Labels for generated and real data 120 | yDis = np.zeros(2*batchSize) 121 | # One-sided label smoothing 122 | yDis[:batchSize] = 0.9 123 | 124 | # Train discriminator 125 | discriminator.trainable = True 126 | dloss = discriminator.train_on_batch(X, yDis) 127 | 128 | # Train generator 129 | noise = np.random.normal(0, 1, size=[batchSize, randomDim]) 130 | yGen = np.ones(batchSize) 131 | discriminator.trainable = False 132 | gloss = gan.train_on_batch(noise, yGen) 133 | 134 | # Store loss of most recent batch from this epoch 135 | dLosses.append(dloss) 136 | gLosses.append(gloss) 137 | 138 | if e == 1 or e % 5 == 0: 139 | plotGeneratedImages(e) 140 | saveModels(e) 141 | 142 | # Plot losses from every epoch 143 | plotLoss(e) 144 | 145 | if __name__ == '__main__': 146 | train(50, 128) 147 | 148 | -------------------------------------------------------------------------------- /data/imgs/2007_000187.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000187.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000241.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000241.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000333.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000333.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000423.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000423.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000464.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000464.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000480.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000480.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000491.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000491.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000529.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000529.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000648.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000648.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000664.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000664.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000733.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000733.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000837.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000837.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000862.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000862.jpg -------------------------------------------------------------------------------- /data/imgs/2007_000876.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_000876.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001027.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001073.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001073.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001149.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001149.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001154.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001154.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001377.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001377.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001397.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001397.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001416.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001416.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001457.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001457.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001558.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001558.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001568.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001568.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001587.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001587.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001774.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001774.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001825.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001825.jpg -------------------------------------------------------------------------------- /data/imgs/2007_001834.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_001834.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002024.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002132.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002132.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002142.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002142.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002262.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002262.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002266.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002266.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002268.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002268.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002293.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002293.jpg -------------------------------------------------------------------------------- /data/imgs/2007_002361.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/imgs/2007_002361.jpg -------------------------------------------------------------------------------- /data/monet/download (1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (1).jpg -------------------------------------------------------------------------------- /data/monet/download (2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (2).jpg -------------------------------------------------------------------------------- /data/monet/download (3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (3).jpg -------------------------------------------------------------------------------- /data/monet/download (4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (4).jpg -------------------------------------------------------------------------------- /data/monet/download (5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (5).jpg -------------------------------------------------------------------------------- /data/monet/download (6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (6).jpg -------------------------------------------------------------------------------- /data/monet/download (7).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (7).jpg -------------------------------------------------------------------------------- /data/monet/download (8).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download (8).jpg -------------------------------------------------------------------------------- /data/monet/download.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/download.jpg -------------------------------------------------------------------------------- /data/monet/images (1).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (1).jpg -------------------------------------------------------------------------------- /data/monet/images (10).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (10).jpg -------------------------------------------------------------------------------- /data/monet/images (11).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (11).jpg -------------------------------------------------------------------------------- /data/monet/images (12).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (12).jpg -------------------------------------------------------------------------------- /data/monet/images (13).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (13).jpg -------------------------------------------------------------------------------- /data/monet/images (14).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (14).jpg -------------------------------------------------------------------------------- /data/monet/images (15).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (15).jpg -------------------------------------------------------------------------------- /data/monet/images (16).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (16).jpg -------------------------------------------------------------------------------- /data/monet/images (17).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (17).jpg -------------------------------------------------------------------------------- /data/monet/images (18).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (18).jpg -------------------------------------------------------------------------------- /data/monet/images (19).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (19).jpg -------------------------------------------------------------------------------- /data/monet/images (2).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (2).jpg -------------------------------------------------------------------------------- /data/monet/images (20).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (20).jpg -------------------------------------------------------------------------------- /data/monet/images (21).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (21).jpg -------------------------------------------------------------------------------- /data/monet/images (22).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (22).jpg -------------------------------------------------------------------------------- /data/monet/images (23).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (23).jpg -------------------------------------------------------------------------------- /data/monet/images (24).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (24).jpg -------------------------------------------------------------------------------- /data/monet/images (25).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (25).jpg -------------------------------------------------------------------------------- /data/monet/images (26).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (26).jpg -------------------------------------------------------------------------------- /data/monet/images (27).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (27).jpg -------------------------------------------------------------------------------- /data/monet/images (28).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (28).jpg -------------------------------------------------------------------------------- /data/monet/images (29).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (29).jpg -------------------------------------------------------------------------------- /data/monet/images (3).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (3).jpg -------------------------------------------------------------------------------- /data/monet/images (30).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (30).jpg -------------------------------------------------------------------------------- /data/monet/images (31).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (31).jpg -------------------------------------------------------------------------------- /data/monet/images (32).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (32).jpg -------------------------------------------------------------------------------- /data/monet/images (33).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (33).jpg -------------------------------------------------------------------------------- /data/monet/images (34).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (34).jpg -------------------------------------------------------------------------------- /data/monet/images (35).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (35).jpg -------------------------------------------------------------------------------- /data/monet/images (36).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (36).jpg -------------------------------------------------------------------------------- /data/monet/images (37).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (37).jpg -------------------------------------------------------------------------------- /data/monet/images (38).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (38).jpg -------------------------------------------------------------------------------- /data/monet/images (39).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (39).jpg -------------------------------------------------------------------------------- /data/monet/images (4).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (4).jpg -------------------------------------------------------------------------------- /data/monet/images (5).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (5).jpg -------------------------------------------------------------------------------- /data/monet/images (6).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (6).jpg -------------------------------------------------------------------------------- /data/monet/images (7).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (7).jpg -------------------------------------------------------------------------------- /data/monet/images (8).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (8).jpg -------------------------------------------------------------------------------- /data/monet/images (9).jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images (9).jpg -------------------------------------------------------------------------------- /data/monet/images.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/monet/images.jpg -------------------------------------------------------------------------------- /data/movie_review/rt-polarity.neg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/movie_review/rt-polarity.neg -------------------------------------------------------------------------------- /data/movie_review/rt-polarity.pos: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/movie_review/rt-polarity.pos -------------------------------------------------------------------------------- /data/styles/donelli.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/donelli.jpg -------------------------------------------------------------------------------- /data/styles/groening.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/groening.jpg -------------------------------------------------------------------------------- /data/styles/lundstroem.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/lundstroem.jpg -------------------------------------------------------------------------------- /data/styles/picasso.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/picasso.jpg -------------------------------------------------------------------------------- /data/styles/skrik.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/skrik.jpg -------------------------------------------------------------------------------- /data/styles/style.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coding-blocks-archives/Perceptron_Summer_2017/b0dd343eef24c7fb5523d5f7bef90c2ef6030eea/data/styles/style.jpg --------------------------------------------------------------------------------