In [1]:
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

import os
from six.moves.urllib.request import urlopen

import tensorflow as tf
import numpy as np


/home/voyageth/develop/anaconda3/envs/kaggle/lib/python3.6/importlib/_bootstrap.py:205: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
  return f(*args, **kwds)

In [4]:
IRIS_TRAINING = "input/iris_training.csv"
IRIS_TRAINING_URL = "http://download.tensorflow.org/data/iris_training.csv"

IRIS_TEST = "input/iris_test.csv"
IRIS_TEST_URL = "http://download.tensorflow.org/data/iris_test.csv"

In [6]:
if not os.path.exists(IRIS_TRAINING):
    raw = urlopen(IRIS_TRAINING_URL).read()
    with open(IRIS_TRAINING, 'wb') as f:
        f.write(raw)

if not os.path.exists(IRIS_TEST):
    raw = urlopen(IRIS_TEST_URL).read()
    with open(IRIS_TEST, 'wb') as f:
        f.write(raw)

In [8]:
training_set = tf.contrib.learn.datasets.base.load_csv_with_header(
    filename=IRIS_TRAINING,
    target_dtype=np.int,
    features_dtype=np.float32
)

test_set = tf.contrib.learn.datasets.base.load_csv_with_header(
    filename=IRIS_TEST,
    target_dtype=np.int,
    features_dtype=np.float32
)

In [9]:
feature_columns = [tf.feature_column.numeric_column('x', shape=[4])]

classifier = tf.estimator.DNNClassifier(feature_columns=feature_columns,
                                       hidden_units=[10,20,10],
                                       n_classes=3,
                                       model_dir='output/iris_model')


INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_model_dir': 'output/iris_model', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_service': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x7fd31edb3588>, '_task_type': 'worker', '_task_id': 0, '_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

In [10]:
train_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'x':np.array(training_set.data)},
    y=np.array(training_set.target),
    num_epochs=None,
    shuffle=True
)

In [11]:
classifier.train(input_fn=train_input_fn, steps=2000)


INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Saving checkpoints for 1 into output/iris_model/model.ckpt.
INFO:tensorflow:loss = 201.708, step = 1
INFO:tensorflow:global_step/sec: 568.342
INFO:tensorflow:loss = 11.9646, step = 101 (0.177 sec)
INFO:tensorflow:global_step/sec: 621.736
INFO:tensorflow:loss = 11.1204, step = 201 (0.161 sec)
INFO:tensorflow:global_step/sec: 626.392
INFO:tensorflow:loss = 8.63682, step = 301 (0.160 sec)
INFO:tensorflow:global_step/sec: 634.321
INFO:tensorflow:loss = 13.6762, step = 401 (0.158 sec)
INFO:tensorflow:global_step/sec: 636.269
INFO:tensorflow:loss = 8.18977, step = 501 (0.157 sec)
INFO:tensorflow:global_step/sec: 610.415
INFO:tensorflow:loss = 6.46853, step = 601 (0.164 sec)
INFO:tensorflow:global_step/sec: 636.763
INFO:tensorflow:loss = 7.06398, step = 701 (0.157 sec)
INFO:tensorflow:global_step/sec: 618.046
INFO:tensorflow:loss = 8.74011, step = 801 (0.162 sec)
INFO:tensorflow:global_step/sec: 638.735
INFO:tensorflow:loss = 3.6415, step = 901 (0.157 sec)
INFO:tensorflow:global_step/sec: 623.157
INFO:tensorflow:loss = 4.38921, step = 1001 (0.161 sec)
INFO:tensorflow:global_step/sec: 628.299
INFO:tensorflow:loss = 14.8457, step = 1101 (0.159 sec)
INFO:tensorflow:global_step/sec: 623.766
INFO:tensorflow:loss = 8.31737, step = 1201 (0.160 sec)
INFO:tensorflow:global_step/sec: 625.095
INFO:tensorflow:loss = 6.52913, step = 1301 (0.160 sec)
INFO:tensorflow:global_step/sec: 620.665
INFO:tensorflow:loss = 7.56102, step = 1401 (0.162 sec)
INFO:tensorflow:global_step/sec: 609.706
INFO:tensorflow:loss = 8.57825, step = 1501 (0.164 sec)
INFO:tensorflow:global_step/sec: 557.549
INFO:tensorflow:loss = 11.8474, step = 1601 (0.180 sec)
INFO:tensorflow:global_step/sec: 559.517
INFO:tensorflow:loss = 4.58696, step = 1701 (0.178 sec)
INFO:tensorflow:global_step/sec: 617.949
INFO:tensorflow:loss = 9.0297, step = 1801 (0.162 sec)
INFO:tensorflow:global_step/sec: 530.17
INFO:tensorflow:loss = 5.77447, step = 1901 (0.189 sec)
INFO:tensorflow:Saving checkpoints for 2000 into output/iris_model/model.ckpt.
INFO:tensorflow:Loss for final step: 7.968.
Out[11]:
<tensorflow.python.estimator.canned.dnn.DNNClassifier at 0x7fd31edb30b8>

