TF-MNIST开发案例

本案例所使用的模型和代码基于Tensorflow 教程MNIST案例(https://www.tensorflow.org/tutorials/mnist/beginners/),您可以在https://github.com/ucloud/uai-sdk/tree/master/examples/tensorflow/train/mnist_summary_1.1下面下载完整的代码

准备工作

请根据 开发指南>Tensorflow开发指南>Tensorflow 本地安装部署开发环境本地环境完成所有安装步骤,即完成了基本环境的部署
https://github.com/ucloud/uai-sdk/tree/master/examples/tensorflow/train/mnist_summary_1.1下载完整的案例,包括:

  • code/mnist_summary.py 训练代码
  • data/ 测试数据集

编写MNIST案例

本案例使用的MNIST模型的训练代码来自Tensorflow的MNIST案例的mnist_summary.py, 并做如下修改

新增import uai-train的uflag.py包

添加代码引入uflag.py

from uaitrain.arch.tensorflow import uflag 

案例中修改代码如下(L32):

from tensorflow.examples.tutorials.mnist import input_data

from uaitrain.arch.tensorflow import uflag

tf.app.flags.DEFINE_float('--learning_rate', 0.001, 'Initial learning rate')
tf.app.flags.DEFINE_float('--dropout', 0.9, 'Keep probability for training dropout.')

使用 data_dir 作为输入路径

通过使用 FLAGS.data_dir 指定输入路径

mnist = input_data.read_data_sets(FLAGS.data_dir,
                                    one_hot=True)

案例中修改代码如下(L44):

def train():
  # Import data
  mnist = input_data.read_data_sets(FLAGS.data_dir,
                                    one_hot=True)

  sess = tf.InteractiveSession()

使用 output_dir 作为输出路径

通过使用 FLAGS.output_dir 指定输出路径

save_path = saver.save(sess, FLAGS.output_dir + "/model.ckpt")

案例中修改代码如下(L180):

  save_path = saver.save(sess, FLAGS.output_dir + "/model.ckpt")
  print("Model saved in file: %s" % save_path)
  train_writer.close()
  test_writer.close()

使用 log_dir 作为TensorBoard输出路径

通过使用 FLAGS.log_dir 指定TensorBoard Summary 输出路径

  train_writer = tf.summary.FileWriter(FLAGS.log_dir + '/train', sess.graph)
  test_writer = tf.summary.FileWriter(FLAGS.log_dir + '/test')

案例中修改代码如下(L144, L145)

 # Merge all the summaries and write them out to /tmp/tensorflow/mnist/logs/mnist_with_summaries (by default)
  merged = tf.summary.merge_all()
  train_writer = tf.summary.FileWriter(FLAGS.log_dir + '/train', sess.graph)
  test_writer = tf.summary.FileWriter(FLAGS.log_dir + '/test')
  tf.global_variables_initializer().run()

使用 max_step 作为终止条件

通过使用 FLAGS.max_step 最为终止条件

for i in range(FLAGS.max_step):

案例中修改代码如下(L160)

saver = tf.train.Saver()
  for i in range(FLAGS.max_step):
    if i % 10 == 0:  # Record summaries and test-set accuracy
      summary, acc = sess.run([merged, accuracy], feed_dict=feed_dict(False))
      test_writer.add_summary(summary, i)
      print('Accuracy at step %s: %s' % (i, acc))

测试MNIST案例

确保本地已经安装TensorFlow 1.1,并且将examples/tensorflow/train/mnist_summary_1.1/data 下的测试数据放入 /data/data目录下,并确定/data/output 目录存在
执行以下代码执行训练任务

python mnist_summary.py --max_step=100 --work_dir=/data --data_dir=/data/data --output_dir=/data/output --log_dir=/data/output/

使用Docker镜像进行测试

因为UAI Train 平台使用Docker运行训练,因此可以使用Docker对训练代码进行测试。
UAI Train平台提供开源的Docker 打包工具,打包方法见打包镜像
打包完成后打包工具会自动生成GPU的镜像和CPU的镜像,命名如下:

  • CPU镜像 uhub.ucloud.cn//-cpu:
  • GPU镜像 uhub.ucloud.cn//:

使用CPU Docker 测试

打包工具会自动生成CPU Docker的运行代码,可以在标准输出uaitrain_cmd.txt中找到命令(CMD for CPU local test:
直接执行命令即可

使用GPU Docker 测试

打包工具会自动生成GPU Docker的运行代码,可以在标准输出uaitrain_cmd.txt中找到命令(CMD for GPU local test:
直接执行命令即可