├── .gitignore ├── LICENSE ├── README.md ├── tensorflow.py ├── linear_model.ipynb ├── cnn_model2.ipynb ├── dnn_model.ipynb └── tf-tc-31.09.17.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | *.dmb 2 | *.rsc 3 | *.int 4 | *.lk 5 | *.zip 6 | *.DS_Store 7 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Enes Kılıçaslan 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Transfer-Learning-for-Text-Classification 2 | 3 | 4 | ## Useful links: 5 | - [A Practical Introduction to Deep Learning with Caffe and Python](http://adilmoujahid.com/posts/2016/06/introduction-deep-learning-python-caffe/) 6 | 7 | - [Implementing a CNN for Text Classification in TensorFlow](http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/) 8 | 9 | - [TensorFlow Tutorial for transfer learning](http://www.datascienceassn.org/content/tensorflow-tutorial-transfer-learning) 10 | 11 | - [Deep Learning for Text Understanding from Scratch](http://www.kdnuggets.com/2015/03/deep-learning-text-understanding-from-scratch.html) 12 | 13 | - [PyTorch Transfer Learning implementation](http://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html) 14 | 15 | - [x] [Text Classification](https://machinelearnings.co/text-classification-using-neural-networks-f5cd7b8765c6) 16 | 17 | - [Sckit learn 20 News groups](http://scikit-learn.org/stable/datasets/twenty_newsgroups.html) 18 | 19 | - [Sckit-Learn/Keras implementation and Transfer Learning Definition](https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/) 20 | 21 | - [Paper](ftp://ftp.cs.wisc.edu/machine-learning/shavlik-group/torrey.handbook09.pdf) 22 | 23 | 24 | ### recently closed chrome : 25 | 26 | - [1](https://kwotsin.github.io/tech/2017/02/11/transfer-learning.html) 27 | - [2](https://www.kernix.com/blog/image-classification-with-a-pre-trained-deep-neural-network_p11) 28 | - [text classification and checkpoint at the end ](http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/) 29 | - [TensorFlow save checkpoint](http://cv-tricks.com/tensorflow-tutorial/save-restore-tensorflow-models-quick-complete-tutorial/) 30 | - [Sckit-Flow :)](https://www.kdnuggets.com/2016/02/scikit-flow-easy-deep-learning-tensorflow-scikit-learn.html) 31 | - [from sckit to tensorflow and Good Intro](https://medium.com/@Zelros/4-steps-to-learn-tensorflow-when-you-already-know-scikit-learn-3cd0340456b5) 32 | 33 | - [estimator DNNClassifier](https://www.tensorflow.org/get_started/estimator) 34 | 35 | #### ToDo List 36 | - [ ] Andrew NG Courses 37 | - [ ] Deep Learning for Text Understanding from Scratch tensorFlow 38 | - [ ] Transfer Learning TensorFlow 39 | -------------------------------------------------------------------------------- /tensorflow.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | from __future__ import division 3 | from __future__ import print_function 4 | 5 | import os 6 | import urllib 7 | 8 | import numpy as np 9 | import tensorflow as tf 10 | 11 | #import scikit learn to load data set 12 | from sklearn.datasets import fetch_20newsgroups 13 | from sklearn.feature_extraction.text import TfidfVectorizer 14 | from sklearn import metrics 15 | from scipy.sparse import csr_matrix 16 | 17 | categories = [ 18 | 'alt.atheism', 19 | 'talk.religion.misc', 20 | 'misc.forsale', 21 | 'rec.autos', 22 | 'rec.motorcycles' 23 | ] 24 | 25 | remove = () 26 | 27 | print("Loading 20 newsgroups dataset for categories:") 28 | #print(categories if categories else "all") 29 | 30 | data_train = fetch_20newsgroups(subset='train', categories=categories, 31 | shuffle=True, random_state=42, 32 | remove=remove) 33 | 34 | data_test = fetch_20newsgroups(subset='test', categories=categories, 35 | shuffle=True, random_state=42, 36 | remove=remove) 37 | ''' 38 | 39 | data_train = fetch_20newsgroups(subset='train', 40 | shuffle=True, random_state=42, 41 | remove=remove) 42 | 43 | data_test = fetch_20newsgroups(subset='test', 44 | shuffle=True, random_state=42, 45 | remove=remove) 46 | ''' 47 | 48 | print(list(data_train.target_names)) 49 | 50 | print('data loaded') 51 | print("*" * 80) 52 | print() 53 | 54 | # order of labels in `target_names` can be different from 'categories' 55 | target_names = data_train.target_names 56 | y_train, y_test = data_train.target, data_test.target 57 | 58 | print("Extracting features from the training data using a sparse vectorizer") 59 | vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english') 60 | X_train = vectorizer.fit_transform(data_train.data) 61 | 62 | print("n_samples: %d, n_features: %d" % X_train.shape) 63 | print() 64 | 65 | print("Extracting features from the test data using the same vectorizer") 66 | X_test = vectorizer.transform(data_test.data) 67 | print("n_samples: %d, n_features: %d" % X_test.shape) 68 | print() 69 | 70 | print("*" * 80) 71 | print() 72 | 73 | 74 | #convert scipy matrix to np array 75 | X_train = X_train.toarray() 76 | X_test = X_test.toarray() 77 | 78 | #print(str(X_train)) 79 | print("feature size train: " + str(X_train[0].size)) 80 | print("feature size test: " + str(X_test[0].size)) 81 | 82 | print("number of classes: " + str(len(target_names))) 83 | 84 | print("*" * 80) 85 | print() 86 | 87 | 88 | # Specify that all features have real-value data 89 | feature_columns = [tf.feature_column.numeric_column("x", shape=[X_train[0].size])] 90 | 91 | 92 | # Build 3 layer DNN with 10, 20, 10 units respectively. 93 | classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns, 94 | hidden_units=[50, 500, 50], 95 | n_classes=len(target_names)) 96 | 97 | 98 | # Define the training inputs 99 | train_input_fn = tf.estimator.inputs.numpy_input_fn( 100 | x={"x": np.array(X_train)}, 101 | y=np.array(y_train), 102 | num_epochs=None, 103 | shuffle=True) 104 | 105 | 106 | 107 | # Train model. 108 | classifier.train(input_fn=train_input_fn, steps=2000) 109 | 110 | 111 | 112 | 113 | # Define the test inputs 114 | test_input_fn = tf.estimator.inputs.numpy_input_fn( 115 | x={"x": np.array(X_test)}, 116 | y=np.array(y_test), 117 | num_epochs=1, 118 | shuffle=False) 119 | 120 | #Evaluate accuracy. 121 | #accuracy_score = classifier.evaluate(input_fn=test_input_fn)["accuracy"] 122 | #print("\nTest Accuracy: {0:f}\n".format(accuracy_score)) 123 | 124 | #'''np.intR''' 125 | predictions = list(classifier.predict(input_fn=test_input_fn)) 126 | predicted_classes = [p["classes"] for p in predictions] 127 | 128 | predicted_classes = np.array(predicted_classes, dtype=np.int32).flatten() 129 | 130 | print("predicted class class: " + str(predicted_classes.__class__)) 131 | 132 | score = metrics.accuracy_score(y_test, predicted_classes) 133 | print("accuracy: %%%0.1f" % (score * 100)) 134 | 135 | print("*"*80) 136 | print("predicted: ") 137 | print(predicted_classes) 138 | 139 | print("*"*80) 140 | print("test: ") 141 | print(y_test) 142 | 143 | print("y_test type:" + str(y_test.__class__)) 144 | 145 | -------------------------------------------------------------------------------- /linear_model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 4, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from __future__ import absolute_import\n", 12 | "from __future__ import division\n", 13 | "from __future__ import print_function\n", 14 | "\n", 15 | "import argparse\n", 16 | "import sys\n", 17 | "\n", 18 | "import numpy as np\n", 19 | "import tensorflow as tf\n", 20 | "\n", 21 | "from sklearn.datasets import fetch_20newsgroups\n", 22 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 23 | "from sklearn import metrics\n", 24 | "\n", 25 | "from sklearn.preprocessing import OneHotEncoder\n", 26 | "from sklearn.preprocessing import LabelEncoder\n", 27 | "from numpy import array\n", 28 | "from numpy import argmax" 29 | ] 30 | }, 31 | { 32 | "cell_type": "code", 33 | "execution_count": 5, 34 | "metadata": {}, 35 | "outputs": [ 36 | { 37 | "name": "stdout", 38 | "output_type": "stream", 39 | "text": [ 40 | "Loading 20 newsgroups dataset for categories:\n", 41 | "\t\t['alt.atheism', 'talk.religion.misc', 'rec.autos', 'talk.politics.guns', 'rec.sport.baseball']\n" 42 | ] 43 | } 44 | ], 45 | "source": [ 46 | "categories = [\n", 47 | " 'alt.atheism',\n", 48 | " 'talk.religion.misc',\n", 49 | " 'rec.autos',\n", 50 | " 'talk.politics.guns',\n", 51 | " 'rec.sport.baseball'\n", 52 | " ]\n", 53 | "\n", 54 | "remove = ()\n", 55 | "\n", 56 | "print(\"Loading 20 newsgroups dataset for categories:\")\n", 57 | "print(\"\\t\\t\" + str(categories))\n", 58 | "\n", 59 | "\n", 60 | "data_train = fetch_20newsgroups(subset='train', categories=categories,\n", 61 | " shuffle=True, random_state=42,\n", 62 | " remove=remove)\n", 63 | "\n", 64 | "data_test = fetch_20newsgroups(subset='test', categories=categories,\n", 65 | " shuffle=True, random_state=42,\n", 66 | " remove=remove)" 67 | ] 68 | }, 69 | { 70 | "cell_type": "code", 71 | "execution_count": 6, 72 | "metadata": {}, 73 | "outputs": [ 74 | { 75 | "name": "stdout", 76 | "output_type": "stream", 77 | "text": [ 78 | "train and test labes are being encoded to onehot vector\n", 79 | "integer classes\n", 80 | "\ttrain\n", 81 | "[1 1 2 ..., 1 2 3]\n", 82 | "\ttest\n", 83 | "[4 4 2 ..., 1 3 3]\n", 84 | "encoded clasesses\n", 85 | "\ttrain\n", 86 | "[[ 0. 1. 0. 0. 0.]\n", 87 | " [ 0. 1. 0. 0. 0.]\n", 88 | " [ 0. 0. 1. 0. 0.]\n", 89 | " ..., \n", 90 | " [ 0. 1. 0. 0. 0.]\n", 91 | " [ 0. 0. 1. 0. 0.]\n", 92 | " [ 0. 0. 0. 1. 0.]]\n", 93 | "\ttest\n", 94 | "[[ 0. 0. 0. 0. 1.]\n", 95 | " [ 0. 0. 0. 0. 1.]\n", 96 | " [ 0. 0. 1. 0. 0.]\n", 97 | " ..., \n", 98 | " [ 0. 1. 0. 0. 0.]\n", 99 | " [ 0. 0. 0. 1. 0.]\n", 100 | " [ 0. 0. 0. 1. 0.]]\n" 101 | ] 102 | } 103 | ], 104 | "source": [ 105 | "print(\"train and test labes are being encoded to onehot vector\")\n", 106 | "\n", 107 | "target_names = data_train.target_names\n", 108 | "y_train, y_test = data_train.target, data_test.target\n", 109 | "\n", 110 | "print(\"integer classes\")\n", 111 | "\n", 112 | "print(\"\\ttrain\")\n", 113 | "print(y_train)\n", 114 | "\n", 115 | "print(\"\\ttest\")\n", 116 | "print(y_test)\n", 117 | "\n", 118 | "\n", 119 | "label_encoder_train = LabelEncoder()\n", 120 | "onehot_encoder_train = OneHotEncoder(sparse=False)\n", 121 | "\n", 122 | "integer_encoded_train = label_encoder_train.fit_transform(y_train)\n", 123 | "integer_encoded_train = integer_encoded_train.reshape(len(integer_encoded_train), 1)\n", 124 | "\n", 125 | "y_train_onehot = onehot_encoder_train.fit_transform(integer_encoded_train)\n", 126 | "\n", 127 | "\n", 128 | "label_encoder_test = LabelEncoder()\n", 129 | "onehot_encoder_test = OneHotEncoder(sparse=False)\n", 130 | "\n", 131 | "\n", 132 | "integer_encoded_test = label_encoder_test.fit_transform(y_test)\n", 133 | "integer_encoded_test = integer_encoded_test.reshape(len(integer_encoded_test), 1)\n", 134 | "\n", 135 | "y_test_onehot = onehot_encoder_test.fit_transform(integer_encoded_test)\n", 136 | "\n", 137 | "\n", 138 | "print(\"encoded clasesses\")\n", 139 | "print(\"\\ttrain\")\n", 140 | "print(y_train_onehot)\n", 141 | "print(\"\\ttest\")\n", 142 | "print(y_test_onehot)" 143 | ] 144 | }, 145 | { 146 | "cell_type": "code", 147 | "execution_count": 7, 148 | "metadata": {}, 149 | "outputs": [ 150 | { 151 | "name": "stdout", 152 | "output_type": "stream", 153 | "text": [ 154 | "Extracting features from the training data using a sparse vectorizer\n", 155 | "n_samples: 2594, n_features: 37364\n" 156 | ] 157 | } 158 | ], 159 | "source": [ 160 | "print(\"Extracting features from the training data using a sparse vectorizer\")\n", 161 | "vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')\n", 162 | "X_train = vectorizer.fit_transform(data_train.data)\n", 163 | "\n", 164 | "print(\"n_samples: %d, n_features: %d\" % X_train.shape)" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 8, 170 | "metadata": {}, 171 | "outputs": [ 172 | { 173 | "name": "stdout", 174 | "output_type": "stream", 175 | "text": [ 176 | "Extracting features from the test data using the same vectorizer\n", 177 | "n_samples: 1727, n_features: 37364\n" 178 | ] 179 | } 180 | ], 181 | "source": [ 182 | "print(\"Extracting features from the test data using the same vectorizer\")\n", 183 | "X_test = vectorizer.transform(data_test.data)\n", 184 | "print(\"n_samples: %d, n_features: %d\" % X_test.shape)" 185 | ] 186 | }, 187 | { 188 | "cell_type": "code", 189 | "execution_count": 9, 190 | "metadata": {}, 191 | "outputs": [ 192 | { 193 | "name": "stdout", 194 | "output_type": "stream", 195 | "text": [ 196 | "feature size train: 37364\n", 197 | "feature size test: 37364\n", 198 | "number of classes: 5\n" 199 | ] 200 | } 201 | ], 202 | "source": [ 203 | "X_train = X_train.toarray()\n", 204 | "X_test = X_test.toarray()\n", 205 | "\n", 206 | "feature_flat_size = X_train[0].size\n", 207 | "num_classes = len(target_names)\n", 208 | "\n", 209 | "#print(str(X_train))\n", 210 | "print(\"feature size train: \" + str(X_train[0].size))\n", 211 | "print(\"feature size test: \" + str(X_test[0].size))\n", 212 | "\n", 213 | "print(\"number of classes: \" + str(num_classes))" 214 | ] 215 | }, 216 | { 217 | "cell_type": "code", 218 | "execution_count": 10, 219 | "metadata": { 220 | "collapsed": true 221 | }, 222 | "outputs": [], 223 | "source": [ 224 | "x = tf.placeholder(tf.float32, [None, feature_flat_size])\n", 225 | "\n", 226 | "y_true = tf.placeholder(tf.float32, [None, num_classes])\n", 227 | "\n", 228 | "y_true_cls = tf.placeholder(tf.int64, [None])\n", 229 | "\n", 230 | "weights = tf.Variable(tf.zeros([feature_flat_size, num_classes]))\n", 231 | "biases = tf.Variable(tf.zeros([num_classes]))" 232 | ] 233 | }, 234 | { 235 | "cell_type": "code", 236 | "execution_count": 11, 237 | "metadata": { 238 | "collapsed": true 239 | }, 240 | "outputs": [], 241 | "source": [ 242 | "#model\n", 243 | "logits = tf.matmul(x, weights) + biases" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 12, 249 | "metadata": {}, 250 | "outputs": [ 251 | { 252 | "name": "stdout", 253 | "output_type": "stream", 254 | "text": [ 255 | "WARNING:tensorflow:From :2: calling argmax (from tensorflow.python.ops.math_ops) with dimension is deprecated and will be removed in a future version.\n", 256 | "Instructions for updating:\n", 257 | "Use the `axis` argument instead\n" 258 | ] 259 | } 260 | ], 261 | "source": [ 262 | "y_pred = tf.nn.softmax(logits)\n", 263 | "y_pred_cls = tf.argmax(y_pred, dimension=1)" 264 | ] 265 | }, 266 | { 267 | "cell_type": "code", 268 | "execution_count": 14, 269 | "metadata": { 270 | "collapsed": true 271 | }, 272 | "outputs": [], 273 | "source": [ 274 | "cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=y_true)\n", 275 | "cost = tf.reduce_mean(cross_entropy)" 276 | ] 277 | }, 278 | { 279 | "cell_type": "code", 280 | "execution_count": 15, 281 | "metadata": { 282 | "collapsed": true 283 | }, 284 | "outputs": [], 285 | "source": [ 286 | "\n", 287 | "#Define Optimizer\n", 288 | "optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5).minimize(cost)\n" 289 | ] 290 | }, 291 | { 292 | "cell_type": "code", 293 | "execution_count": 16, 294 | "metadata": { 295 | "collapsed": true 296 | }, 297 | "outputs": [], 298 | "source": [ 299 | "correct_prediction = tf.equal(y_pred_cls, y_true_cls)" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 17, 305 | "metadata": { 306 | "collapsed": true 307 | }, 308 | "outputs": [], 309 | "source": [ 310 | "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": 18, 316 | "metadata": { 317 | "collapsed": true 318 | }, 319 | "outputs": [], 320 | "source": [ 321 | "session = tf.Session()\n", 322 | "session.run(tf.global_variables_initializer())\n" 323 | ] 324 | }, 325 | { 326 | "cell_type": "code", 327 | "execution_count": 19, 328 | "metadata": { 329 | "collapsed": true 330 | }, 331 | "outputs": [], 332 | "source": [ 333 | "def optimize(num_iterations):\n", 334 | " feed_dict_train = {x: X_train, y_true: y_train_onehot}\n", 335 | " \n", 336 | " for i in range(num_iterations):\n", 337 | " # Put the batch into a dict with the proper names\n", 338 | " # for placeholder variables in the TensorFlow graph.\n", 339 | " # Note that the placeholder for y_true_cls is not set\n", 340 | " # because it is not used during training.\n", 341 | " \n", 342 | " # Run the optimizer using this batch of training data.\n", 343 | " # TensorFlow assigns the variables in feed_dict_train\n", 344 | " # to the placeholder variables and then runs the optimizer.\n", 345 | " session.run(optimizer, feed_dict=feed_dict_train)" 346 | ] 347 | }, 348 | { 349 | "cell_type": "code", 350 | "execution_count": 20, 351 | "metadata": { 352 | "collapsed": true 353 | }, 354 | "outputs": [], 355 | "source": [ 356 | "feed_dict_test = {x: X_test,\n", 357 | " y_true: y_test_onehot,\n", 358 | " y_true_cls: y_test}" 359 | ] 360 | }, 361 | { 362 | "cell_type": "code", 363 | "execution_count": 22, 364 | "metadata": {}, 365 | "outputs": [], 366 | "source": [ 367 | "def print_accuracy():\n", 368 | " # Use TensorFlow to compute the accuracy.\n", 369 | " acc = session.run(accuracy, feed_dict=feed_dict_test)\n", 370 | " \n", 371 | " # Print the accuracy.\n", 372 | " print(\"Accuracy on test-set: {0:.1%}\".format(acc))" 373 | ] 374 | }, 375 | { 376 | "cell_type": "code", 377 | "execution_count": 23, 378 | "metadata": { 379 | "collapsed": true 380 | }, 381 | "outputs": [], 382 | "source": [ 383 | "optimize(num_iterations=1000)" 384 | ] 385 | }, 386 | { 387 | "cell_type": "code", 388 | "execution_count": 24, 389 | "metadata": {}, 390 | "outputs": [ 391 | { 392 | "name": "stdout", 393 | "output_type": "stream", 394 | "text": [ 395 | "Accuracy on test-set: 87.2%\n" 396 | ] 397 | } 398 | ], 399 | "source": [ 400 | "print_accuracy()" 401 | ] 402 | }, 403 | { 404 | "cell_type": "code", 405 | "execution_count": 25, 406 | "metadata": {}, 407 | "outputs": [ 408 | { 409 | "name": "stdout", 410 | "output_type": "stream", 411 | "text": [ 412 | "true test labels\n", 413 | "[0 2 2 ..., 1 3 3]\n", 414 | "predicted labels\n", 415 | "[4 4 2 ..., 1 3 3]\n" 416 | ] 417 | } 418 | ], 419 | "source": [ 420 | "cls_pred = session.run(y_pred_cls, feed_dict=feed_dict_test)\n", 421 | "print(\"true test labels\")\n", 422 | "print(cls_pred)\n", 423 | "print(\"predicted labels\")\n", 424 | "print(y_test)" 425 | ] 426 | }, 427 | { 428 | "cell_type": "code", 429 | "execution_count": 26, 430 | "metadata": {}, 431 | "outputs": [ 432 | { 433 | "name": "stdout", 434 | "output_type": "stream", 435 | "text": [ 436 | "acc:0.872032426173\n" 437 | ] 438 | } 439 | ], 440 | "source": [ 441 | "score = metrics.accuracy_score(y_test, cls_pred)\n", 442 | "print(\"acc:\" + str(score))" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": null, 448 | "metadata": { 449 | "collapsed": true 450 | }, 451 | "outputs": [], 452 | "source": [] 453 | } 454 | ], 455 | "metadata": { 456 | "kernelspec": { 457 | "display_name": "Python 2", 458 | "language": "python", 459 | "name": "python2" 460 | }, 461 | "language_info": { 462 | "codemirror_mode": { 463 | "name": "ipython", 464 | "version": 2 465 | }, 466 | "file_extension": ".py", 467 | "mimetype": "text/x-python", 468 | "name": "python", 469 | "nbconvert_exporter": "python", 470 | "pygments_lexer": "ipython2", 471 | "version": "2.7.13" 472 | } 473 | }, 474 | "nbformat": 4, 475 | "nbformat_minor": 2 476 | } 477 | -------------------------------------------------------------------------------- /cnn_model2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Loading 20 newsgroups dataset for categories:\n", 13 | "\t\t['alt.atheism', 'talk.religion.misc', 'rec.autos', 'talk.politics.guns', 'rec.sport.baseball']\n", 14 | "train and test labes are being encoded to onehot vector\n", 15 | "integer classes\n", 16 | "\ttrain\n", 17 | "[1 1 2 ..., 1 2 3]\n", 18 | "\ttest\n", 19 | "[4 4 2 ..., 1 3 3]\n", 20 | "encoded clasesses\n", 21 | "\ttrain\n", 22 | "[[ 0. 1. 0. 0. 0.]\n", 23 | " [ 0. 1. 0. 0. 0.]\n", 24 | " [ 0. 0. 1. 0. 0.]\n", 25 | " ..., \n", 26 | " [ 0. 1. 0. 0. 0.]\n", 27 | " [ 0. 0. 1. 0. 0.]\n", 28 | " [ 0. 0. 0. 1. 0.]]\n", 29 | "\ttest\n", 30 | "[[ 0. 0. 0. 0. 1.]\n", 31 | " [ 0. 0. 0. 0. 1.]\n", 32 | " [ 0. 0. 1. 0. 0.]\n", 33 | " ..., \n", 34 | " [ 0. 1. 0. 0. 0.]\n", 35 | " [ 0. 0. 0. 1. 0.]\n", 36 | " [ 0. 0. 0. 1. 0.]]\n", 37 | "Extracting features from the training data using a sparse vectorizer\n", 38 | "n_samples: 2594, n_features: 37364\n", 39 | "Extracting features from the test data using the same vectorizer\n", 40 | "n_samples: 1727, n_features: 37364\n", 41 | "Size of:\n", 42 | "- Training-set:\t\t\t2594\n", 43 | "- Test-set:\t\t\t1727\n", 44 | "- Feature:\t\t\t37364\n", 45 | "- Number of classes:\t\t5\n" 46 | ] 47 | } 48 | ], 49 | "source": [ 50 | "import tensorflow as tf\n", 51 | "import numpy as np\n", 52 | "from sklearn.metrics import confusion_matrix\n", 53 | "import time\n", 54 | "from datetime import timedelta\n", 55 | "import math\n", 56 | "\n", 57 | "from __future__ import absolute_import\n", 58 | "from __future__ import division\n", 59 | "from __future__ import print_function\n", 60 | "\n", 61 | "import argparse\n", 62 | "import sys\n", 63 | "\n", 64 | "import numpy as np\n", 65 | "import tensorflow as tf\n", 66 | "\n", 67 | "from sklearn.datasets import fetch_20newsgroups\n", 68 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 69 | "from sklearn import metrics\n", 70 | "\n", 71 | "from sklearn.preprocessing import OneHotEncoder\n", 72 | "from sklearn.preprocessing import LabelEncoder\n", 73 | "from numpy import array\n", 74 | "from numpy import argmax\n", 75 | "\n", 76 | "\n", 77 | "\n", 78 | "categories = [\n", 79 | " 'alt.atheism',\n", 80 | " 'talk.religion.misc',\n", 81 | " 'rec.autos',\n", 82 | " 'talk.politics.guns',\n", 83 | " 'rec.sport.baseball'\n", 84 | " ]\n", 85 | "\n", 86 | "remove = ()\n", 87 | "\n", 88 | "print(\"Loading 20 newsgroups dataset for categories:\")\n", 89 | "print(\"\\t\\t\" + str(categories))\n", 90 | "\n", 91 | "\n", 92 | "data_train = fetch_20newsgroups(subset='train', categories=categories,\n", 93 | " shuffle=True, random_state=42,\n", 94 | " remove=remove)\n", 95 | "\n", 96 | "data_test = fetch_20newsgroups(subset='test', categories=categories,\n", 97 | " shuffle=True, random_state=42,\n", 98 | " remove=remove)\n", 99 | "\n", 100 | "\n", 101 | "\n", 102 | "print(\"train and test labes are being encoded to onehot vector\")\n", 103 | "\n", 104 | "target_names = data_train.target_names\n", 105 | "y_train, y_test = data_train.target, data_test.target\n", 106 | "\n", 107 | "print(\"integer classes\")\n", 108 | "\n", 109 | "print(\"\\ttrain\")\n", 110 | "print(y_train)\n", 111 | "\n", 112 | "print(\"\\ttest\")\n", 113 | "print(y_test)\n", 114 | "\n", 115 | "\n", 116 | "label_encoder_train = LabelEncoder()\n", 117 | "onehot_encoder_train = OneHotEncoder(sparse=False)\n", 118 | "\n", 119 | "integer_encoded_train = label_encoder_train.fit_transform(y_train)\n", 120 | "integer_encoded_train = integer_encoded_train.reshape(len(integer_encoded_train), 1)\n", 121 | "\n", 122 | "y_train_onehot = onehot_encoder_train.fit_transform(integer_encoded_train)\n", 123 | "\n", 124 | "\n", 125 | "label_encoder_test = LabelEncoder()\n", 126 | "onehot_encoder_test = OneHotEncoder(sparse=False)\n", 127 | "\n", 128 | "\n", 129 | "integer_encoded_test = label_encoder_test.fit_transform(y_test)\n", 130 | "integer_encoded_test = integer_encoded_test.reshape(len(integer_encoded_test), 1)\n", 131 | "\n", 132 | "y_test_onehot = onehot_encoder_test.fit_transform(integer_encoded_test)\n", 133 | "\n", 134 | "\n", 135 | "print(\"encoded clasesses\")\n", 136 | "print(\"\\ttrain\")\n", 137 | "print(y_train_onehot)\n", 138 | "print(\"\\ttest\")\n", 139 | "print(y_test_onehot)\n", 140 | "\n", 141 | "\n", 142 | "\n", 143 | "print(\"Extracting features from the training data using a sparse vectorizer\")\n", 144 | "vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')\n", 145 | "X_train = vectorizer.fit_transform(data_train.data)\n", 146 | "\n", 147 | "print(\"n_samples: %d, n_features: %d\" % X_train.shape)\n", 148 | "\n", 149 | "\n", 150 | "print(\"Extracting features from the test data using the same vectorizer\")\n", 151 | "X_test = vectorizer.transform(data_test.data)\n", 152 | "print(\"n_samples: %d, n_features: %d\" % X_test.shape)\n", 153 | "\n", 154 | "X_train = X_train.toarray()\n", 155 | "X_test = X_test.toarray()\n", 156 | "\n", 157 | "feature_flat_size = X_train[0].size\n", 158 | "num_classes = len(target_names)\n", 159 | "\n", 160 | "\n", 161 | "print(\"Size of:\")\n", 162 | "print(\"- Training-set:\\t\\t\\t{}\".format(len(X_train)))\n", 163 | "print(\"- Test-set:\\t\\t\\t{}\".format(len(X_test)))\n", 164 | "\n", 165 | "#print(str(X_train))\n", 166 | "if(X_train[0].size == X_test[0].size):\n", 167 | " print(\"- Feature:\\t\\t\\t{}\".format(str(X_train[0].size)))\n", 168 | "#print(\"feature size test: \" + str(X_test[0].size))\n", 169 | "\n", 170 | "print(\"- Number of classes:\\t\\t{}\".format(str(num_classes)))" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 2, 176 | "metadata": { 177 | "collapsed": true 178 | }, 179 | "outputs": [], 180 | "source": [ 181 | "def new_weights(shape):\n", 182 | " return tf.Variable(tf.truncated_normal(shape, stddev=0.05))\n", 183 | "\n", 184 | "def new_biases(length):\n", 185 | " return tf.Variable(tf.constant(0.05, shape=[length]))\n" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 3, 191 | "metadata": { 192 | "collapsed": true 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "'''\n", 197 | " uses 5x1 filter\n", 198 | " number of channel is 1\n", 199 | " poolin is 2x1\n", 200 | "\n", 201 | "'''\n", 202 | "\n", 203 | "def new_conv_layer(input, # The previous layer.\n", 204 | " num_input_channels,\n", 205 | " num_filters, # Number of filters.\n", 206 | " use_pooling=True): # Use 2x2 max-pooling.\n", 207 | "\n", 208 | " # Shape of the filter-weights for the convolution.\n", 209 | " # This format is determined by the TensorFlow API.\n", 210 | " shape = [5, 1, num_input_channels, num_filters]\n", 211 | "\n", 212 | " # Create new weights aka. filters with the given shape.\n", 213 | " weights = new_weights(shape=shape)\n", 214 | "\n", 215 | " # Create new biases, one for each filter.\n", 216 | " biases = new_biases(length=num_filters)\n", 217 | "\n", 218 | " # Create the TensorFlow operation for convolution.\n", 219 | " # Note the strides are set to 1 in all dimensions.\n", 220 | " # The first and last stride must always be 1,\n", 221 | " # because the first is for the image-number and\n", 222 | " # the last is for the input-channel.\n", 223 | " # But e.g. strides=[1, 2, 2, 1] would mean that the filter\n", 224 | " # is moved 2 pixels across the x- and y-axis of the image.\n", 225 | " # The padding is set to 'SAME' which means the input image\n", 226 | " # is padded with zeroes so the size of the output is the same.\n", 227 | " layer = tf.nn.conv2d(input=input,\n", 228 | " filter=weights,\n", 229 | " strides=[1, 1, 1, 1],\n", 230 | " padding='SAME')\n", 231 | "\n", 232 | " # Add the biases to the results of the convolution.\n", 233 | " # A bias-value is added to each filter-channel.\n", 234 | " layer += biases\n", 235 | "\n", 236 | " # Use pooling to down-sample the image resolution?\n", 237 | " if use_pooling:\n", 238 | " # This is 2x2 max-pooling, which means that we\n", 239 | " # consider 2x2 windows and select the largest value\n", 240 | " # in each window. Then we move 2 pixels to the next window.\n", 241 | " layer = tf.nn.max_pool(value=layer,\n", 242 | " ksize=[1, 2, 1, 1],\n", 243 | " strides=[1, 2, 1, 1],\n", 244 | " padding='SAME')\n", 245 | "\n", 246 | " # Rectified Linear Unit (ReLU).\n", 247 | " # It calculates max(x, 0) for each input pixel x.\n", 248 | " # This adds some non-linearity to the formula and allows us\n", 249 | " # to learn more complicated functions.\n", 250 | " layer = tf.nn.relu(layer)\n", 251 | "\n", 252 | " # Note that ReLU is normally executed before the pooling,\n", 253 | " # but since relu(max_pool(x)) == max_pool(relu(x)) we can\n", 254 | " # save 75% of the relu-operations by max-pooling first.\n", 255 | "\n", 256 | " # We return both the resulting layer and the filter-weights\n", 257 | " # because we will plot the weights later.\n", 258 | " return layer, weights" 259 | ] 260 | }, 261 | { 262 | "cell_type": "code", 263 | "execution_count": 4, 264 | "metadata": { 265 | "collapsed": true 266 | }, 267 | "outputs": [], 268 | "source": [ 269 | "'''\n", 270 | "A convolutional layer produces an output tensor with 4 dimensions. \n", 271 | "We will add fully-connected layers after the convolution layers, \n", 272 | "so we need to reduce the 4-dim tensor to 2-dim which can be used \n", 273 | "as input to the fully-connected layer.\n", 274 | "'''\n", 275 | "\n", 276 | "def flatten_layer(layer):\n", 277 | " # Get the shape of the input layer.\n", 278 | " layer_shape = layer.get_shape()\n", 279 | "\n", 280 | " # The shape of the input layer is assumed to be:\n", 281 | " # layer_shape == [num_documets, img_height, img_width, num_channels]\n", 282 | "\n", 283 | " # The number of features is: img_height * img_width * num_channels\n", 284 | " # We can use a function from TensorFlow to calculate this.\n", 285 | " num_features = layer_shape[1:4].num_elements()\n", 286 | " \n", 287 | " # Reshape the layer to [num_images, num_features].\n", 288 | " # Note that we just set the size of the second dimension\n", 289 | " # to num_features and the size of the first dimension to -1\n", 290 | " # which means the size in that dimension is calculated\n", 291 | " # so the total size of the tensor is unchanged from the reshaping.\n", 292 | " layer_flat = tf.reshape(layer, [-1, num_features])\n", 293 | "\n", 294 | " # The shape of the flattened layer is now:\n", 295 | " # [num_images, img_height * img_width * num_channels]\n", 296 | "\n", 297 | " # Return both the flattened layer and the number of features.\n", 298 | " return layer_flat, num_features" 299 | ] 300 | }, 301 | { 302 | "cell_type": "code", 303 | "execution_count": 5, 304 | "metadata": { 305 | "collapsed": true 306 | }, 307 | "outputs": [], 308 | "source": [ 309 | "def new_fc_layer(input, # The previous layer.\n", 310 | " num_inputs, # Num. inputs from prev. layer.\n", 311 | " num_outputs, # Num. outputs.\n", 312 | " use_relu=True): # Use Rectified Linear Unit (ReLU)?\n", 313 | "\n", 314 | " # Create new weights and biases.\n", 315 | " weights = new_weights(shape=[num_inputs, num_outputs])\n", 316 | " biases = new_biases(length=num_outputs)\n", 317 | "\n", 318 | " # Calculate the layer as the matrix multiplication of\n", 319 | " # the input and weights, and then add the bias-values.\n", 320 | " layer = tf.matmul(input, weights) + biases\n", 321 | "\n", 322 | " # Use ReLU?\n", 323 | " if use_relu:\n", 324 | " layer = tf.nn.relu(layer)\n", 325 | "\n", 326 | " return layer" 327 | ] 328 | }, 329 | { 330 | "cell_type": "code", 331 | "execution_count": 6, 332 | "metadata": {}, 333 | "outputs": [ 334 | { 335 | "name": "stdout", 336 | "output_type": "stream", 337 | "text": [ 338 | "WARNING:tensorflow:From :7: calling argmax (from tensorflow.python.ops.math_ops) with dimension is deprecated and will be removed in a future version.\n", 339 | "Instructions for updating:\n", 340 | "Use the `axis` argument instead\n" 341 | ] 342 | } 343 | ], 344 | "source": [ 345 | "x = tf.placeholder(tf.float32, shape=[None, feature_flat_size], name='x')\n", 346 | "x_doc = tf.reshape(x, [-1, feature_flat_size, 1, 1])\n", 347 | "\n", 348 | "y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')\n", 349 | "\n", 350 | "\n", 351 | "y_true_cls = tf.argmax(y_true, dimension=1)\n", 352 | "\n", 353 | "\n" 354 | ] 355 | }, 356 | { 357 | "cell_type": "code", 358 | "execution_count": 7, 359 | "metadata": { 360 | "collapsed": true 361 | }, 362 | "outputs": [], 363 | "source": [ 364 | "#creating first conv. layer by using 16 filters and pooling\n", 365 | "\n", 366 | "layer_conv1, weights_conv1 = \\\n", 367 | " new_conv_layer(input=x_doc,\n", 368 | " num_input_channels = 1,\n", 369 | " num_filters=16,\n", 370 | " use_pooling=True)" 371 | ] 372 | }, 373 | { 374 | "cell_type": "code", 375 | "execution_count": 8, 376 | "metadata": {}, 377 | "outputs": [ 378 | { 379 | "data": { 380 | "text/plain": [ 381 | "" 382 | ] 383 | }, 384 | "execution_count": 8, 385 | "metadata": {}, 386 | "output_type": "execute_result" 387 | } 388 | ], 389 | "source": [ 390 | "layer_conv1" 391 | ] 392 | }, 393 | { 394 | "cell_type": "code", 395 | "execution_count": 9, 396 | "metadata": {}, 397 | "outputs": [ 398 | { 399 | "data": { 400 | "text/plain": [ 401 | "37364" 402 | ] 403 | }, 404 | "execution_count": 9, 405 | "metadata": {}, 406 | "output_type": "execute_result" 407 | } 408 | ], 409 | "source": [ 410 | "feature_flat_size" 411 | ] 412 | }, 413 | { 414 | "cell_type": "code", 415 | "execution_count": 11, 416 | "metadata": { 417 | "collapsed": true 418 | }, 419 | "outputs": [], 420 | "source": [ 421 | "#creating second conv. layer by using 36 filters and pooling\n", 422 | "\n", 423 | "layer_conv2, weights_conv2 = \\\n", 424 | " new_conv_layer(input=layer_conv1,\n", 425 | " num_input_channels = 16,\n", 426 | " num_filters=36,\n", 427 | " use_pooling=True)" 428 | ] 429 | }, 430 | { 431 | "cell_type": "code", 432 | "execution_count": 12, 433 | "metadata": { 434 | "collapsed": true 435 | }, 436 | "outputs": [], 437 | "source": [ 438 | "layer_flat, num_features = flatten_layer(layer_conv2)\n", 439 | "\n" 440 | ] 441 | }, 442 | { 443 | "cell_type": "code", 444 | "execution_count": 13, 445 | "metadata": {}, 446 | "outputs": [ 447 | { 448 | "data": { 449 | "text/plain": [ 450 | "" 451 | ] 452 | }, 453 | "execution_count": 13, 454 | "metadata": {}, 455 | "output_type": "execute_result" 456 | } 457 | ], 458 | "source": [ 459 | "layer_flat" 460 | ] 461 | }, 462 | { 463 | "cell_type": "code", 464 | "execution_count": 14, 465 | "metadata": {}, 466 | "outputs": [ 467 | { 468 | "data": { 469 | "text/plain": [ 470 | "336276" 471 | ] 472 | }, 473 | "execution_count": 14, 474 | "metadata": {}, 475 | "output_type": "execute_result" 476 | } 477 | ], 478 | "source": [ 479 | "num_features" 480 | ] 481 | }, 482 | { 483 | "cell_type": "code", 484 | "execution_count": 15, 485 | "metadata": { 486 | "collapsed": true 487 | }, 488 | "outputs": [], 489 | "source": [ 490 | "#creating fully connected layer with 128 number of nodes\n", 491 | "\n", 492 | "layer_fc1 = new_fc_layer(input=layer_flat,\n", 493 | " num_inputs=num_features,\n", 494 | " num_outputs=128, \n", 495 | " use_relu=True)" 496 | ] 497 | }, 498 | { 499 | "cell_type": "code", 500 | "execution_count": 16, 501 | "metadata": {}, 502 | "outputs": [ 503 | { 504 | "data": { 505 | "text/plain": [ 506 | "" 507 | ] 508 | }, 509 | "execution_count": 16, 510 | "metadata": {}, 511 | "output_type": "execute_result" 512 | } 513 | ], 514 | "source": [ 515 | "layer_fc1" 516 | ] 517 | }, 518 | { 519 | "cell_type": "code", 520 | "execution_count": 20, 521 | "metadata": { 522 | "collapsed": true 523 | }, 524 | "outputs": [], 525 | "source": [ 526 | "#Add another fully-connected layer that outputs vectors of length num_classes\n", 527 | "#for determining which of the num_classes classes the input image belongs to. \n", 528 | "#Note that ReLU is not used in this layer.\n", 529 | "\n", 530 | "layer_fc2 = new_fc_layer(input=layer_fc1,\n", 531 | " num_inputs=128,\n", 532 | " num_outputs=num_classes,\n", 533 | " use_relu=False)" 534 | ] 535 | }, 536 | { 537 | "cell_type": "code", 538 | "execution_count": 21, 539 | "metadata": {}, 540 | "outputs": [ 541 | { 542 | "data": { 543 | "text/plain": [ 544 | "" 545 | ] 546 | }, 547 | "execution_count": 21, 548 | "metadata": {}, 549 | "output_type": "execute_result" 550 | } 551 | ], 552 | "source": [ 553 | "layer_fc2" 554 | ] 555 | }, 556 | { 557 | "cell_type": "code", 558 | "execution_count": 22, 559 | "metadata": { 560 | "collapsed": true 561 | }, 562 | "outputs": [], 563 | "source": [ 564 | "y_pred = tf.nn.softmax(layer_fc2)\n" 565 | ] 566 | }, 567 | { 568 | "cell_type": "code", 569 | "execution_count": 23, 570 | "metadata": {}, 571 | "outputs": [ 572 | { 573 | "name": "stdout", 574 | "output_type": "stream", 575 | "text": [ 576 | "WARNING:tensorflow:From :1: calling argmax (from tensorflow.python.ops.math_ops) with dimension is deprecated and will be removed in a future version.\n", 577 | "Instructions for updating:\n", 578 | "Use the `axis` argument instead\n" 579 | ] 580 | } 581 | ], 582 | "source": [ 583 | "y_pred_cls = tf.argmax(y_pred, dimension=1)\n" 584 | ] 585 | }, 586 | { 587 | "cell_type": "code", 588 | "execution_count": 24, 589 | "metadata": { 590 | "collapsed": true 591 | }, 592 | "outputs": [], 593 | "source": [ 594 | "cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2,\n", 595 | " labels=y_true)\n" 596 | ] 597 | }, 598 | { 599 | "cell_type": "code", 600 | "execution_count": 25, 601 | "metadata": { 602 | "collapsed": true 603 | }, 604 | "outputs": [], 605 | "source": [ 606 | "cost = tf.reduce_mean(cross_entropy)\n" 607 | ] 608 | }, 609 | { 610 | "cell_type": "code", 611 | "execution_count": 26, 612 | "metadata": { 613 | "collapsed": true 614 | }, 615 | "outputs": [], 616 | "source": [ 617 | "optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)" 618 | ] 619 | }, 620 | { 621 | "cell_type": "code", 622 | "execution_count": 27, 623 | "metadata": { 624 | "collapsed": true 625 | }, 626 | "outputs": [], 627 | "source": [ 628 | "correct_prediction = tf.equal(y_pred_cls, y_true_cls)\n", 629 | "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n" 630 | ] 631 | }, 632 | { 633 | "cell_type": "code", 634 | "execution_count": 28, 635 | "metadata": { 636 | "collapsed": true 637 | }, 638 | "outputs": [], 639 | "source": [ 640 | "\n", 641 | "session = tf.Session()\n", 642 | "\n", 643 | "session.run(tf.global_variables_initializer())\n" 644 | ] 645 | }, 646 | { 647 | "cell_type": "code", 648 | "execution_count": 29, 649 | "metadata": { 650 | "collapsed": true 651 | }, 652 | "outputs": [], 653 | "source": [ 654 | "def optimize(num_iterations):\n", 655 | " feed_dict_train = {x: X_train, y_true: y_train_onehot}\n", 656 | " \n", 657 | " for i in range(num_iterations):\n", 658 | " # Put the batch into a dict with the proper names\n", 659 | " # for placeholder variables in the TensorFlow graph.\n", 660 | " # Note that the placeholder for y_true_cls is not set\n", 661 | " # because it is not used during training.\n", 662 | " \n", 663 | " # Run the optimizer using this batch of training data.\n", 664 | " # TensorFlow assigns the variables in feed_dict_train\n", 665 | " # to the placeholder variables and then runs the optimizer.\n", 666 | " session.run(optimizer, feed_dict=feed_dict_train)\n", 667 | " \n", 668 | " if i % 100 == 0:\n", 669 | " # Calculate the accuracy on the training-set.\n", 670 | " acc = session.run(accuracy, feed_dict=feed_dict_train)\n", 671 | "\n", 672 | " # Message for printing.\n", 673 | " msg = \"Optimization Iteration: {0:>6}, Training Accuracy: {1:>6.1%}\"\n", 674 | "\n", 675 | " # Print it.\n", 676 | " print(msg.format(i + 1, acc))\n", 677 | " \n", 678 | " " 679 | ] 680 | }, 681 | { 682 | "cell_type": "code", 683 | "execution_count": 30, 684 | "metadata": { 685 | "collapsed": true 686 | }, 687 | "outputs": [], 688 | "source": [ 689 | "feed_dict_test = {x: X_test,\n", 690 | " y_true: y_test_onehot,\n", 691 | " y_true_cls: y_test}" 692 | ] 693 | }, 694 | { 695 | "cell_type": "code", 696 | "execution_count": 31, 697 | "metadata": { 698 | "collapsed": true 699 | }, 700 | "outputs": [], 701 | "source": [ 702 | "def print_accuracy():\n", 703 | " # Use TensorFlow to compute the accuracy.\n", 704 | " acc = session.run(accuracy, feed_dict=feed_dict_test)\n", 705 | " \n", 706 | " # Print the accuracy.\n", 707 | " print(\"Accuracy on test-set: {0:.1%}\".format(acc))" 708 | ] 709 | }, 710 | { 711 | "cell_type": "code", 712 | "execution_count": 32, 713 | "metadata": {}, 714 | "outputs": [ 715 | { 716 | "name": "stdout", 717 | "output_type": "stream", 718 | "text": [ 719 | "Accuracy on test-set: 22.9%\n" 720 | ] 721 | } 722 | ], 723 | "source": [ 724 | "print_accuracy()\n", 725 | "#this is no optimization" 726 | ] 727 | }, 728 | { 729 | "cell_type": "code", 730 | "execution_count": null, 731 | "metadata": { 732 | "collapsed": true 733 | }, 734 | "outputs": [], 735 | "source": [ 736 | "optimize(num_iterations=1000)\n" 737 | ] 738 | } 739 | ], 740 | "metadata": { 741 | "kernelspec": { 742 | "display_name": "Python 2", 743 | "language": "python", 744 | "name": "python2" 745 | }, 746 | "language_info": { 747 | "codemirror_mode": { 748 | "name": "ipython", 749 | "version": 2 750 | }, 751 | "file_extension": ".py", 752 | "mimetype": "text/x-python", 753 | "name": "python", 754 | "nbconvert_exporter": "python", 755 | "pygments_lexer": "ipython2", 756 | "version": "2.7.13" 757 | } 758 | }, 759 | "nbformat": 4, 760 | "nbformat_minor": 2 761 | } 762 | -------------------------------------------------------------------------------- /dnn_model.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Loading 20 newsgroups dataset for categories:\n", 13 | "\t\t['alt.atheism', 'talk.religion.misc', 'rec.autos', 'talk.politics.guns', 'rec.sport.baseball']\n", 14 | "train and test labes are being encoded to onehot vector\n", 15 | "integer classes\n", 16 | "\ttrain\n", 17 | "[1 1 2 ..., 1 2 3]\n", 18 | "\ttest\n", 19 | "[4 4 2 ..., 1 3 3]\n", 20 | "encoded clasesses\n", 21 | "\ttrain\n", 22 | "[[ 0. 1. 0. 0. 0.]\n", 23 | " [ 0. 1. 0. 0. 0.]\n", 24 | " [ 0. 0. 1. 0. 0.]\n", 25 | " ..., \n", 26 | " [ 0. 1. 0. 0. 0.]\n", 27 | " [ 0. 0. 1. 0. 0.]\n", 28 | " [ 0. 0. 0. 1. 0.]]\n", 29 | "\ttest\n", 30 | "[[ 0. 0. 0. 0. 1.]\n", 31 | " [ 0. 0. 0. 0. 1.]\n", 32 | " [ 0. 0. 1. 0. 0.]\n", 33 | " ..., \n", 34 | " [ 0. 1. 0. 0. 0.]\n", 35 | " [ 0. 0. 0. 1. 0.]\n", 36 | " [ 0. 0. 0. 1. 0.]]\n", 37 | "Extracting features from the training data using a sparse vectorizer\n", 38 | "n_samples: 2594, n_features: 37364\n", 39 | "Extracting features from the test data using the same vectorizer\n", 40 | "n_samples: 1727, n_features: 37364\n", 41 | "Size of:\n", 42 | "- Training-set:\t\t\t2594\n", 43 | "- Test-set:\t\t\t1727\n", 44 | "- Feature:\t\t\t37364\n", 45 | "- Number of classes:\t\t5\n" 46 | ] 47 | } 48 | ], 49 | "source": [ 50 | "import tensorflow as tf\n", 51 | "import numpy as np\n", 52 | "from sklearn.metrics import confusion_matrix\n", 53 | "import time\n", 54 | "from datetime import timedelta\n", 55 | "import math\n", 56 | "\n", 57 | "from __future__ import absolute_import\n", 58 | "from __future__ import division\n", 59 | "from __future__ import print_function\n", 60 | "\n", 61 | "import argparse\n", 62 | "import sys\n", 63 | "\n", 64 | "import numpy as np\n", 65 | "import tensorflow as tf\n", 66 | "\n", 67 | "from sklearn.datasets import fetch_20newsgroups\n", 68 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 69 | "from sklearn import metrics\n", 70 | "\n", 71 | "from sklearn.preprocessing import OneHotEncoder\n", 72 | "from sklearn.preprocessing import LabelEncoder\n", 73 | "from numpy import array\n", 74 | "from numpy import argmax\n", 75 | "\n", 76 | "\n", 77 | "\n", 78 | "categories = [\n", 79 | " 'alt.atheism',\n", 80 | " 'talk.religion.misc',\n", 81 | " 'rec.autos',\n", 82 | " 'talk.politics.guns',\n", 83 | " 'rec.sport.baseball'\n", 84 | " ]\n", 85 | "\n", 86 | "remove = ()\n", 87 | "\n", 88 | "print(\"Loading 20 newsgroups dataset for categories:\")\n", 89 | "print(\"\\t\\t\" + str(categories))\n", 90 | "\n", 91 | "\n", 92 | "data_train = fetch_20newsgroups(subset='train', categories=categories,\n", 93 | " shuffle=True, random_state=42,\n", 94 | " remove=remove)\n", 95 | "\n", 96 | "data_test = fetch_20newsgroups(subset='test', categories=categories,\n", 97 | " shuffle=True, random_state=42,\n", 98 | " remove=remove)\n", 99 | "\n", 100 | "\n", 101 | "\n", 102 | "print(\"train and test labes are being encoded to onehot vector\")\n", 103 | "\n", 104 | "target_names = data_train.target_names\n", 105 | "y_train, y_test = data_train.target, data_test.target\n", 106 | "\n", 107 | "print(\"integer classes\")\n", 108 | "\n", 109 | "print(\"\\ttrain\")\n", 110 | "print(y_train)\n", 111 | "\n", 112 | "print(\"\\ttest\")\n", 113 | "print(y_test)\n", 114 | "\n", 115 | "\n", 116 | "label_encoder_train = LabelEncoder()\n", 117 | "onehot_encoder_train = OneHotEncoder(sparse=False)\n", 118 | "\n", 119 | "integer_encoded_train = label_encoder_train.fit_transform(y_train)\n", 120 | "integer_encoded_train = integer_encoded_train.reshape(len(integer_encoded_train), 1)\n", 121 | "\n", 122 | "y_train_onehot = onehot_encoder_train.fit_transform(integer_encoded_train)\n", 123 | "\n", 124 | "\n", 125 | "label_encoder_test = LabelEncoder()\n", 126 | "onehot_encoder_test = OneHotEncoder(sparse=False)\n", 127 | "\n", 128 | "\n", 129 | "integer_encoded_test = label_encoder_test.fit_transform(y_test)\n", 130 | "integer_encoded_test = integer_encoded_test.reshape(len(integer_encoded_test), 1)\n", 131 | "\n", 132 | "y_test_onehot = onehot_encoder_test.fit_transform(integer_encoded_test)\n", 133 | "\n", 134 | "\n", 135 | "print(\"encoded clasesses\")\n", 136 | "print(\"\\ttrain\")\n", 137 | "print(y_train_onehot)\n", 138 | "print(\"\\ttest\")\n", 139 | "print(y_test_onehot)\n", 140 | "\n", 141 | "\n", 142 | "\n", 143 | "print(\"Extracting features from the training data using a sparse vectorizer\")\n", 144 | "vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')\n", 145 | "X_train = vectorizer.fit_transform(data_train.data)\n", 146 | "\n", 147 | "print(\"n_samples: %d, n_features: %d\" % X_train.shape)\n", 148 | "\n", 149 | "\n", 150 | "print(\"Extracting features from the test data using the same vectorizer\")\n", 151 | "X_test = vectorizer.transform(data_test.data)\n", 152 | "print(\"n_samples: %d, n_features: %d\" % X_test.shape)\n", 153 | "\n", 154 | "X_train = X_train.toarray()\n", 155 | "X_test = X_test.toarray()\n", 156 | "\n", 157 | "feature_flat_size = X_train[0].size\n", 158 | "num_classes = len(target_names)\n", 159 | "\n", 160 | "\n", 161 | "print(\"Size of:\")\n", 162 | "print(\"- Training-set:\\t\\t\\t{}\".format(len(X_train)))\n", 163 | "print(\"- Test-set:\\t\\t\\t{}\".format(len(X_test)))\n", 164 | "\n", 165 | "#print(str(X_train))\n", 166 | "if(X_train[0].size == X_test[0].size):\n", 167 | " print(\"- Feature:\\t\\t\\t{}\".format(str(X_train[0].size)))\n", 168 | "#print(\"feature size test: \" + str(X_test[0].size))\n", 169 | "\n", 170 | "print(\"- Number of classes:\\t\\t{}\".format(str(num_classes)))" 171 | ] 172 | }, 173 | { 174 | "cell_type": "code", 175 | "execution_count": 2, 176 | "metadata": { 177 | "collapsed": true 178 | }, 179 | "outputs": [], 180 | "source": [ 181 | "def new_weights(shape):\n", 182 | " return tf.Variable(tf.truncated_normal(shape, stddev=0.05))\n", 183 | "\n", 184 | "def new_biases(length):\n", 185 | " return tf.Variable(tf.constant(0.05, shape=[length]))" 186 | ] 187 | }, 188 | { 189 | "cell_type": "code", 190 | "execution_count": 3, 191 | "metadata": { 192 | "collapsed": true 193 | }, 194 | "outputs": [], 195 | "source": [ 196 | "'''\n", 197 | "A convolutional layer produces an output tensor with 4 dimensions. \n", 198 | "We will add fully-connected layers after the convolution layers, \n", 199 | "so we need to reduce the 4-dim tensor to 2-dim which can be used \n", 200 | "as input to the fully-connected layer.\n", 201 | "'''\n", 202 | "\n", 203 | "def flatten_layer(layer):\n", 204 | " # Get the shape of the input layer.\n", 205 | " layer_shape = layer.get_shape()\n", 206 | "\n", 207 | " # The shape of the input layer is assumed to be:\n", 208 | " # layer_shape == [num_documets, img_height, img_width, num_channels]\n", 209 | "\n", 210 | " # The number of features is: img_height * img_width * num_channels\n", 211 | " # We can use a function from TensorFlow to calculate this.\n", 212 | " num_features = layer_shape[1:4].num_elements()\n", 213 | " \n", 214 | " # Reshape the layer to [num_images, num_features].\n", 215 | " # Note that we just set the size of the second dimension\n", 216 | " # to num_features and the size of the first dimension to -1\n", 217 | " # which means the size in that dimension is calculated\n", 218 | " # so the total size of the tensor is unchanged from the reshaping.\n", 219 | " layer_flat = tf.reshape(layer, [-1, num_features])\n", 220 | "\n", 221 | " # The shape of the flattened layer is now:\n", 222 | " # [num_images, img_height * img_width * num_channels]\n", 223 | "\n", 224 | " # Return both the flattened layer and the number of features.\n", 225 | " return layer_flat, num_features" 226 | ] 227 | }, 228 | { 229 | "cell_type": "code", 230 | "execution_count": 4, 231 | "metadata": { 232 | "collapsed": true 233 | }, 234 | "outputs": [], 235 | "source": [ 236 | "def new_fc_layer(input, # The previous layer.\n", 237 | " num_inputs, # Num. inputs from prev. layer.\n", 238 | " num_outputs, # Num. outputs.\n", 239 | " use_relu=True): # Use Rectified Linear Unit (ReLU)?\n", 240 | "\n", 241 | " # Create new weights and biases.\n", 242 | " weights = new_weights(shape=[num_inputs, num_outputs])\n", 243 | " biases = new_biases(length=num_outputs)\n", 244 | "\n", 245 | " # Calculate the layer as the matrix multiplication of\n", 246 | " # the input and weights, and then add the bias-values.\n", 247 | " layer = tf.matmul(input, weights) + biases\n", 248 | "\n", 249 | " # Use ReLU?\n", 250 | " if use_relu:\n", 251 | " layer = tf.nn.relu(layer)\n", 252 | "\n", 253 | " return layer" 254 | ] 255 | }, 256 | { 257 | "cell_type": "code", 258 | "execution_count": 5, 259 | "metadata": {}, 260 | "outputs": [ 261 | { 262 | "name": "stdout", 263 | "output_type": "stream", 264 | "text": [ 265 | "WARNING:tensorflow:From :7: calling argmax (from tensorflow.python.ops.math_ops) with dimension is deprecated and will be removed in a future version.\n", 266 | "Instructions for updating:\n", 267 | "Use the `axis` argument instead\n" 268 | ] 269 | } 270 | ], 271 | "source": [ 272 | "x = tf.placeholder(tf.float32, shape=[None, feature_flat_size], name='x')\n", 273 | "x_doc = tf.reshape(x, [-1, feature_flat_size, 1, 1])\n", 274 | "\n", 275 | "y_true = tf.placeholder(tf.float32, shape=[None, num_classes], name='y_true')\n", 276 | "\n", 277 | "\n", 278 | "y_true_cls = tf.argmax(y_true, dimension=1)\n" 279 | ] 280 | }, 281 | { 282 | "cell_type": "code", 283 | "execution_count": 7, 284 | "metadata": {}, 285 | "outputs": [], 286 | "source": [ 287 | "layer_fc1 = new_fc_layer(input=x,\n", 288 | " num_inputs=feature_flat_size,\n", 289 | " num_outputs=128, \n", 290 | " use_relu=True)" 291 | ] 292 | }, 293 | { 294 | "cell_type": "code", 295 | "execution_count": 8, 296 | "metadata": {}, 297 | "outputs": [ 298 | { 299 | "data": { 300 | "text/plain": [ 301 | "" 302 | ] 303 | }, 304 | "execution_count": 8, 305 | "metadata": {}, 306 | "output_type": "execute_result" 307 | } 308 | ], 309 | "source": [ 310 | "layer_fc1" 311 | ] 312 | }, 313 | { 314 | "cell_type": "code", 315 | "execution_count": 9, 316 | "metadata": { 317 | "collapsed": true 318 | }, 319 | "outputs": [], 320 | "source": [ 321 | "#Add another fully-connected layer that outputs vectors of length num_classes\n", 322 | "#for determining which of the num_classes classes the input image belongs to. \n", 323 | "#Note that ReLU is not used in this layer.\n", 324 | "\n", 325 | "layer_fc2 = new_fc_layer(input=layer_fc1,\n", 326 | " num_inputs=128,\n", 327 | " num_outputs=num_classes,\n", 328 | " use_relu=False)" 329 | ] 330 | }, 331 | { 332 | "cell_type": "code", 333 | "execution_count": 10, 334 | "metadata": {}, 335 | "outputs": [ 336 | { 337 | "data": { 338 | "text/plain": [ 339 | "" 340 | ] 341 | }, 342 | "execution_count": 10, 343 | "metadata": {}, 344 | "output_type": "execute_result" 345 | } 346 | ], 347 | "source": [ 348 | "layer_fc2" 349 | ] 350 | }, 351 | { 352 | "cell_type": "code", 353 | "execution_count": 11, 354 | "metadata": {}, 355 | "outputs": [ 356 | { 357 | "name": "stdout", 358 | "output_type": "stream", 359 | "text": [ 360 | "WARNING:tensorflow:From :2: calling argmax (from tensorflow.python.ops.math_ops) with dimension is deprecated and will be removed in a future version.\n", 361 | "Instructions for updating:\n", 362 | "Use the `axis` argument instead\n" 363 | ] 364 | } 365 | ], 366 | "source": [ 367 | "y_pred = tf.nn.softmax(layer_fc2)\n", 368 | "y_pred_cls = tf.argmax(y_pred, dimension=1)\n", 369 | "\n", 370 | "\n", 371 | "cross_entropy = tf.nn.softmax_cross_entropy_with_logits(logits=layer_fc2, labels=y_true)\n", 372 | "\n", 373 | "cost = tf.reduce_mean(cross_entropy)\n" 374 | ] 375 | }, 376 | { 377 | "cell_type": "code", 378 | "execution_count": 12, 379 | "metadata": { 380 | "collapsed": true 381 | }, 382 | "outputs": [], 383 | "source": [ 384 | "optimizer = tf.train.AdamOptimizer(learning_rate=1e-4).minimize(cost)" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 13, 390 | "metadata": { 391 | "collapsed": true 392 | }, 393 | "outputs": [], 394 | "source": [ 395 | "correct_prediction = tf.equal(y_pred_cls, y_true_cls)\n", 396 | "accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))\n" 397 | ] 398 | }, 399 | { 400 | "cell_type": "code", 401 | "execution_count": 14, 402 | "metadata": { 403 | "collapsed": true 404 | }, 405 | "outputs": [], 406 | "source": [ 407 | "session = tf.Session()\n", 408 | "\n", 409 | "session.run(tf.global_variables_initializer())\n" 410 | ] 411 | }, 412 | { 413 | "cell_type": "code", 414 | "execution_count": 15, 415 | "metadata": { 416 | "collapsed": true 417 | }, 418 | "outputs": [], 419 | "source": [ 420 | "def optimize(num_iterations):\n", 421 | " feed_dict_train = {x: X_train, y_true: y_train_onehot}\n", 422 | " \n", 423 | " for i in range(num_iterations):\n", 424 | " # Put the batch into a dict with the proper names\n", 425 | " # for placeholder variables in the TensorFlow graph.\n", 426 | " # Note that the placeholder for y_true_cls is not set\n", 427 | " # because it is not used during training.\n", 428 | " \n", 429 | " # Run the optimizer using this batch of training data.\n", 430 | " # TensorFlow assigns the variables in feed_dict_train\n", 431 | " # to the placeholder variables and then runs the optimizer.\n", 432 | " session.run(optimizer, feed_dict=feed_dict_train)\n", 433 | " \n", 434 | " if i % 100 == 0:\n", 435 | " # Calculate the accuracy on the training-set.\n", 436 | " acc = session.run(accuracy, feed_dict=feed_dict_train)\n", 437 | "\n", 438 | " # Message for printing.\n", 439 | " msg = \"Optimization Iteration: {0:>6}, Training Accuracy: {1:>6.1%}\"\n", 440 | "\n", 441 | " # Print it.\n", 442 | " print(msg.format(i + 1, acc))" 443 | ] 444 | }, 445 | { 446 | "cell_type": "code", 447 | "execution_count": 16, 448 | "metadata": { 449 | "collapsed": true 450 | }, 451 | "outputs": [], 452 | "source": [ 453 | "feed_dict_test = {x: X_test,\n", 454 | " y_true: y_test_onehot,\n", 455 | " y_true_cls: y_test}" 456 | ] 457 | }, 458 | { 459 | "cell_type": "code", 460 | "execution_count": 17, 461 | "metadata": { 462 | "collapsed": true 463 | }, 464 | "outputs": [], 465 | "source": [ 466 | "def print_accuracy():\n", 467 | " # Use TensorFlow to compute the accuracy.\n", 468 | " acc = session.run(accuracy, feed_dict=feed_dict_test)\n", 469 | " \n", 470 | " # Print the accuracy.\n", 471 | " print(\"Accuracy on test-set: {0:.1%}\".format(acc))\n", 472 | " " 473 | ] 474 | }, 475 | { 476 | "cell_type": "code", 477 | "execution_count": 18, 478 | "metadata": {}, 479 | "outputs": [ 480 | { 481 | "name": "stdout", 482 | "output_type": "stream", 483 | "text": [ 484 | "Accuracy on test-set: 21.7%\n" 485 | ] 486 | } 487 | ], 488 | "source": [ 489 | "print_accuracy()\n" 490 | ] 491 | }, 492 | { 493 | "cell_type": "code", 494 | "execution_count": 19, 495 | "metadata": {}, 496 | "outputs": [ 497 | { 498 | "name": "stdout", 499 | "output_type": "stream", 500 | "text": [ 501 | "Optimization Iteration: 1, Training Accuracy: 24.5%\n", 502 | "Optimization Iteration: 101, Training Accuracy: 94.5%\n" 503 | ] 504 | }, 505 | { 506 | "ename": "KeyboardInterrupt", 507 | "evalue": "", 508 | "output_type": "error", 509 | "traceback": [ 510 | "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", 511 | "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", 512 | "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0moptimize\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mnum_iterations\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", 513 | "\u001b[0;32m\u001b[0m in \u001b[0;36moptimize\u001b[0;34m(num_iterations)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;31m# TensorFlow assigns the variables in feed_dict_train\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;31m# to the placeholder variables and then runs the optimizer.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0msession\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0moptimizer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeed_dict_train\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mi\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m100\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 514 | "\u001b[0;32m/Users/eneskilicaslan/.virtualenvs/cv/lib/python2.7/site-packages/tensorflow/python/client/session.pyc\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 893\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 894\u001b[0m result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[0;32m--> 895\u001b[0;31m run_metadata_ptr)\n\u001b[0m\u001b[1;32m 896\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 897\u001b[0m \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 515 | "\u001b[0;32m/Users/eneskilicaslan/.virtualenvs/cv/lib/python2.7/site-packages/tensorflow/python/client/session.pyc\u001b[0m in \u001b[0;36m_run\u001b[0;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 1122\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mhandle\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mfeed_dict_tensor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1123\u001b[0m results = self._do_run(handle, final_targets, final_fetches,\n\u001b[0;32m-> 1124\u001b[0;31m feed_dict_tensor, options, run_metadata)\n\u001b[0m\u001b[1;32m 1125\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1126\u001b[0m \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 516 | "\u001b[0;32m/Users/eneskilicaslan/.virtualenvs/cv/lib/python2.7/site-packages/tensorflow/python/client/session.pyc\u001b[0m in \u001b[0;36m_do_run\u001b[0;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m 1319\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1320\u001b[0m return self._do_call(_run_fn, self._session, feeds, fetches, targets,\n\u001b[0;32m-> 1321\u001b[0;31m options, run_metadata)\n\u001b[0m\u001b[1;32m 1322\u001b[0m \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1323\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_do_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0m_prun_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_session\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeeds\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetches\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 517 | "\u001b[0;32m/Users/eneskilicaslan/.virtualenvs/cv/lib/python2.7/site-packages/tensorflow/python/client/session.pyc\u001b[0m in \u001b[0;36m_do_call\u001b[0;34m(self, fn, *args)\u001b[0m\n\u001b[1;32m 1325\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1326\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1327\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1328\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1329\u001b[0m \u001b[0mmessage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 518 | "\u001b[0;32m/Users/eneskilicaslan/.virtualenvs/cv/lib/python2.7/site-packages/tensorflow/python/client/session.pyc\u001b[0m in \u001b[0;36m_run_fn\u001b[0;34m(session, feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[1;32m 1304\u001b[0m return tf_session.TF_Run(session, options,\n\u001b[1;32m 1305\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1306\u001b[0;31m status, run_metadata)\n\u001b[0m\u001b[1;32m 1307\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1308\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m_prun_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", 519 | "\u001b[0;31mKeyboardInterrupt\u001b[0m: " 520 | ] 521 | } 522 | ], 523 | "source": [ 524 | "optimize(num_iterations=1000)\n" 525 | ] 526 | }, 527 | { 528 | "cell_type": "code", 529 | "execution_count": null, 530 | "metadata": { 531 | "collapsed": true 532 | }, 533 | "outputs": [], 534 | "source": [] 535 | } 536 | ], 537 | "metadata": { 538 | "kernelspec": { 539 | "display_name": "Python 2", 540 | "language": "python", 541 | "name": "python2" 542 | }, 543 | "language_info": { 544 | "codemirror_mode": { 545 | "name": "ipython", 546 | "version": 2 547 | }, 548 | "file_extension": ".py", 549 | "mimetype": "text/x-python", 550 | "name": "python", 551 | "nbconvert_exporter": "python", 552 | "pygments_lexer": "ipython2", 553 | "version": "2.7.13" 554 | } 555 | }, 556 | "nbformat": 4, 557 | "nbformat_minor": 2 558 | } 559 | -------------------------------------------------------------------------------- /tf-tc-31.09.17.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": { 7 | "collapsed": true 8 | }, 9 | "outputs": [], 10 | "source": [ 11 | "from __future__ import absolute_import\n", 12 | "from __future__ import division\n", 13 | "from __future__ import print_function\n", 14 | "\n", 15 | "\n", 16 | "import numpy as np\n", 17 | "import tensorflow as tf\n", 18 | "\n", 19 | "\n", 20 | "from sklearn.datasets import fetch_20newsgroups\n", 21 | "from sklearn.feature_extraction.text import TfidfVectorizer\n", 22 | "from sklearn import metrics" 23 | ] 24 | }, 25 | { 26 | "cell_type": "code", 27 | "execution_count": 2, 28 | "metadata": { 29 | "collapsed": true 30 | }, 31 | "outputs": [], 32 | "source": [ 33 | "remove = ()\n", 34 | "\n", 35 | "data_train = fetch_20newsgroups(subset='train',\n", 36 | " shuffle=True, random_state=42,\n", 37 | " remove=remove)\n", 38 | "\n", 39 | "data_test = fetch_20newsgroups(subset='test',\n", 40 | " shuffle=True, random_state=42,\n", 41 | " remove=remove)\n" 42 | ] 43 | }, 44 | { 45 | "cell_type": "code", 46 | "execution_count": 3, 47 | "metadata": { 48 | "collapsed": true 49 | }, 50 | "outputs": [], 51 | "source": [ 52 | "target_names = data_train.target_names\n", 53 | "y_train, y_test = data_train.target, data_test.target" 54 | ] 55 | }, 56 | { 57 | "cell_type": "code", 58 | "execution_count": 4, 59 | "metadata": {}, 60 | "outputs": [ 61 | { 62 | "name": "stdout", 63 | "output_type": "stream", 64 | "text": [ 65 | "Extracting features from the training data using a sparse vectorizer\n", 66 | "n_samples: 11314, n_features: 129791\n" 67 | ] 68 | } 69 | ], 70 | "source": [ 71 | "print(\"Extracting features from the training data using a sparse vectorizer\")\n", 72 | "vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5, stop_words='english')\n", 73 | "X_train = vectorizer.fit_transform(data_train.data)\n", 74 | "\n", 75 | "print(\"n_samples: %d, n_features: %d\" % X_train.shape)" 76 | ] 77 | }, 78 | { 79 | "cell_type": "code", 80 | "execution_count": 5, 81 | "metadata": {}, 82 | "outputs": [ 83 | { 84 | "name": "stdout", 85 | "output_type": "stream", 86 | "text": [ 87 | "Extracting features from the test data using the same vectorizer\n", 88 | "n_samples: 7532, n_features: 129791\n" 89 | ] 90 | } 91 | ], 92 | "source": [ 93 | "\n", 94 | "print(\"Extracting features from the test data using the same vectorizer\")\n", 95 | "X_test = vectorizer.transform(data_test.data)\n", 96 | "print(\"n_samples: %d, n_features: %d\" % X_test.shape)" 97 | ] 98 | }, 99 | { 100 | "cell_type": "code", 101 | "execution_count": 6, 102 | "metadata": {}, 103 | "outputs": [ 104 | { 105 | "name": "stdout", 106 | "output_type": "stream", 107 | "text": [ 108 | "feature size train: 129791\n", 109 | "feature size test: 129791\n", 110 | "number of classes: 20\n" 111 | ] 112 | } 113 | ], 114 | "source": [ 115 | "X_train = X_train.toarray()\n", 116 | "X_test = X_test.toarray()\n", 117 | "\n", 118 | "#print(str(X_train))\n", 119 | "print(\"feature size train: \" + str(X_train[0].size))\n", 120 | "print(\"feature size test: \" + str(X_test[0].size))\n", 121 | "\n", 122 | "print(\"number of classes: \" + str(len(target_names)))" 123 | ] 124 | }, 125 | { 126 | "cell_type": "code", 127 | "execution_count": 7, 128 | "metadata": { 129 | "collapsed": true 130 | }, 131 | "outputs": [], 132 | "source": [ 133 | "# Specify that all features have real-value data\n", 134 | "feature_columns = [tf.feature_column.numeric_column(\"x\", shape=[X_train[0].size])]\n" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 8, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "name": "stdout", 144 | "output_type": "stream", 145 | "text": [ 146 | "INFO:tensorflow:Using default config.\n", 147 | "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX\n", 148 | "INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_tf_random_seed': 1, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_save_checkpoints_steps': None, '_model_dir': '/var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX', '_save_summary_steps': 100}\n" 149 | ] 150 | } 151 | ], 152 | "source": [ 153 | "# Build 3 layer DNN with 10, 20, 10 units respectively.\n", 154 | "classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns,\n", 155 | " hidden_units=[50, 500, 50],\n", 156 | " n_classes=len(target_names))" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 9, 162 | "metadata": { 163 | "collapsed": true 164 | }, 165 | "outputs": [], 166 | "source": [ 167 | "# Define the training inputs\n", 168 | "train_input_fn = tf.estimator.inputs.numpy_input_fn(\n", 169 | " x={\"x\": np.array(X_train)},\n", 170 | " y=np.array(y_train),\n", 171 | " num_epochs=None,\n", 172 | " shuffle=True)\n" 173 | ] 174 | }, 175 | { 176 | "cell_type": "code", 177 | "execution_count": 10, 178 | "metadata": {}, 179 | "outputs": [ 180 | { 181 | "name": "stdout", 182 | "output_type": "stream", 183 | "text": [ 184 | "INFO:tensorflow:Create CheckpointSaverHook.\n", 185 | "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX/model.ckpt.\n", 186 | "INFO:tensorflow:loss = 383.451, step = 1\n", 187 | "INFO:tensorflow:global_step/sec: 1.70731\n", 188 | "INFO:tensorflow:loss = 235.596, step = 101 (58.592 sec)\n", 189 | "INFO:tensorflow:global_step/sec: 1.80058\n", 190 | "INFO:tensorflow:loss = 38.9572, step = 201 (55.530 sec)\n", 191 | "INFO:tensorflow:global_step/sec: 1.92933\n", 192 | "INFO:tensorflow:loss = 4.2419, step = 301 (51.836 sec)\n", 193 | "INFO:tensorflow:global_step/sec: 1.84869\n", 194 | "INFO:tensorflow:loss = 1.53112, step = 401 (54.088 sec)\n", 195 | "INFO:tensorflow:global_step/sec: 1.87376\n", 196 | "INFO:tensorflow:loss = 0.404476, step = 501 (53.373 sec)\n", 197 | "INFO:tensorflow:global_step/sec: 1.76272\n", 198 | "INFO:tensorflow:loss = 0.26693, step = 601 (56.729 sec)\n", 199 | "INFO:tensorflow:global_step/sec: 1.82728\n", 200 | "INFO:tensorflow:loss = 0.199196, step = 701 (54.721 sec)\n", 201 | "INFO:tensorflow:global_step/sec: 1.90321\n", 202 | "INFO:tensorflow:loss = 2.33807, step = 801 (52.544 sec)\n", 203 | "INFO:tensorflow:global_step/sec: 1.9024\n", 204 | "INFO:tensorflow:loss = 0.19459, step = 901 (52.573 sec)\n", 205 | "INFO:tensorflow:global_step/sec: 1.90361\n", 206 | "INFO:tensorflow:loss = 0.133409, step = 1001 (52.524 sec)\n", 207 | "INFO:tensorflow:global_step/sec: 1.91463\n", 208 | "INFO:tensorflow:loss = 0.119772, step = 1101 (52.230 sec)\n", 209 | "INFO:tensorflow:Saving checkpoints for 1109 into /var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX/model.ckpt.\n", 210 | "INFO:tensorflow:global_step/sec: 1.86915\n", 211 | "INFO:tensorflow:loss = 0.0779749, step = 1201 (53.503 sec)\n", 212 | "INFO:tensorflow:global_step/sec: 1.8958\n", 213 | "INFO:tensorflow:loss = 0.0910657, step = 1301 (52.749 sec)\n", 214 | "INFO:tensorflow:global_step/sec: 1.89039\n", 215 | "INFO:tensorflow:loss = 0.0662109, step = 1401 (52.901 sec)\n", 216 | "INFO:tensorflow:global_step/sec: 1.90098\n", 217 | "INFO:tensorflow:loss = 0.0529819, step = 1501 (52.601 sec)\n", 218 | "INFO:tensorflow:global_step/sec: 1.90069\n", 219 | "INFO:tensorflow:loss = 0.0578286, step = 1601 (52.609 sec)\n", 220 | "INFO:tensorflow:global_step/sec: 1.90502\n", 221 | "INFO:tensorflow:loss = 0.0578344, step = 1701 (52.495 sec)\n", 222 | "INFO:tensorflow:global_step/sec: 1.89655\n", 223 | "INFO:tensorflow:loss = 0.0533696, step = 1801 (52.731 sec)\n", 224 | "INFO:tensorflow:global_step/sec: 1.89999\n", 225 | "INFO:tensorflow:loss = 0.0574138, step = 1901 (52.630 sec)\n", 226 | "INFO:tensorflow:Saving checkpoints for 2000 into /var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX/model.ckpt.\n", 227 | "INFO:tensorflow:Loss for final step: 0.0334561.\n" 228 | ] 229 | }, 230 | { 231 | "data": { 232 | "text/plain": [ 233 | "" 234 | ] 235 | }, 236 | "execution_count": 10, 237 | "metadata": {}, 238 | "output_type": "execute_result" 239 | } 240 | ], 241 | "source": [ 242 | "# Train model.\n", 243 | "classifier.train(input_fn=train_input_fn, steps=2000)" 244 | ] 245 | }, 246 | { 247 | "cell_type": "code", 248 | "execution_count": 11, 249 | "metadata": { 250 | "collapsed": true 251 | }, 252 | "outputs": [], 253 | "source": [ 254 | "# Define the test inputs\n", 255 | "test_input_fn = tf.estimator.inputs.numpy_input_fn(\n", 256 | " x={\"x\": np.array(X_test)},\n", 257 | " y=np.array(y_test),\n", 258 | " num_epochs=1,\n", 259 | " shuffle=False)" 260 | ] 261 | }, 262 | { 263 | "cell_type": "code", 264 | "execution_count": 12, 265 | "metadata": {}, 266 | "outputs": [ 267 | { 268 | "name": "stdout", 269 | "output_type": "stream", 270 | "text": [ 271 | "INFO:tensorflow:Restoring parameters from /var/folders/hb/6zr7m8351_9c0z1r1nljgnbh0000gn/T/tmpEdxRcX/model.ckpt-2000\n" 272 | ] 273 | } 274 | ], 275 | "source": [ 276 | "predictions = list(classifier.predict(input_fn=test_input_fn))\n", 277 | "predicted_classes = [p[\"classes\"] for p in predictions]\n", 278 | "\n", 279 | "predicted_classes = np.array(predicted_classes, dtype=np.int32).flatten()" 280 | ] 281 | }, 282 | { 283 | "cell_type": "code", 284 | "execution_count": 13, 285 | "metadata": {}, 286 | "outputs": [ 287 | { 288 | "name": "stdout", 289 | "output_type": "stream", 290 | "text": [ 291 | "0.706054168879\n", 292 | "accuracy: %70.6\n" 293 | ] 294 | } 295 | ], 296 | "source": [ 297 | "score = metrics.accuracy_score(y_test, predicted_classes)\n", 298 | "print(score)\n", 299 | "print(\"accuracy: %%%0.1f\" % (score * 100))" 300 | ] 301 | }, 302 | { 303 | "cell_type": "code", 304 | "execution_count": 14, 305 | "metadata": {}, 306 | "outputs": [ 307 | { 308 | "name": "stdout", 309 | "output_type": "stream", 310 | "text": [ 311 | "[ 4 12 0 ..., 18 12 15]\n" 312 | ] 313 | } 314 | ], 315 | "source": [ 316 | "print(predicted_classes)" 317 | ] 318 | }, 319 | { 320 | "cell_type": "code", 321 | "execution_count": 15, 322 | "metadata": { 323 | "collapsed": true 324 | }, 325 | "outputs": [], 326 | "source": [ 327 | "y_testl = []\n", 328 | "\n", 329 | "for a in y_test:\n", 330 | " y_testl.append(data_train.target_names[a])" 331 | ] 332 | }, 333 | { 334 | "cell_type": "code", 335 | "execution_count": 16, 336 | "metadata": { 337 | "collapsed": true 338 | }, 339 | "outputs": [], 340 | "source": [ 341 | "predicted_classesl = []\n", 342 | "\n", 343 | "for a in predicted_classes:\n", 344 | " predicted_classesl.append(data_train.target_names[a])" 345 | ] 346 | }, 347 | { 348 | "cell_type": "code", 349 | "execution_count": 17, 350 | "metadata": { 351 | "collapsed": true 352 | }, 353 | "outputs": [], 354 | "source": [ 355 | "from sklearn.metrics import confusion_matrix\n", 356 | "import itertools\n", 357 | "import matplotlib.pyplot as plt\n", 358 | "\n", 359 | "def plot_confusion_matrix(cm, classes,\n", 360 | " normalize=False,\n", 361 | " title='Confusion matrix',\n", 362 | " cmap=plt.cm.Blues):\n", 363 | " \"\"\"\n", 364 | " This function prints and plots the confusion matrix.\n", 365 | " Normalization can be applied by setting `normalize=True`.\n", 366 | " \"\"\"\n", 367 | " if normalize:\n", 368 | " cm = cm.astype('float') / cm.sum(axis=1)[:, np.newaxis]\n", 369 | " print(\"Normalized confusion matrix\")\n", 370 | " else:\n", 371 | " print('Confusion matrix, without normalization')\n", 372 | "\n", 373 | " print(cm)\n", 374 | "\n", 375 | " plt.imshow(cm, interpolation='nearest', cmap=cmap)\n", 376 | " plt.title(title)\n", 377 | " plt.colorbar()\n", 378 | " tick_marks = np.arange(len(classes))\n", 379 | " plt.xticks(tick_marks, classes, rotation=45)\n", 380 | " plt.yticks(tick_marks, classes)\n", 381 | "\n", 382 | " fmt = '.2f' if normalize else 'd'\n", 383 | " thresh = cm.max() / 2.\n", 384 | " for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n", 385 | " plt.text(j, i, format(cm[i, j], fmt),\n", 386 | " horizontalalignment=\"center\",\n", 387 | " color=\"white\" if cm[i, j] > thresh else \"black\")\n", 388 | "\n", 389 | " plt.tight_layout()\n", 390 | " plt.ylabel('True label')\n", 391 | " plt.xlabel('Predicted label')" 392 | ] 393 | }, 394 | { 395 | "cell_type": "code", 396 | "execution_count": 18, 397 | "metadata": { 398 | "collapsed": true 399 | }, 400 | "outputs": [], 401 | "source": [ 402 | "cnf_matrix = confusion_matrix(y_testl, predicted_classesl, labels=data_train.target_names)\n", 403 | "np.set_printoptions(precision=2)" 404 | ] 405 | }, 406 | { 407 | "cell_type": "code", 408 | "execution_count": 24, 409 | "metadata": {}, 410 | "outputs": [ 411 | { 412 | "name": "stdout", 413 | "output_type": "stream", 414 | "text": [ 415 | "Confusion matrix, without normalization\n", 416 | "[[188 0 2 0 0 6 1 0 0 1 3 1 1 4 2 10 0 2\n", 417 | " 34 64]\n", 418 | " [ 0 251 13 14 11 27 1 0 0 11 0 2 38 3 0 0 0 0\n", 419 | " 17 1]\n", 420 | " [ 0 26 208 21 2 13 3 0 0 7 7 0 80 0 1 0 0 0\n", 421 | " 26 0]\n", 422 | " [ 0 17 11 241 6 0 11 0 0 4 0 0 98 1 0 0 1 0\n", 423 | " 2 0]\n", 424 | " [ 0 27 0 57 242 0 4 3 0 26 0 0 21 2 0 0 3 0\n", 425 | " 0 0]\n", 426 | " [ 0 46 44 1 1 262 0 0 0 4 0 0 17 1 0 0 0 0\n", 427 | " 19 0]\n", 428 | " [ 0 1 2 32 6 0 283 24 0 3 4 0 25 6 0 0 1 0\n", 429 | " 3 0]\n", 430 | " [ 0 1 0 34 4 0 34 299 2 0 0 0 4 5 0 0 12 0\n", 431 | " 1 0]\n", 432 | " [ 0 1 0 1 11 0 1 15 337 3 1 0 1 2 1 0 24 0\n", 433 | " 0 0]\n", 434 | " [ 0 5 0 0 2 0 4 1 0 328 1 0 12 10 0 0 2 0\n", 435 | " 32 0]\n", 436 | " [ 0 0 2 0 0 0 11 1 0 4 340 1 14 12 0 0 0 0\n", 437 | " 14 0]\n", 438 | " [ 0 0 1 0 1 0 8 0 0 1 23 296 5 47 0 0 4 0\n", 439 | " 7 3]\n", 440 | " [ 0 11 6 37 4 1 18 7 0 10 6 0 265 9 0 0 2 0\n", 441 | " 17 0]\n", 442 | " [ 0 1 0 1 1 0 8 0 0 20 5 0 6 285 1 1 5 0\n", 443 | " 58 4]\n", 444 | " [ 0 4 0 0 1 1 0 1 0 58 0 0 2 14 287 1 8 0\n", 445 | " 17 0]\n", 446 | " [ 1 0 1 0 0 1 0 0 0 0 0 0 1 10 1 322 0 1\n", 447 | " 16 44]\n", 448 | " [ 0 0 0 1 1 0 1 3 0 7 0 4 0 68 6 0 260 1\n", 449 | " 10 2]\n", 450 | " [ 4 0 0 0 0 2 0 0 0 6 0 0 0 0 1 2 0 296\n", 451 | " 54 11]\n", 452 | " [ 1 0 0 0 0 4 2 2 0 16 0 2 0 54 3 0 42 0\n", 453 | " 177 7]\n", 454 | " [ 26 0 2 0 0 1 0 0 0 0 5 0 0 10 2 12 7 0\n", 455 | " 35 151]]\n" 456 | ] 457 | }, 458 | { 459 | "data": { 460 | "image/png": "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\nFu8NL2JmqSt/igF7vEqAWkDTsHE/mVltM4vify0GAPYBRQCcc78Be8yspTeuHzDXm6eCc+4LQs1V\nigGRv2eXiIiIiIhIsFxkZsvCHkPSmsjr9+0T4E7n3O/h41yoaf9Zn0hVi4AcwDn3i5kNBMaaWT5v\n8EPOufVm1gsY6V3/fwho6/UV8KZz7ipgGnCLmX1HqOJgUdii7yd0d4BfgGX874f8B8AbZnYHcB2h\nfgpeM7OCwI/AjUA08J536YABLznnItNDl4iIiIiISHDtyujSADPLQ6gS4H3n3Kfe4J/MrEzYpQE/\ne8MTgQphs5f3hqVLFQHZlHNuM1A37PVsID6N6ZZy8ll+CF23f5U3/gihziXSWsfHwMdpDF8A1Ek1\nOPU6AFqk+w+IiIiIiIjIKbzbw/8b+M4593zYqM8InYQd5v2dEDb8Nu9ObQnAb6frHwBUESAiIiIi\nIiLZQC7qIqA5oUuu15jZ196wBwhVAHxkZoOBLUBPb9wUQid6NwIHCbXQPi1VBIiIiIiIiIgEhHPu\nS0KXV6flijSmd8CtZ7IOdRYoIiIiIiIikouoIkBEREREREQkF9GlASIiIiIiIhJoBkTlok4Csppa\nBIiIiIiIiIjkIqoIEBEREREREclFVBEgIiIiIiIikouojwAREREREREJPHURcP6oRYCIiIiIiIhI\nLqKKABEREREREZFcRJcGiIiIiIiISOCZrg04b9QiQERERERERCQXUYsAETknFxXJ53eEUxxJSvY7\nwkmio6L9jnCKIG637WMG+x3hFCWa3ul3hJPsXviC3xFOERWlszMZiQ5gGTnn/I4gZ+FI0nG/I5wi\nf57gfcaJSMbUIkBEREREREQkF1GLABEREREREQk0M90+8HxSiwARERERERGRXEQVASIiIiIiIiK5\niCoCRERERERERHIR9REgIiIiIiIigRelTgLOG7UIEBEREREREclFVBEgIiIiIiIikouoIkBERERE\nREQkF1EfASIiIiIiIhJ46iHg/FGLAMlRZkyfRv3YmsTWqsZzzw7zOw433zSIimVL0bhBXb+jnKAy\nStutN99EtUpluCzu0hPDxn/6MU0b16d4oTysXL7Mx3Tabum57ZabqFGpDM3Cttuwpx4jtlpFWjVt\nTKumjZk5bUqWZsiXN4b579zN4rH3sfyj+3no5isBePXhPiweex9LPvgrY565kUIF8gLw7N3dWTTm\n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\ndQYREREREZGUDH2LfTmpLkVERERERESyEHUEiIiIiIiIiGQh6ggQERERERERyUI0R4CIiIiIiIj4\nnpl5HSHT0IgAERERERERkSxEHQEiIiIiIiIiWYg6AkRERERERESyEM0RICIiIiIiIr6nGQIuH40I\nEBEREREREclC1BEgIiIiIiIikoXo1ACRC8gWogFIIuIfZQrn9jqC/AV+/LmrEB++vu0b3dPrCOco\n0PQZryOc5/C8wV5HkL9g9+FTXkc4R1zCWa8jiA+oI0BERERERER8z4f9qhmWTg0QERERERERyULU\nESAiIiIiIiKShagjQERERERERCQL0RwBIiIiIiIi4msGhKBJAi4XjQgQERERERERyULUESAiIiIi\nIiKShagjQERERERERCQL0RwBIiIiIiIi4numKQIuG40IEBEREREREclC1BEgIiIiIiIikoWoI0Ay\njb/160PJYoWpVb2y11GSzZ41k6qVoqlUvizDXxrmdRxA9ZQR84DaLSPmAWXKiHnAf5n88vy/9299\niSoZwbW1qiaXHTp0iPZtbqBG5Wjat7mBw4cPe5bPq3rKERbKonfuZMUH97Dmo3sZdMf1AHz41C1s\nGHMfq0f9nbcfa09otsS33be1qMLKD+9h1ai/M//NvlSJKhK0rH57bIM/Ht/33dOP6FLFqF+7+jnl\n7771OnVrVKZeTDWeHfR40HMlJCTQrum19Lv95nPKBz/xMFVKhQc9j2Qu6giQTKNHr95MmjrT6xjJ\nEhISeKD/vUyaMoN1G7cwYdxYvt2yxetYqqcMlieJ2i1j5VGmjJnHr5n88vzv1qMXn0+afk7ZKyNe\npHGTZqzbvJXGTZrxyogXPUrnXT39HhdPywc+om6ft6jb5y1uqFuWOhWLM27ORqp1f42Y3m9yRY7s\n3NG2FgDb9xzhhvs+pHbvNxn60ULeeOSmoOT042Mb/PH47np7Lz77auo5ZYsWLmDGtCl8vXwNS1dv\n4N7+DwU916h33yCqXPlzyjauX8NvR44EPYs/WKb55wfqCJBMo0HDRhQsWNDrGMlWrVxJVFRZSpcp\nQ1hYGJ273MbUKZO8jqV6ymB5kqjdMlYeZcqYefyayS/P//oNGlEgVY7pUyfTrXtPALp178k0D+vK\ny3o6cSoOgOyh2QgNDcE5x6zl3yffv/rbWCLDrwRg+eadHDl+GoCV3+xKLk9vfnxsgz8e3/UaNKRA\n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\nREREREQf+V/ec8/z3hHTiQAAAABJRU5ErkJggg==\n", 461 | "text/plain": [ 462 | "" 463 | ] 464 | }, 465 | "metadata": {}, 466 | "output_type": "display_data" 467 | } 468 | ], 469 | "source": [ 470 | "plt.figure(figsize=(15,15))\n", 471 | "plot_confusion_matrix(cnf_matrix, classes=data_train.target_names,\n", 472 | " title='Confusion matrix, without normalization')\n", 473 | "plt.show()" 474 | ] 475 | }, 476 | { 477 | "cell_type": "code", 478 | "execution_count": 22, 479 | "metadata": { 480 | "collapsed": true 481 | }, 482 | "outputs": [], 483 | "source": [ 484 | "plt.savefig('books_read.png')" 485 | ] 486 | }, 487 | { 488 | "cell_type": "code", 489 | "execution_count": 25, 490 | "metadata": {}, 491 | "outputs": [ 492 | { 493 | "data": { 494 | "text/plain": [ 495 | "5318.0" 496 | ] 497 | }, 498 | "execution_count": 25, 499 | "metadata": {}, 500 | "output_type": "execute_result" 501 | } 502 | ], 503 | "source": [ 504 | "score*len(y_test)" 505 | ] 506 | }, 507 | { 508 | "cell_type": "code", 509 | "execution_count": 26, 510 | "metadata": {}, 511 | "outputs": [ 512 | { 513 | "data": { 514 | "text/plain": [ 515 | "2214.0" 516 | ] 517 | }, 518 | "execution_count": 26, 519 | "metadata": {}, 520 | "output_type": "execute_result" 521 | } 522 | ], 523 | "source": [ 524 | "(1-score)*len(y_test)" 525 | ] 526 | }, 527 | { 528 | "cell_type": "code", 529 | "execution_count": null, 530 | "metadata": { 531 | "collapsed": true 532 | }, 533 | "outputs": [], 534 | "source": [] 535 | } 536 | ], 537 | "metadata": { 538 | "kernelspec": { 539 | "display_name": "Python 2", 540 | "language": "python", 541 | "name": "python2" 542 | }, 543 | "language_info": { 544 | "codemirror_mode": { 545 | "name": "ipython", 546 | "version": 2 547 | }, 548 | "file_extension": ".py", 549 | "mimetype": "text/x-python", 550 | "name": "python", 551 | "nbconvert_exporter": "python", 552 | "pygments_lexer": "ipython2", 553 | "version": "2.7.13" 554 | } 555 | }, 556 | "nbformat": 4, 557 | "nbformat_minor": 2 558 | } 559 | --------------------------------------------------------------------------------