In [12]:
classifier.train(input_fn=train_input_fn, steps=2000)
classifier.train(input_fn=train_input_fn, steps=2000)


INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Restoring parameters from output/iris_model/model.ckpt-2000
INFO:tensorflow:Saving checkpoints for 2001 into output/iris_model/model.ckpt.
INFO:tensorflow:loss = 8.34046, step = 2001
INFO:tensorflow:global_step/sec: 552.061
INFO:tensorflow:loss = 8.03179, step = 2101 (0.182 sec)
INFO:tensorflow:global_step/sec: 609.044
INFO:tensorflow:loss = 11.062, step = 2201 (0.164 sec)
INFO:tensorflow:global_step/sec: 615.819
INFO:tensorflow:loss = 6.59396, step = 2301 (0.162 sec)
INFO:tensorflow:global_step/sec: 644.025
INFO:tensorflow:loss = 2.78558, step = 2401 (0.155 sec)
INFO:tensorflow:global_step/sec: 617.206
INFO:tensorflow:loss = 2.65614, step = 2501 (0.162 sec)
INFO:tensorflow:global_step/sec: 620.459
INFO:tensorflow:loss = 3.418, step = 2601 (0.161 sec)
INFO:tensorflow:global_step/sec: 627.872
INFO:tensorflow:loss = 7.83943, step = 2701 (0.159 sec)
INFO:tensorflow:global_step/sec: 629.243
INFO:tensorflow:loss = 6.91227, step = 2801 (0.159 sec)
INFO:tensorflow:global_step/sec: 621.866
INFO:tensorflow:loss = 3.2543, step = 2901 (0.161 sec)
INFO:tensorflow:global_step/sec: 619.796
INFO:tensorflow:loss = 4.81046, step = 3001 (0.161 sec)
INFO:tensorflow:global_step/sec: 650.664
INFO:tensorflow:loss = 4.82611, step = 3101 (0.154 sec)
INFO:tensorflow:global_step/sec: 625.555
INFO:tensorflow:loss = 3.31075, step = 3201 (0.161 sec)
INFO:tensorflow:global_step/sec: 587.385
INFO:tensorflow:loss = 10.0266, step = 3301 (0.169 sec)
INFO:tensorflow:global_step/sec: 559.29
INFO:tensorflow:loss = 3.61362, step = 3401 (0.179 sec)
INFO:tensorflow:global_step/sec: 515.513
INFO:tensorflow:loss = 5.09372, step = 3501 (0.194 sec)
INFO:tensorflow:global_step/sec: 609.356
INFO:tensorflow:loss = 2.56542, step = 3601 (0.164 sec)
INFO:tensorflow:global_step/sec: 525.503
INFO:tensorflow:loss = 1.28138, step = 3701 (0.190 sec)
INFO:tensorflow:global_step/sec: 539.107
INFO:tensorflow:loss = 5.40264, step = 3801 (0.185 sec)
INFO:tensorflow:global_step/sec: 629.157
INFO:tensorflow:loss = 1.95086, step = 3901 (0.159 sec)
INFO:tensorflow:Saving checkpoints for 4000 into output/iris_model/model.ckpt.
INFO:tensorflow:Loss for final step: 8.0068.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Restoring parameters from output/iris_model/model.ckpt-4000
INFO:tensorflow:Saving checkpoints for 4001 into output/iris_model/model.ckpt.
INFO:tensorflow:loss = 7.27892, step = 4001
INFO:tensorflow:global_step/sec: 556.975
INFO:tensorflow:loss = 6.98265, step = 4101 (0.180 sec)
INFO:tensorflow:global_step/sec: 552.373
INFO:tensorflow:loss = 4.3331, step = 4201 (0.181 sec)
INFO:tensorflow:global_step/sec: 553.78
INFO:tensorflow:loss = 1.88018, step = 4301 (0.182 sec)
INFO:tensorflow:global_step/sec: 593.38
INFO:tensorflow:loss = 3.79877, step = 4401 (0.168 sec)
INFO:tensorflow:global_step/sec: 521.186
INFO:tensorflow:loss = 5.238, step = 4501 (0.191 sec)
INFO:tensorflow:global_step/sec: 601.941
INFO:tensorflow:loss = 9.00912, step = 4601 (0.166 sec)
INFO:tensorflow:global_step/sec: 636.198
INFO:tensorflow:loss = 5.76758, step = 4701 (0.157 sec)
INFO:tensorflow:global_step/sec: 621.157
INFO:tensorflow:loss = 6.4509, step = 4801 (0.161 sec)
INFO:tensorflow:global_step/sec: 579.305
INFO:tensorflow:loss = 6.2815, step = 4901 (0.172 sec)
INFO:tensorflow:global_step/sec: 622.907
INFO:tensorflow:loss = 1.33945, step = 5001 (0.161 sec)
INFO:tensorflow:global_step/sec: 624.599
INFO:tensorflow:loss = 4.28276, step = 5101 (0.160 sec)
INFO:tensorflow:global_step/sec: 617.218
INFO:tensorflow:loss = 5.48439, step = 5201 (0.162 sec)
INFO:tensorflow:global_step/sec: 618.853
INFO:tensorflow:loss = 4.71123, step = 5301 (0.161 sec)
INFO:tensorflow:global_step/sec: 638.958
INFO:tensorflow:loss = 5.31638, step = 5401 (0.157 sec)
INFO:tensorflow:global_step/sec: 626.513
INFO:tensorflow:loss = 9.75672, step = 5501 (0.160 sec)
INFO:tensorflow:global_step/sec: 622.932
INFO:tensorflow:loss = 5.307, step = 5601 (0.162 sec)
INFO:tensorflow:global_step/sec: 622.562
INFO:tensorflow:loss = 3.47727, step = 5701 (0.160 sec)
INFO:tensorflow:global_step/sec: 629.161
INFO:tensorflow:loss = 5.15855, step = 5801 (0.159 sec)
INFO:tensorflow:global_step/sec: 603.692
INFO:tensorflow:loss = 4.77999, step = 5901 (0.166 sec)
INFO:tensorflow:Saving checkpoints for 6000 into output/iris_model/model.ckpt.
INFO:tensorflow:Loss for final step: 5.07634.
Out[12]:
<tensorflow.python.estimator.canned.dnn.DNNClassifier at 0x7fd31edb30b8>

