In [5]:
from sklearn import cross_validation
from sklearn import datasets
from sklearn import metrics
import tensorflow as tf

layers = tf.contrib.layers
learn = tf.contrib.learn

In [6]:
def my_model(features, target):
    """DNN with three hidden layers, and dropout of 0.1 probability"""
    target = tf.one_hot(target, 3,1,0)
    normalizer_fn = layers.dropout
    normalizer_params = {'keep_prob': 0.9}
    
    features = layers.stack(
        features,
        layers.fully_connected,
        [10, 20, 10],
        normalizer_fn=normalizer_fn,
        normalizer_params=normalizer_params)
    
    logits = layers.fully_connected(features, 3, activation_fn=None)
    loss = tf.losses.softmax_cross_entropy(target, logits)

    train_op = tf.contrib.layers.optimize_loss(
        loss,
        tf.contrib.framework.get_global_step(),
        optimizer='Adagrad',
        learning_rate=0.1)

    return ({'class': tf.argmax(logits, 1), 'prob':tf.nn.softmax(logits)}, loss, train_op)

In [7]:
iris = datasets.load_iris()
x_train, x_test, y_train, y_test = cross_validation.train_test_split(
    iris.data, iris.target, test_size=0.2, random_state=42)


classifier = learn.Estimator(model_fn=my_model)
classifier.fit(x_train, y_train, steps=1000)

y_predicted = [
    p['class'] for p in classifier.predict(x_test, as_iterable=True)]
score = metrics.accuracy_score(y_test, y_predicted)

print('Accuracy:{0:f}'.format(score))


WARNING:tensorflow:Using temporary folder as model directory: /tmp/tmpmkm2_jcx
INFO:tensorflow:Using default config.
INFO:tensorflow:Using config: {'_save_checkpoints_secs': 600, '_task_id': 0, '_keep_checkpoint_max': 5, '_evaluation_master': '', '_is_chief': True, '_save_checkpoints_steps': None, '_task_type': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x7f93ec244ac8>, '_num_ps_replicas': 0, '_save_summary_steps': 100, '_keep_checkpoint_every_n_hours': 10000, '_tf_random_seed': None, '_tf_config': gpu_options {
  per_process_gpu_memory_fraction: 1.0
}
, '_master': '', '_environment': 'local'}
WARNING:tensorflow:From <ipython-input-7-a2345156ddc1>:7: calling BaseEstimator.fit (from tensorflow.contrib.learn.python.learn.estimators.estimator) with x is deprecated and will be removed after 2016-12-01.
Instructions for updating:
Estimator is decoupled from Scikit Learn interface by moving into
separate class SKCompat. Arguments x, y and batch_size are only
available in the SKCompat class, Estimator will only accept input_fn.
Example conversion:
  est = Estimator(...) -> est = SKCompat(Estimator(...))
WARNING:tensorflow:From <ipython-input-7-a2345156ddc1>:7: calling BaseEstimator.fit (from tensorflow.contrib.learn.python.learn.estimators.estimator) with y is deprecated and will be removed after 2016-12-01.
Instructions for updating:
Estimator is decoupled from Scikit Learn interface by moving into
separate class SKCompat. Arguments x, y and batch_size are only
available in the SKCompat class, Estimator will only accept input_fn.
Example conversion:
  est = Estimator(...) -> est = SKCompat(Estimator(...))
WARNING:tensorflow:float64 is not supported by many models, consider casting to float32.
/usr/local/lib/python3.5/dist-packages/tensorflow/python/util/deprecation.py:247: FutureWarning: comparison to `None` will result in an elementwise object comparison in the future.
  equality = a == b
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Saving checkpoints for 1 into /tmp/tmpmkm2_jcx/model.ckpt.
INFO:tensorflow:step = 1, loss = 1.4769872427
INFO:tensorflow:global_step/sec: 158.895
INFO:tensorflow:step = 101, loss = 0.274609029293
INFO:tensorflow:global_step/sec: 123.978
INFO:tensorflow:step = 201, loss = 0.189277201891
INFO:tensorflow:global_step/sec: 115.37
INFO:tensorflow:step = 301, loss = 0.125974282622
INFO:tensorflow:global_step/sec: 156.789
INFO:tensorflow:step = 401, loss = 0.125771015882
INFO:tensorflow:global_step/sec: 161.632
INFO:tensorflow:step = 501, loss = 0.123798057437
INFO:tensorflow:global_step/sec: 126.81
INFO:tensorflow:step = 601, loss = 0.142683699727
INFO:tensorflow:global_step/sec: 125.427
INFO:tensorflow:step = 701, loss = 0.104691363871
INFO:tensorflow:global_step/sec: 162.436
INFO:tensorflow:step = 801, loss = 0.111786730587
INFO:tensorflow:global_step/sec: 139.099
INFO:tensorflow:step = 901, loss = 0.0908519849181
INFO:tensorflow:Saving checkpoints for 1000 into /tmp/tmpmkm2_jcx/model.ckpt.
INFO:tensorflow:Loss for final step: 0.089936748147.
WARNING:tensorflow:From <ipython-input-7-a2345156ddc1>:10: calling BaseEstimator.predict (from tensorflow.contrib.learn.python.learn.estimators.estimator) with x is deprecated and will be removed after 2016-12-01.
Instructions for updating:
Estimator is decoupled from Scikit Learn interface by moving into
separate class SKCompat. Arguments x, y and batch_size are only
available in the SKCompat class, Estimator will only accept input_fn.
Example conversion:
  est = Estimator(...) -> est = SKCompat(Estimator(...))
WARNING:tensorflow:float64 is not supported by many models, consider casting to float32.
Accuracy:0.966667

In [ ]: