程序主要包括两部分:
程序的保存
程序变量的重载
第一部分:程序的保存
import tensorflow as tf import numpy as np import os from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) train_x, train_y, test_x, test_y = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels X = tf.placeholder("float", [None, 784]) Y = tf.placeholder("float", [None, 10]) def init_weights(shapes): return tf.Variable(tf.random_normal(shapes, stddev=0.01)) def model(X, w_h, w_h2, w_ho, p_keep_input, p_keep_hidden): X = tf.nn.dropout(X, p_keep_input) h = tf.nn.relu(tf.matmul(X, w_h)) h = tf.nn.dropout(h, p_keep_hidden) h2 = tf.nn.relu(tf.matmul(h, w_h2)) h2 = tf.nn.dropout(h2, p_keep_hidden) return tf.matmul(h2, w_ho) w_h = init_weights([784, 625]) w_h2 = init_weights([625, 625]) w_ho = init_weights([625, 10]) p_keep_input = tf.placeholder("float") p_keep_hidden = tf.placeholder("float") py_x = model(X, w_h, w_h2, w_ho, p_keep_input, p_keep_hidden) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=py_x, labels=Y)) train_op = tf.train.RMSPropOptimizer(0.01, 0.9).minimize(cost) predict_op = tf.argmax(py_x, 1) ckpt_dir = "./ckpt_dir" if not os.path.exists(ckpt_dir): os.makedirs(ckpt_dir) global_step = tf.Variable(0, name='global_step', trainable=False) saver = tf.train.Saver() with tf.Session() as sess: tf.global_variables_initializer().run() start = global_step.eval() print("start from: ", start) for i in range(start, 100): for start, end in zip(range(0, len(train_x), 128), range(128, len(train_x)+1, 128)): sess.run(train_op, feed_dict={X: train_x[start: end], Y: train_y[start: end], p_keep_input: 0.8, p_keep_hidden: 0.5}) global_step.assign(i).eval() saver.save(sess, ckpt_dir + "/model.ckpt", global_step=global_step)
第二部分:程序的重载
import tensorflow as tf import numpy as np import os from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) train_x, train_y, test_x, test_y = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels X = tf.placeholder("float", [None, 784]) Y = tf.placeholder("float", [None, 10]) def init_weights(shapes): return tf.Variable(tf.random_normal(shapes, stddev=0.01)) def model(X, w_h, w_h2, w_ho, p_keep_input, p_keep_hidden): X = tf.nn.dropout(X, p_keep_input) h = tf.nn.relu(tf.matmul(X, w_h)) h = tf.nn.dropout(h, p_keep_hidden) h2 = tf.nn.relu(tf.matmul(h, w_h2)) h2 = tf.nn.dropout(h2, p_keep_hidden) return tf.matmul(h2, w_ho) w_h = init_weights([784, 625]) w_h2 = init_weights([625, 625]) w_ho = init_weights([625, 10]) p_keep_input = tf.placeholder("float") p_keep_hidden = tf.placeholder("float") py_x = model(X, w_h, w_h2, w_ho, p_keep_input, p_keep_hidden) cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=py_x, labels=Y)) train_op = tf.train.RMSPropOptimizer(0.01, 0.9).minimize(cost) predict_op = tf.argmax(py_x, 1) ckpt_dir = "./ckpt_dir" if not os.path.exists(ckpt_dir): os.makedirs(ckpt_dir) global_step = tf.Variable(0, name='global_step', trainable=False) saver = tf.train.Saver() with tf.Session() as sess: tf.global_variables_initializer().run() ckpt = tf.train.get_checkpoint_state(ckpt_dir) if ckpt and ckpt.model_checkpoint_path: print(ckpt.model_checkpoint_path) saver.restore(sess, ckpt.model_checkpoint_path) print(sess.run(global_step)) start = global_step.eval() for i in range(start, 100): for start, end in zip(range(0, len(train_x), 128), range(128, len(train_x)+1, 128)): sess.run(train_op, feed_dict={X: train_x[start: end], Y: train_y[start: end], p_keep_input: 0.8, p_keep_hidden: 0.5}) global_step.assign(i).eval() print(sess.run(global_step)) saver.save(sess, ckpt_dir + "/model.ckpt", global_step=global_step)