In [14]:
test_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'x':np.array(test_set.data)},
    y=np.array(test_set.target),
    num_epochs=1,
    shuffle=False
)

accuracy_score = classifier.evaluate(input_fn=test_input_fn)['accuracy']
print('\nTest Accuracy: {0:f}\n'.format(accuracy_score))


INFO:tensorflow:Starting evaluation at 2017-11-08-23:35:25
INFO:tensorflow:Restoring parameters from output/iris_model/model.ckpt-6000
INFO:tensorflow:Finished evaluation at 2017-11-08-23:35:25
INFO:tensorflow:Saving dict for global step 6000: accuracy = 0.966667, average_loss = 0.0655332, global_step = 6000, loss = 1.966

Test Accuracy: 0.966667


In [18]:
new_samples = np.array(
    [[6.4,3.2,4.5,1.5],
    [5.8,3.1,5.0,1.7]], 
    dtype=np.float32
)
predict_input_fn = tf.estimator.inputs.numpy_input_fn(
    x={'x':new_samples},
    num_epochs=1,
    shuffle=False
)

predictions = list(classifier.predict(input_fn=predict_input_fn))
predicted_classes = [str(p['classes']) for p in predictions]

print('New Samples, Class Predictions: {}\n'.format(predicted_classes))


INFO:tensorflow:Restoring parameters from output/iris_model/model.ckpt-6000
New Samples, Class Predictions: ["[b'1']", "[b'2']"]


In [ ]: