import os
from mnist import model
import tensorflow as tf

from tensorflow.examples.tutorials.mnist import input_data

data = input_data.read_data_sets("data/dataset/", one_hot=True)

# model
with tf.variable_scope("convolutional"):
    x = tf.placeholder(tf.float32, [None, 784])
    keep_prob = tf.placeholder(tf.float32)
    y, variables = model.convolutional(x, keep_prob)

# train
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

saver = tf.train.Saver(variables)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for i in range(20000):
        batch = data.train.next_batch(50)
        if i % 100 == 0:
            train_accuracy = accuracy.eval(feed_dict={x: batch[0], y_: batch[1], keep_prob: 1.0})
            print("step %d, training accuracy %g" % (i, train_accuracy))
        sess.run(train_step, feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

    print(sess.run(accuracy, feed_dict={x: data.test.images, y_: data.test.labels, keep_prob: 1.0}))

    path = saver.save(
        sess, os.path.join(os.path.dirname(__file__), 'data', 'convolutional.ckpt'),
        write_meta_graph=False, write_state=False)
    print("Saved:", path)

[(7, 'tensorflow.examples.tutorials.mnist.input_data.read_data_sets', 'input_data.read_data_sets', False, 'from tensorflow.examples.tutorials.mnist import input_data\n'), (16, 'tensorflow.placeholder', 'tf.placeholder', True, 'import tensorflow as tf\n'), (22, 'tensorflow.train.Saver', 'tf.train.Saver', True, 'import tensorflow as tf\n'), (10, 'tensorflow.variable_scope', 'tf.variable_scope', True, 'import tensorflow as tf\n'), (11, 'tensorflow.placeholder', 'tf.placeholder', True, 'import tensorflow as tf\n'), (12, 'tensorflow.placeholder', 'tf.placeholder', True, 'import tensorflow as tf\n'), (13, 'mnist.model.convolutional', 'model.convolutional', False, 'from mnist import model\n'), (19, 'tensorflow.argmax', 'tf.argmax', True, 'import tensorflow as tf\n'), (19, 'tensorflow.argmax', 'tf.argmax', True, 'import tensorflow as tf\n'), (20, 'tensorflow.cast', 'tf.cast', True, 'import tensorflow as tf\n'), (23, 'tensorflow.Session', 'tf.Session', True, 'import tensorflow as tf\n'), (18, 'tensorflow.train.AdamOptimizer', 'tf.train.AdamOptimizer', True, 'import tensorflow as tf\n'), (24, 'tensorflow.global_variables_initializer', 'tf.global_variables_initializer', True, 'import tensorflow as tf\n'), (17, 'tensorflow.log', 'tf.log', True, 'import tensorflow as tf\n'), (35, 'os.path.dirname', 'os.path.dirname', False, 'import os\n')]