diff --git a/official_examples/Using_MoXing_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist.py b/official_examples/Using_MoXing_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist.py index 07942289e4d1ef48f5f50b7fc19c8d7d87a8cdf3..43fffbee36373b70f96321708b71c13969abbb2e 100644 --- a/official_examples/Using_MoXing_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist.py +++ b/official_examples/Using_MoXing_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist.py @@ -23,16 +23,17 @@ import tensorflow as tf import moxing.tensorflow as mox import os -tf.flags.DEFINE_string('data_url', None, 'Dir of dataset') -tf.flags.DEFINE_string('train_url', None, 'Train Url') +tf.flags.DEFINE_string('data_url', None, 'dataset directory.') +tf.flags.DEFINE_string('train_url', None, 'saved model directory.') +tf.flags.DEFINE_integer('batch_size', 128, 'number of samples trained in each step.') flags = tf.flags.FLAGS def check_dataset(): work_directory = flags.data_url - filenames = ['train-images-idx3-ubyte.gz', 'train-labels-idx1-ubyte.gz', 't10k-images-idx3-ubyte.gz', - 't10k-labels-idx1-ubyte.gz'] + filenames = ['train-images-idx3-ubyte.gz', 'train-labels-idx1-ubyte.gz', + 't10k-images-idx3-ubyte.gz', 't10k-labels-idx1-ubyte.gz'] for filename in filenames: filepath = os.path.join(work_directory, filename) @@ -44,43 +45,45 @@ def main(*args, **kwargs): check_dataset() mnist = input_data.read_data_sets(flags.data_url, one_hot=True) - # define the input dataset, return image and label def input_fn(run_mode, **kwargs): def gen(): while True: - yield mnist.train.next_batch(50) + yield mnist.train.next_batch(flags.batch_size) ds = tf.data.Dataset.from_generator( gen, output_types=(tf.float32, tf.int64), output_shapes=(tf.TensorShape([None, 784]), tf.TensorShape([None, 10]))) return ds.make_one_shot_iterator().get_next() - # define the model for training or evaling. def model_fn(inputs, run_mode, **kwargs): x, y_ = inputs - W = tf.get_variable(name='W', initializer=tf.zeros([784, 10])) - b = tf.get_variable(name='b', initializer=tf.zeros([10])) - y = tf.matmul(x, W) + b + + y = tf.keras.layers.Dense(128, activation='relu')(x) + y = tf.keras.layers.Dense(10)(y) cross_entropy = tf.reduce_mean( tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) - export_spec = mox.ExportSpec(inputs_dict={'images': x}, outputs_dict={'logits': y}, version='model') - return mox.ModelSpec(loss=cross_entropy, log_info={'loss': cross_entropy, 'accuracy': accuracy}, - export_spec=export_spec) + export_spec = mox.ExportSpec(inputs_dict={'images': x}, + outputs_dict={'logits': y}, + version='model') + return mox.ModelSpec(loss=cross_entropy, + log_info={'loss': cross_entropy, 'accuracy': accuracy}, + export_spec=export_spec) mox.run(input_fn=input_fn, model_fn=model_fn, - optimizer_fn=mox.get_optimizer_fn('sgd', learning_rate=0.01), + optimizer_fn=mox.get_optimizer_fn('adam', learning_rate=0.01), run_mode=mox.ModeKeys.TRAIN, - batch_size=50, + batch_size=flags.batch_size, auto_batch=False, log_dir=flags.train_url, max_number_of_steps=1000, log_every_n_steps=10, export_model=mox.ExportKeys.TF_SERVING) + if __name__ == '__main__': tf.app.run(main=main) diff --git a/official_examples/Using_TensorFlow_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist_tf.py b/official_examples/Using_TensorFlow_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist_tf.py index bb2ea3bb8985ac9f2021565bb87ddd21cf1f0a0c..b8fb2120146f594de24b6221b63e4f03cd311eb1 100644 --- a/official_examples/Using_TensorFlow_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist_tf.py +++ b/official_examples/Using_TensorFlow_to_Create_a_MNIST_Dataset_Recognition_Application/codes/train_mnist_tf.py @@ -10,74 +10,73 @@ from tensorflow.examples.tutorials.mnist import input_data import moxing as mox tf.flags.DEFINE_integer('max_steps', 1000, 'number of training iterations.') -tf.flags.DEFINE_string('data_url', '/home/jnn/nfs/mnist', 'dataset directory.') -tf.flags.DEFINE_string('train_url', '/home/jnn/temp/delete', 'saved model directory.') +tf.flags.DEFINE_integer('batch_size', 128, 'number of samples trained in each step.') +tf.flags.DEFINE_string('data_url', None, 'dataset directory.') +tf.flags.DEFINE_string('train_url', None, 'saved model directory.') FLAGS = tf.flags.FLAGS def main(*args): - mox.file.copy_parallel(FLAGS.data_url, '/cache/data_url') + cache_data_dir = '/cache/data_url' + cache_train_url = '/cache/train_url' + mox.file.copy_parallel(FLAGS.data_url, cache_data_dir) # Train model print('Training model...') - mnist = input_data.read_data_sets('/cache/data_url', one_hot=True) - sess = tf.InteractiveSession() + mnist = input_data.read_data_sets(cache_data_dir, one_hot=True) serialized_tf_example = tf.placeholder(tf.string, name='tf_example') feature_configs = {'x': tf.FixedLenFeature(shape=[784], dtype=tf.float32),} tf_example = tf.parse_example(serialized_tf_example, feature_configs) x = tf.identity(tf_example['x'], name='x') y_ = tf.placeholder('float', shape=[None, 10]) - w = tf.Variable(tf.zeros([784, 10])) - b = tf.Variable(tf.zeros([10])) - sess.run(tf.global_variables_initializer()) - y = tf.nn.softmax(tf.matmul(x, w) + b, name='y') - cross_entropy = -tf.reduce_sum(y_ * tf.log(y)) + y = tf.keras.layers.Dense(128, activation='relu')(x) + y = tf.keras.layers.Dense(10)(y) + cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=y, labels=y_)) tf.summary.scalar('cross_entropy', cross_entropy) - train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) + train_step = tf.train.AdamOptimizer(0.01).minimize(cross_entropy) correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) tf.summary.scalar('accuracy', accuracy) merged = tf.summary.merge_all() - test_writer = tf.summary.FileWriter('/cache/train_url', flush_secs=1) - - for step in range(FLAGS.max_steps): - batch = mnist.train.next_batch(50) - train_step.run(feed_dict={x: batch[0], y_: batch[1]}) - if step % 10 == 0: - summary, acc = sess.run([merged, accuracy], feed_dict={x: mnist.test.images, y_: mnist.test.labels}) - test_writer.add_summary(summary, step) - print('training accuracy is:', acc) - print('Done training!') - - builder = tf.saved_model.builder.SavedModelBuilder(os.path.join('/cache/train_url', 'model')) - - tensor_info_x = tf.saved_model.utils.build_tensor_info(x) - tensor_info_y = tf.saved_model.utils.build_tensor_info(y) - - prediction_signature = ( - tf.saved_model.signature_def_utils.build_signature_def( - inputs={'images': tensor_info_x}, - outputs={'scores': tensor_info_y}, - method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)) - - builder.add_meta_graph_and_variables( - sess, [tf.saved_model.tag_constants.SERVING], - signature_def_map={ - 'predict_images': - prediction_signature, - }, - main_op=tf.tables_initializer(), - strip_default_attrs=True) - - builder.save() - - print('Done exporting!') - - mox.file.copy_parallel('/cache/train_url', FLAGS.train_url) + test_writer = tf.summary.FileWriter(cache_train_url, flush_secs=1) + + with tf.Session() as sess: + sess.run(tf.global_variables_initializer()) + for step in range(FLAGS.max_steps): + batch = mnist.train.next_batch(FLAGS.batch_size) + train_step.run(feed_dict={x: batch[0], y_: batch[1]}) + if step % 10 == 0: + summary, acc = sess.run([merged, accuracy], + feed_dict={x: mnist.test.images, y_: mnist.test.labels}) + test_writer.add_summary(summary, step) + print('training accuracy is:', acc) + print('Done training!') + + builder = tf.saved_model.builder.SavedModelBuilder(os.path.join(cache_train_url, 'model')) + tensor_info_x = tf.saved_model.utils.build_tensor_info(x) + tensor_info_y = tf.saved_model.utils.build_tensor_info(y) + + prediction_signature = ( + tf.saved_model.signature_def_utils.build_signature_def( + inputs={'images': tensor_info_x}, + outputs={'scores': tensor_info_y}, + method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME)) + builder.add_meta_graph_and_variables( + sess, [tf.saved_model.tag_constants.SERVING], + signature_def_map={ + 'predict_images': + prediction_signature, + }, + main_op=tf.tables_initializer(), + strip_default_attrs=True) + builder.save() + print('Done exporting!') + + mox.file.copy_parallel(cache_train_url, FLAGS.train_url) if __name__ == '__main__':