diff --git a/tensorflow/examples/tutorials/__init__.py b/tensorflow/examples/tutorials/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tensorflow/examples/tutorials/mnist/BUILD b/tensorflow/examples/tutorials/mnist/BUILD deleted file mode 100644 index be8cdc3a1c2..00000000000 --- a/tensorflow/examples/tutorials/mnist/BUILD +++ /dev/null @@ -1,135 +0,0 @@ -# Description: -# Example TensorFlow models for MNIST used in tutorials - -load("//tensorflow:tensorflow.bzl", "tf_py_test") - -package( - licenses = ["notice"], # Apache 2.0 -) - -exports_files(["LICENSE"]) - -py_library( - name = "package", - srcs = [ - "__init__.py", - ], - srcs_version = "PY2AND3", - visibility = ["//tensorflow:__subpackages__"], - deps = [ - ":input_data", - ":mnist", - ], -) - -py_library( - name = "input_data", - srcs = ["input_data.py"], - srcs_version = "PY2AND3", - visibility = ["//visibility:public"], - deps = [ - "//tensorflow:tensorflow_py", - "//third_party/py/numpy", - "@six_archive//:six", - ], -) - -py_library( - name = "mnist", - srcs = [ - "mnist.py", - ], - srcs_version = "PY2AND3", - visibility = ["//visibility:public"], - deps = [ - "//tensorflow:tensorflow_py", - ], -) - -py_binary( - name = "fully_connected_feed", - srcs = [ - "fully_connected_feed.py", - ], - python_version = "PY3", - srcs_version = "PY2AND3", - tags = ["optonly"], - deps = [ - ":input_data", - ":mnist", - "//tensorflow:tensorflow_py", - ], -) - -py_binary( - name = "mnist_with_summaries", - srcs = [ - "mnist_with_summaries.py", - ], - python_version = "PY3", - srcs_version = "PY2AND3", - deps = [ - ":input_data", - "//tensorflow:tensorflow_py", - ], -) - -# Note: We need to set the evironment variable to use CPU JIT. -# The way to achieve this is via setting the following: -# TF_XLA_FLAGS='--tf_xla_cpu_global_jit=true' -# before the run command. To use XLA, we also must build -# with --define=with_xla_support=true flag. -# Note (GPU): Add --config=cuda to the build command. -py_binary( - name = "mnist_softmax_xla", - srcs = [ - "mnist_softmax_xla.py", - ], - python_version = "PY3", - srcs_version = "PY2AND3", - deps = [ - ":input_data", - "//tensorflow:tensorflow_py", - ], -) - -tf_py_test( - name = "fully_connected_feed_test", - srcs = [ - "fully_connected_feed.py", - ], - args = [ - "--fake_data", - "--max_steps=10", - ], - main = "fully_connected_feed.py", - tags = ["no_pip"], - deps = [ - ":input_data", - ":mnist", - "//tensorflow:tensorflow_py", - ], -) - -tf_py_test( - name = "mnist_with_summaries_test", - size = "small", - srcs = [ - "mnist_with_summaries.py", - ], - args = [ - "--fake_data", - "--max_steps=10", - "--learning_rate=0.00", - ], - main = "mnist_with_summaries.py", - tags = [ - "no_pip", - "noasan", # http://b/146080738 - "notsan", # http://b/29184009 - ], - deps = [ - ":input_data", - "//tensorflow:tensorflow_py", - ], -) diff --git a/tensorflow/examples/tutorials/mnist/__init__.py b/tensorflow/examples/tutorials/mnist/__init__.py deleted file mode 100644 index f939bc3bf45..00000000000 --- a/tensorflow/examples/tutorials/mnist/__init__.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== - -"""Imports mnist tutorial libraries used by tutorial examples.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -from tensorflow.examples.tutorials.mnist import input_data -from tensorflow.examples.tutorials.mnist import mnist diff --git a/tensorflow/examples/tutorials/mnist/fully_connected_feed.py b/tensorflow/examples/tutorials/mnist/fully_connected_feed.py deleted file mode 100644 index 8eb57100058..00000000000 --- a/tensorflow/examples/tutorials/mnist/fully_connected_feed.py +++ /dev/null @@ -1,279 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== - -"""Trains and Evaluates the MNIST network using a feed dictionary.""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -# pylint: disable=missing-docstring -import argparse -import os -import sys -import time - -from six.moves import xrange # pylint: disable=redefined-builtin -import tensorflow as tf - -from tensorflow.examples.tutorials.mnist import input_data -from tensorflow.examples.tutorials.mnist import mnist - -# Basic model parameters as external flags. -FLAGS = None - - -def placeholder_inputs(batch_size): - """Generate placeholder variables to represent the input tensors. - - These placeholders are used as inputs by the rest of the model building - code and will be fed from the downloaded data in the .run() loop, below. - - Args: - batch_size: The batch size will be baked into both placeholders. - - Returns: - images_placeholder: Images placeholder. - labels_placeholder: Labels placeholder. - """ - # Note that the shapes of the placeholders match the shapes of the full - # image and label tensors, except the first dimension is now batch_size - # rather than the full size of the train or test data sets. - images_placeholder = tf.compat.v1.placeholder( - tf.float32, shape=(batch_size, mnist.IMAGE_PIXELS)) - labels_placeholder = tf.compat.v1.placeholder(tf.int32, shape=(batch_size)) - return images_placeholder, labels_placeholder - - -def fill_feed_dict(data_set, images_pl, labels_pl): - """Fills the feed_dict for training the given step. - - A feed_dict takes the form of: - feed_dict = { - : , - .... - } - - Args: - data_set: The set of images and labels, from input_data.read_data_sets() - images_pl: The images placeholder, from placeholder_inputs(). - labels_pl: The labels placeholder, from placeholder_inputs(). - - Returns: - feed_dict: The feed dictionary mapping from placeholders to values. - """ - # Create the feed_dict for the placeholders filled with the next - # `batch size` examples. - images_feed, labels_feed = data_set.next_batch(FLAGS.batch_size, - FLAGS.fake_data) - feed_dict = { - images_pl: images_feed, - labels_pl: labels_feed, - } - return feed_dict - - -def do_eval(sess, - eval_correct, - images_placeholder, - labels_placeholder, - data_set): - """Runs one evaluation against the full epoch of data. - - Args: - sess: The session in which the model has been trained. - eval_correct: The Tensor that returns the number of correct predictions. - images_placeholder: The images placeholder. - labels_placeholder: The labels placeholder. - data_set: The set of images and labels to evaluate, from - input_data.read_data_sets(). - """ - # And run one epoch of eval. - true_count = 0 # Counts the number of correct predictions. - steps_per_epoch = data_set.num_examples // FLAGS.batch_size - num_examples = steps_per_epoch * FLAGS.batch_size - for step in xrange(steps_per_epoch): - feed_dict = fill_feed_dict(data_set, - images_placeholder, - labels_placeholder) - true_count += sess.run(eval_correct, feed_dict=feed_dict) - precision = float(true_count) / num_examples - print('Num examples: %d Num correct: %d Precision @ 1: %0.04f' % - (num_examples, true_count, precision)) - - -def run_training(): - """Train MNIST for a number of steps.""" - # Get the sets of images and labels for training, validation, and - # test on MNIST. - data_sets = input_data.read_data_sets(FLAGS.input_data_dir, FLAGS.fake_data) - - # Tell TensorFlow that the model will be built into the default Graph. - with tf.Graph().as_default(): - # Generate placeholders for the images and labels. - images_placeholder, labels_placeholder = placeholder_inputs( - FLAGS.batch_size) - - # Build a Graph that computes predictions from the inference model. - logits = mnist.inference(images_placeholder, - FLAGS.hidden1, - FLAGS.hidden2) - - # Add to the Graph the Ops for loss calculation. - loss = mnist.loss(logits, labels_placeholder) - - # Add to the Graph the Ops that calculate and apply gradients. - train_op = mnist.training(loss, FLAGS.learning_rate) - - # Add the Op to compare the logits to the labels during evaluation. - eval_correct = mnist.evaluation(logits, labels_placeholder) - - # Build the summary Tensor based on the TF collection of Summaries. - summary = tf.compat.v1.summary.merge_all() - - # Add the variable initializer Op. - init = tf.compat.v1.global_variables_initializer() - - # Create a saver for writing training checkpoints. - saver = tf.compat.v1.train.Saver() - - # Create a session for running Ops on the Graph. - sess = tf.compat.v1.Session() - - # Instantiate a SummaryWriter to output summaries and the Graph. - summary_writer = tf.compat.v1.summary.FileWriter(FLAGS.log_dir, sess.graph) - - # And then after everything is built: - - # Run the Op to initialize the variables. - sess.run(init) - - # Start the training loop. - for step in xrange(FLAGS.max_steps): - start_time = time.time() - - # Fill a feed dictionary with the actual set of images and labels - # for this particular training step. - feed_dict = fill_feed_dict(data_sets.train, - images_placeholder, - labels_placeholder) - - # Run one step of the model. The return values are the activations - # from the `train_op` (which is discarded) and the `loss` Op. To - # inspect the values of your Ops or variables, you may include them - # in the list passed to sess.run() and the value tensors will be - # returned in the tuple from the call. - _, loss_value = sess.run([train_op, loss], - feed_dict=feed_dict) - - duration = time.time() - start_time - - # Write the summaries and print an overview fairly often. - if step % 100 == 0: - # Print status to stdout. - print('Step %d: loss = %.2f (%.3f sec)' % (step, loss_value, duration)) - # Update the events file. - summary_str = sess.run(summary, feed_dict=feed_dict) - summary_writer.add_summary(summary_str, step) - summary_writer.flush() - - # Save a checkpoint and evaluate the model periodically. - if (step + 1) % 1000 == 0 or (step + 1) == FLAGS.max_steps: - checkpoint_file = os.path.join(FLAGS.log_dir, 'model.ckpt') - saver.save(sess, checkpoint_file, global_step=step) - # Evaluate against the training set. - print('Training Data Eval:') - do_eval(sess, - eval_correct, - images_placeholder, - labels_placeholder, - data_sets.train) - # Evaluate against the validation set. - print('Validation Data Eval:') - do_eval(sess, - eval_correct, - images_placeholder, - labels_placeholder, - data_sets.validation) - # Evaluate against the test set. - print('Test Data Eval:') - do_eval(sess, - eval_correct, - images_placeholder, - labels_placeholder, - data_sets.test) - - -def main(_): - if tf.io.gfile.exists(FLAGS.log_dir): - tf.io.gfile.rmtree(FLAGS.log_dir) - tf.io.gfile.makedirs(FLAGS.log_dir) - run_training() - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument( - '--learning_rate', - type=float, - default=0.01, - help='Initial learning rate.' - ) - parser.add_argument( - '--max_steps', - type=int, - default=2000, - help='Number of steps to run trainer.' - ) - parser.add_argument( - '--hidden1', - type=int, - default=128, - help='Number of units in hidden layer 1.' - ) - parser.add_argument( - '--hidden2', - type=int, - default=32, - help='Number of units in hidden layer 2.' - ) - parser.add_argument( - '--batch_size', - type=int, - default=100, - help='Batch size. Must divide evenly into the dataset sizes.' - ) - parser.add_argument( - '--input_data_dir', - type=str, - default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'), - 'tensorflow/mnist/input_data'), - help='Directory to put the input data.' - ) - parser.add_argument( - '--log_dir', - type=str, - default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'), - 'tensorflow/mnist/logs/fully_connected_feed'), - help='Directory to put the log data.' - ) - parser.add_argument( - '--fake_data', - default=False, - help='If true, uses fake data for unit testing.', - action='store_true' - ) - - FLAGS, unparsed = parser.parse_known_args() - tf.compat.v1.app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/tensorflow/examples/tutorials/mnist/mnist.py b/tensorflow/examples/tutorials/mnist/mnist.py deleted file mode 100644 index 0141d4b25ea..00000000000 --- a/tensorflow/examples/tutorials/mnist/mnist.py +++ /dev/null @@ -1,148 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== - -"""Builds the MNIST network. - -Implements the inference/loss/training pattern for model building. - -1. inference() - Builds the model as far as required for running the network -forward to make predictions. -2. loss() - Adds to the inference model the layers required to generate loss. -3. training() - Adds to the loss model the Ops required to generate and -apply gradients. - -This file is used by the various "fully_connected_*.py" files and not meant to -be run. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import math - -import tensorflow as tf - -# The MNIST dataset has 10 classes, representing the digits 0 through 9. -NUM_CLASSES = 10 - -# The MNIST images are always 28x28 pixels. -IMAGE_SIZE = 28 -IMAGE_PIXELS = IMAGE_SIZE * IMAGE_SIZE - - -def inference(images, hidden1_units, hidden2_units): - """Build the MNIST model up to where it may be used for inference. - - Args: - images: Images placeholder, from inputs(). - hidden1_units: Size of the first hidden layer. - hidden2_units: Size of the second hidden layer. - - Returns: - softmax_linear: Output tensor with the computed logits. - """ - # Hidden 1 - with tf.compat.v1.name_scope('hidden1'): - weights = tf.Variable( - tf.random.truncated_normal( - [IMAGE_PIXELS, hidden1_units], - stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))), name='weights') - biases = tf.Variable(tf.zeros([hidden1_units]), - name='biases') - hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases) - # Hidden 2 - with tf.compat.v1.name_scope('hidden2'): - weights = tf.Variable( - tf.random.truncated_normal( - [hidden1_units, hidden2_units], - stddev=1.0 / math.sqrt(float(hidden1_units))), name='weights') - biases = tf.Variable(tf.zeros([hidden2_units]), - name='biases') - hidden2 = tf.nn.relu(tf.matmul(hidden1, weights) + biases) - # Linear - with tf.compat.v1.name_scope('softmax_linear'): - weights = tf.Variable( - tf.random.truncated_normal( - [hidden2_units, NUM_CLASSES], - stddev=1.0 / math.sqrt(float(hidden2_units))), name='weights') - biases = tf.Variable(tf.zeros([NUM_CLASSES]), - name='biases') - logits = tf.matmul(hidden2, weights) + biases - return logits - - -def loss(logits, labels): - """Calculates the loss from the logits and the labels. - - Args: - logits: Logits tensor, float - [batch_size, NUM_CLASSES]. - labels: Labels tensor, int32 - [batch_size]. - - Returns: - loss: Loss tensor of type float. - """ - labels = tf.cast(labels, dtype=tf.int64) - return tf.compat.v1.losses.sparse_softmax_cross_entropy( - labels=labels, logits=logits) - - -def training(loss, learning_rate): - """Sets up the training Ops. - - Creates a summarizer to track the loss over time in TensorBoard. - - Creates an optimizer and applies the gradients to all trainable variables. - - The Op returned by this function is what must be passed to the - `sess.run()` call to cause the model to train. - - Args: - loss: Loss tensor, from loss(). - learning_rate: The learning rate to use for gradient descent. - - Returns: - train_op: The Op for training. - """ - # Add a scalar summary for the snapshot loss. - tf.compat.v1.summary.scalar('loss', loss) - # Create the gradient descent optimizer with the given learning rate. - optimizer = tf.compat.v1.train.GradientDescentOptimizer(learning_rate) - # Create a variable to track the global step. - global_step = tf.Variable(0, name='global_step', trainable=False) - # Use the optimizer to apply the gradients that minimize the loss - # (and also increment the global step counter) as a single training step. - train_op = optimizer.minimize(loss, global_step=global_step) - return train_op - - -def evaluation(logits, labels): - """Evaluate the quality of the logits at predicting the label. - - Args: - logits: Logits tensor, float - [batch_size, NUM_CLASSES]. - labels: Labels tensor, int32 - [batch_size], with values in the - range [0, NUM_CLASSES). - - Returns: - A scalar int32 tensor with the number of examples (out of batch_size) - that were predicted correctly. - """ - # For a classifier model, we can use the in_top_k Op. - # It returns a bool tensor with shape [batch_size] that is true for - # the examples where the label is in the top k (here k=1) - # of all logits for that example. - correct = tf.nn.in_top_k(predictions=logits, targets=labels, k=1) - # Return the number of true entries. - return tf.reduce_sum(input_tensor=tf.cast(correct, tf.int32)) diff --git a/tensorflow/examples/tutorials/mnist/mnist_softmax_xla.py b/tensorflow/examples/tutorials/mnist/mnist_softmax_xla.py deleted file mode 100644 index 28fdc2059f8..00000000000 --- a/tensorflow/examples/tutorials/mnist/mnist_softmax_xla.py +++ /dev/null @@ -1,107 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Simple MNIST classifier example with JIT XLA and timelines. - - Note: Please see further comments in the BUILD file to invoke XLA. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import argparse -import sys - -import tensorflow as tf - -from tensorflow.examples.tutorials.mnist import input_data -from tensorflow.python.client import timeline - -FLAGS = None - - -def main(_): - # Import data - mnist = input_data.read_data_sets(FLAGS.data_dir) - - # Create the model - x = tf.placeholder(tf.float32, [None, 784]) - w = tf.Variable(tf.zeros([784, 10])) - b = tf.Variable(tf.zeros([10])) - y = tf.matmul(x, w) + b - - # Define loss and optimizer - y_ = tf.placeholder(tf.int64, [None]) - - # The raw formulation of cross-entropy, - # - # tf.reduce_mean(-tf.reduce_sum(y_ * tf.math.log(tf.nn.softmax(y)), - # reduction_indices=[1])) - # - # can be numerically unstable. - # - # So here we use tf.compat.v1.losses.sparse_softmax_cross_entropy on the raw - # logit outputs of 'y', and then average across the batch. - cross_entropy = tf.losses.sparse_softmax_cross_entropy(labels=y_, logits=y) - train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) - - config = tf.ConfigProto() - jit_level = 0 - if FLAGS.xla: - # Turns on XLA JIT compilation. - jit_level = tf.OptimizerOptions.ON_1 - - config.graph_options.optimizer_options.global_jit_level = jit_level - run_metadata = tf.RunMetadata() - sess = tf.compat.v1.Session(config=config) - tf.global_variables_initializer().run(session=sess) - # Train - train_loops = 1000 - for i in range(train_loops): - batch_xs, batch_ys = mnist.train.next_batch(100) - - # Create a timeline for the last loop and export to json to view with - # chrome://tracing/. - if i == train_loops - 1: - sess.run(train_step, - feed_dict={x: batch_xs, - y_: batch_ys}, - options=tf.RunOptions(trace_level=tf.RunOptions.FULL_TRACE), - run_metadata=run_metadata) - trace = timeline.Timeline(step_stats=run_metadata.step_stats) - with open('/tmp/timeline.ctf.json', 'w') as trace_file: - trace_file.write(trace.generate_chrome_trace_format()) - else: - sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys}) - - # Test trained model - correct_prediction = tf.equal(tf.argmax(y, 1), y_) - accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) - print(sess.run(accuracy, - feed_dict={x: mnist.test.images, - y_: mnist.test.labels})) - sess.close() - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument( - '--data_dir', - type=str, - default='/tmp/tensorflow/mnist/input_data', - help='Directory for storing input data') - parser.add_argument( - '--xla', type=bool, default=True, help='Turn xla via JIT on') - FLAGS, unparsed = parser.parse_known_args() - tf.app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py b/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py deleted file mode 100644 index 04315ad8a3f..00000000000 --- a/tensorflow/examples/tutorials/mnist/mnist_with_summaries.py +++ /dev/null @@ -1,217 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the 'License'); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an 'AS IS' BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""A simple MNIST classifier which displays summaries in TensorBoard. - -This is an unimpressive MNIST model, but it is a good example of using -tf.name_scope to make a graph legible in the TensorBoard graph explorer, and of -naming summary tags so that they are grouped meaningfully in TensorBoard. - -It demonstrates the functionality of every TensorBoard dashboard. -""" -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import argparse -import os -import sys - -import tensorflow as tf - -from tensorflow.examples.tutorials.mnist import input_data - -FLAGS = None - - -def train(): - # Import data - mnist = input_data.read_data_sets(FLAGS.data_dir, - fake_data=FLAGS.fake_data) - - sess = tf.compat.v1.InteractiveSession() - # Create a multilayer model. - - # Input placeholders - with tf.compat.v1.name_scope('input'): - x = tf.compat.v1.placeholder(tf.float32, [None, 784], name='x-input') - y_ = tf.compat.v1.placeholder(tf.int64, [None], name='y-input') - - with tf.compat.v1.name_scope('input_reshape'): - image_shaped_input = tf.reshape(x, [-1, 28, 28, 1]) - tf.compat.v1.summary.image('input', image_shaped_input, 10) - - # We can't initialize these variables to 0 - the network will get stuck. - def weight_variable(shape): - """Create a weight variable with appropriate initialization.""" - initial = tf.random.truncated_normal(shape, stddev=0.1) - return tf.Variable(initial) - - def bias_variable(shape): - """Create a bias variable with appropriate initialization.""" - initial = tf.constant(0.1, shape=shape) - return tf.Variable(initial) - - def variable_summaries(var): - """Attach a lot of summaries to a Tensor (for TensorBoard visualization).""" - with tf.compat.v1.name_scope('summaries'): - mean = tf.reduce_mean(input_tensor=var) - tf.compat.v1.summary.scalar('mean', mean) - with tf.compat.v1.name_scope('stddev'): - stddev = tf.sqrt(tf.reduce_mean(input_tensor=tf.square(var - mean))) - tf.compat.v1.summary.scalar('stddev', stddev) - tf.compat.v1.summary.scalar('max', tf.reduce_max(input_tensor=var)) - tf.compat.v1.summary.scalar('min', tf.reduce_min(input_tensor=var)) - tf.compat.v1.summary.histogram('histogram', var) - - def nn_layer(input_tensor, input_dim, output_dim, layer_name, act=tf.nn.relu): - """Reusable code for making a simple neural net layer. - - It does a matrix multiply, bias add, and then uses ReLU to nonlinearize. - It also sets up name scoping so that the resultant graph is easy to read, - and adds a number of summary ops. - """ - # Adding a name scope ensures logical grouping of the layers in the graph. - with tf.compat.v1.name_scope(layer_name): - # This Variable will hold the state of the weights for the layer - with tf.compat.v1.name_scope('weights'): - weights = weight_variable([input_dim, output_dim]) - variable_summaries(weights) - with tf.compat.v1.name_scope('biases'): - biases = bias_variable([output_dim]) - variable_summaries(biases) - with tf.compat.v1.name_scope('Wx_plus_b'): - preactivate = tf.matmul(input_tensor, weights) + biases - tf.compat.v1.summary.histogram('pre_activations', preactivate) - activations = act(preactivate, name='activation') - tf.compat.v1.summary.histogram('activations', activations) - return activations - - hidden1 = nn_layer(x, 784, 500, 'layer1') - - with tf.compat.v1.name_scope('dropout'): - keep_prob = tf.compat.v1.placeholder(tf.float32) - tf.compat.v1.summary.scalar('dropout_keep_probability', keep_prob) - dropped = tf.nn.dropout(hidden1, rate=(1 - keep_prob)) - - # Do not apply softmax activation yet, see below. - y = nn_layer(dropped, 500, 10, 'layer2', act=tf.identity) - - with tf.compat.v1.name_scope('cross_entropy'): - # The raw formulation of cross-entropy, - # - # tf.reduce_mean(-tf.reduce_sum(y_ * tf.math.log(tf.softmax(y)), - # reduction_indices=[1])) - # - # can be numerically unstable. - # - # So here we use tf.compat.v1.losses.sparse_softmax_cross_entropy on the - # raw logit outputs of the nn_layer above, and then average across - # the batch. - with tf.compat.v1.name_scope('total'): - cross_entropy = tf.compat.v1.losses.sparse_softmax_cross_entropy( - labels=y_, logits=y) - tf.compat.v1.summary.scalar('cross_entropy', cross_entropy) - - with tf.compat.v1.name_scope('train'): - train_step = tf.compat.v1.train.AdamOptimizer(FLAGS.learning_rate).minimize( - cross_entropy) - - with tf.compat.v1.name_scope('accuracy'): - with tf.compat.v1.name_scope('correct_prediction'): - correct_prediction = tf.equal(tf.argmax(input=y, axis=1), y_) - with tf.compat.v1.name_scope('accuracy'): - accuracy = tf.reduce_mean(input_tensor=tf.cast(correct_prediction, - tf.float32)) - tf.compat.v1.summary.scalar('accuracy', accuracy) - - # Merge all the summaries and write them out to - # /tmp/tensorflow/mnist/logs/mnist_with_summaries (by default) - merged = tf.compat.v1.summary.merge_all() - train_writer = tf.compat.v1.summary.FileWriter(FLAGS.log_dir + '/train', - sess.graph) - test_writer = tf.compat.v1.summary.FileWriter(FLAGS.log_dir + '/test') - tf.compat.v1.global_variables_initializer().run() - - # Train the model, and also write summaries. - # Every 10th step, measure test-set accuracy, and write test summaries - # All other steps, run train_step on training data, & add training summaries - - def feed_dict(train): - """Make a TensorFlow feed_dict: maps data onto Tensor placeholders.""" - if train or FLAGS.fake_data: - xs, ys = mnist.train.next_batch(100, fake_data=FLAGS.fake_data) - k = FLAGS.dropout - else: - xs, ys = mnist.test.images, mnist.test.labels - k = 1.0 - return {x: xs, y_: ys, keep_prob: k} - - for i in range(FLAGS.max_steps): - 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)) - else: # Record train set summaries, and train - if i % 100 == 99: # Record execution stats - run_options = tf.compat.v1.RunOptions( - trace_level=tf.compat.v1.RunOptions.FULL_TRACE) - run_metadata = tf.compat.v1.RunMetadata() - summary, _ = sess.run([merged, train_step], - feed_dict=feed_dict(True), - options=run_options, - run_metadata=run_metadata) - train_writer.add_run_metadata(run_metadata, 'step%03d' % i) - train_writer.add_summary(summary, i) - print('Adding run metadata for', i) - else: # Record a summary - summary, _ = sess.run([merged, train_step], feed_dict=feed_dict(True)) - train_writer.add_summary(summary, i) - train_writer.close() - test_writer.close() - - -def main(_): - if tf.io.gfile.exists(FLAGS.log_dir): - tf.io.gfile.rmtree(FLAGS.log_dir) - tf.io.gfile.makedirs(FLAGS.log_dir) - with tf.Graph().as_default(): - train() - - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - parser.add_argument('--fake_data', nargs='?', const=True, type=bool, - default=False, - help='If true, uses fake data for unit testing.') - parser.add_argument('--max_steps', type=int, default=1000, - help='Number of steps to run trainer.') - parser.add_argument('--learning_rate', type=float, default=0.001, - help='Initial learning rate') - parser.add_argument('--dropout', type=float, default=0.9, - help='Keep probability for training dropout.') - parser.add_argument( - '--data_dir', - type=str, - default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'), - 'tensorflow/mnist/input_data'), - help='Directory for storing input data') - parser.add_argument( - '--log_dir', - type=str, - default=os.path.join(os.getenv('TEST_TMPDIR', '/tmp'), - 'tensorflow/mnist/logs/mnist_with_summaries'), - help='Summaries log directory') - FLAGS, unparsed = parser.parse_known_args() - tf.compat.v1.app.run(main=main, argv=[sys.argv[0]] + unparsed) diff --git a/tensorflow/examples/tutorials/word2vec/BUILD b/tensorflow/examples/tutorials/word2vec/BUILD deleted file mode 100644 index 0a885303919..00000000000 --- a/tensorflow/examples/tutorials/word2vec/BUILD +++ /dev/null @@ -1,25 +0,0 @@ -# Description: -# TensorFlow model for word2vec - -package( - default_visibility = ["//tensorflow:internal"], - licenses = ["notice"], # Apache 2.0 -) - -exports_files(["LICENSE"]) - -py_binary( - name = "word2vec_basic", - srcs = [ - "word2vec_basic.py", - ], - python_version = "PY3", - srcs_version = "PY2AND3", - tags = [ - "no-internal-py3", - ], - deps = [ - "//tensorflow:tensorflow_py", - "//third_party/py/numpy", - ], -) diff --git a/tensorflow/examples/tutorials/word2vec/__init__.py b/tensorflow/examples/tutorials/word2vec/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/tensorflow/examples/tutorials/word2vec/word2vec_basic.py b/tensorflow/examples/tutorials/word2vec/word2vec_basic.py deleted file mode 100644 index 43fd2f8dbc1..00000000000 --- a/tensorflow/examples/tutorials/word2vec/word2vec_basic.py +++ /dev/null @@ -1,376 +0,0 @@ -# Copyright 2015 The TensorFlow Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# ============================================================================== -"""Basic word2vec example.""" - -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function - -import argparse -import collections -import hashlib -import math -import os -import random -import sys -from tempfile import gettempdir -import zipfile - -import numpy as np -from six.moves import urllib -from six.moves import xrange # pylint: disable=redefined-builtin -import tensorflow as tf - -from tensorflow.contrib.tensorboard.plugins import projector - -data_index = 0 - - -def _hash_file(fpath): - hasher = hashlib.sha256() - with open(fpath, 'rb') as fpath_file: - for chunk in iter(lambda: fpath_file.read(65535), b''): - hasher.update(chunk) - return hasher.hexdigest() - - -def word2vec_basic(log_dir): - """Example of building, training and visualizing a word2vec model.""" - # Create the directory for TensorBoard variables if there is not. - if not os.path.exists(log_dir): - os.makedirs(log_dir) - - # Step 1: Download the data. - # Note: Source website does not support HTTPS right now. - url = 'http://mattmahoney.net/dc/' - - # pylint: disable=redefined-outer-name - def maybe_download(filename, expected_bytes, sha256=None): - """Download a file if not present, and make sure it's the right size.""" - local_filename = os.path.join(gettempdir(), filename) - if not os.path.exists(local_filename): - local_filename, _ = urllib.request.urlretrieve(url + filename, - local_filename) - statinfo = os.stat(local_filename) - - if sha256 and _hash_file(local_filename) != sha256: - raise Exception('Failed to verify ' + local_filename + ' due to hash ' - 'mismatch. Can you get to it with a browser?') - - if statinfo.st_size == expected_bytes: - print('Found and verified', filename) - else: - print(statinfo.st_size) - raise Exception('Failed to verify ' + local_filename + - '. Can you get to it with a browser?') - return local_filename - - filename = maybe_download( - 'text8.zip', - 31344016, - sha256='a6640522afe85d1963ad56c05b0ede0a0c000dddc9671758a6cc09b7a38e5232') - - # Read the data into a list of strings. - def read_data(filename): - """Extract the first file enclosed in a zip file as a list of words.""" - with zipfile.ZipFile(filename) as f: - data = tf.compat.as_str(f.read(f.namelist()[0])).split() - return data - - vocabulary = read_data(filename) - print('Data size', len(vocabulary)) - - # Step 2: Build the dictionary and replace rare words with UNK token. - vocabulary_size = 50000 - - def build_dataset(words, n_words): - """Process raw inputs into a dataset.""" - count = [['UNK', -1]] - count.extend(collections.Counter(words).most_common(n_words - 1)) - dictionary = {word: index for index, (word, _) in enumerate(count)} - data = [] - unk_count = 0 - for word in words: - index = dictionary.get(word, 0) - if index == 0: # dictionary['UNK'] - unk_count += 1 - data.append(index) - count[0][1] = unk_count - reversed_dictionary = dict(zip(dictionary.values(), dictionary.keys())) - return data, count, dictionary, reversed_dictionary - - # Filling 4 global variables: - # data - list of codes (integers from 0 to vocabulary_size-1). - # This is the original text but words are replaced by their codes - # count - map of words(strings) to count of occurrences - # dictionary - map of words(strings) to their codes(integers) - # reverse_dictionary - map of codes(integers) to words(strings) - data, count, unused_dictionary, reverse_dictionary = build_dataset( - vocabulary, vocabulary_size) - del vocabulary # Hint to reduce memory. - print('Most common words (+UNK)', count[:5]) - print('Sample data', data[:10], [reverse_dictionary[i] for i in data[:10]]) - - # Step 3: Function to generate a training batch for the skip-gram model. - def generate_batch(batch_size, num_skips, skip_window): - global data_index - assert batch_size % num_skips == 0 - assert num_skips <= 2 * skip_window - batch = np.ndarray(shape=(batch_size), dtype=np.int32) - labels = np.ndarray(shape=(batch_size, 1), dtype=np.int32) - span = 2 * skip_window + 1 # [ skip_window target skip_window ] - buffer = collections.deque(maxlen=span) # pylint: disable=redefined-builtin - if data_index + span > len(data): - data_index = 0 - buffer.extend(data[data_index:data_index + span]) - data_index += span - for i in range(batch_size // num_skips): - context_words = [w for w in range(span) if w != skip_window] - words_to_use = random.sample(context_words, num_skips) - for j, context_word in enumerate(words_to_use): - batch[i * num_skips + j] = buffer[skip_window] - labels[i * num_skips + j, 0] = buffer[context_word] - if data_index == len(data): - buffer.extend(data[0:span]) - data_index = span - else: - buffer.append(data[data_index]) - data_index += 1 - # Backtrack a little bit to avoid skipping words in the end of a batch - data_index = (data_index - span) % len(data) - return batch, labels - - batch, labels = generate_batch(batch_size=8, num_skips=2, skip_window=1) - for i in range(8): - print(batch[i], reverse_dictionary[batch[i]], '->', labels[i, 0], - reverse_dictionary[labels[i, 0]]) - - # Step 4: Build and train a skip-gram model. - - batch_size = 128 - embedding_size = 128 # Dimension of the embedding vector. - skip_window = 1 # How many words to consider left and right. - num_skips = 2 # How many times to reuse an input to generate a label. - num_sampled = 64 # Number of negative examples to sample. - - # We pick a random validation set to sample nearest neighbors. Here we limit - # the validation samples to the words that have a low numeric ID, which by - # construction are also the most frequent. These 3 variables are used only for - # displaying model accuracy, they don't affect calculation. - valid_size = 16 # Random set of words to evaluate similarity on. - valid_window = 100 # Only pick dev samples in the head of the distribution. - valid_examples = np.random.choice(valid_window, valid_size, replace=False) - - graph = tf.Graph() - - with graph.as_default(): - - # Input data. - with tf.name_scope('inputs'): - train_inputs = tf.placeholder(tf.int32, shape=[batch_size]) - train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1]) - valid_dataset = tf.constant(valid_examples, dtype=tf.int32) - - # Ops and variables pinned to the CPU because of missing GPU implementation - with tf.device('/cpu:0'): - # Look up embeddings for inputs. - with tf.name_scope('embeddings'): - embeddings = tf.Variable( - tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)) - embed = tf.nn.embedding_lookup(embeddings, train_inputs) - - # Construct the variables for the NCE loss - with tf.name_scope('weights'): - nce_weights = tf.Variable( - tf.truncated_normal([vocabulary_size, embedding_size], - stddev=1.0 / math.sqrt(embedding_size))) - with tf.name_scope('biases'): - nce_biases = tf.Variable(tf.zeros([vocabulary_size])) - - # Compute the average NCE loss for the batch. - # tf.nce_loss automatically draws a new sample of the negative labels each - # time we evaluate the loss. - # Explanation of the meaning of NCE loss and why choosing NCE over tf.nn.sampled_softmax_loss: - # http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/ - # http://papers.nips.cc/paper/5165-learning-word-embeddings-efficiently-with-noise-contrastive-estimation.pdf - with tf.name_scope('loss'): - loss = tf.reduce_mean( - tf.nn.nce_loss( - weights=nce_weights, - biases=nce_biases, - labels=train_labels, - inputs=embed, - num_sampled=num_sampled, - num_classes=vocabulary_size)) - - # Add the loss value as a scalar to summary. - tf.summary.scalar('loss', loss) - - # Construct the SGD optimizer using a learning rate of 1.0. - with tf.name_scope('optimizer'): - optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss) - - # Compute the cosine similarity between minibatch examples and all - # embeddings. - norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keepdims=True)) - normalized_embeddings = embeddings / norm - valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, - valid_dataset) - similarity = tf.matmul( - valid_embeddings, normalized_embeddings, transpose_b=True) - - # Merge all summaries. - merged = tf.summary.merge_all() - - # Add variable initializer. - init = tf.global_variables_initializer() - - # Create a saver. - saver = tf.train.Saver() - - # Step 5: Begin training. - num_steps = 100001 - - with tf.compat.v1.Session(graph=graph) as session: - # Open a writer to write summaries. - writer = tf.summary.FileWriter(log_dir, session.graph) - - # We must initialize all variables before we use them. - init.run() - print('Initialized') - - average_loss = 0 - for step in xrange(num_steps): - batch_inputs, batch_labels = generate_batch(batch_size, num_skips, - skip_window) - feed_dict = {train_inputs: batch_inputs, train_labels: batch_labels} - - # Define metadata variable. - run_metadata = tf.RunMetadata() - - # We perform one update step by evaluating the optimizer op (including it - # in the list of returned values for session.run() - # Also, evaluate the merged op to get all summaries from the returned - # "summary" variable. Feed metadata variable to session for visualizing - # the graph in TensorBoard. - _, summary, loss_val = session.run([optimizer, merged, loss], - feed_dict=feed_dict, - run_metadata=run_metadata) - average_loss += loss_val - - # Add returned summaries to writer in each step. - writer.add_summary(summary, step) - # Add metadata to visualize the graph for the last run. - if step == (num_steps - 1): - writer.add_run_metadata(run_metadata, 'step%d' % step) - - if step % 2000 == 0: - if step > 0: - average_loss /= 2000 - # The average loss is an estimate of the loss over the last 2000 - # batches. - print('Average loss at step ', step, ': ', average_loss) - average_loss = 0 - - # Note that this is expensive (~20% slowdown if computed every 500 steps) - if step % 10000 == 0: - sim = similarity.eval() - for i in xrange(valid_size): - valid_word = reverse_dictionary[valid_examples[i]] - top_k = 8 # number of nearest neighbors - nearest = (-sim[i, :]).argsort()[1:top_k + 1] - log_str = 'Nearest to %s:' % valid_word - - print( - log_str, - ', '.join([reverse_dictionary[nearest[k]] for k in range(top_k)])) - final_embeddings = normalized_embeddings.eval() - - # Write corresponding labels for the embeddings. - with open(log_dir + '/metadata.tsv', 'w') as f: - for i in xrange(vocabulary_size): - f.write(reverse_dictionary[i] + '\n') - - # Save the model for checkpoints. - saver.save(session, os.path.join(log_dir, 'model.ckpt')) - - # Create a configuration for visualizing embeddings with the labels in - # TensorBoard. - config = projector.ProjectorConfig() - embedding_conf = config.embeddings.add() - embedding_conf.tensor_name = embeddings.name - embedding_conf.metadata_path = os.path.join(log_dir, 'metadata.tsv') - projector.visualize_embeddings(writer, config) - - writer.close() - - # Step 6: Visualize the embeddings. - - # pylint: disable=missing-docstring - # Function to draw visualization of distance between embeddings. - def plot_with_labels(low_dim_embs, labels, filename): - assert low_dim_embs.shape[0] >= len(labels), 'More labels than embeddings' - plt.figure(figsize=(18, 18)) # in inches - for i, label in enumerate(labels): - x, y = low_dim_embs[i, :] - plt.scatter(x, y) - plt.annotate( - label, - xy=(x, y), - xytext=(5, 2), - textcoords='offset points', - ha='right', - va='bottom') - - plt.savefig(filename) - - try: - # pylint: disable=g-import-not-at-top - from sklearn.manifold import TSNE - import matplotlib.pyplot as plt - - tsne = TSNE( - perplexity=30, n_components=2, init='pca', n_iter=5000, method='exact') - plot_only = 500 - low_dim_embs = tsne.fit_transform(final_embeddings[:plot_only, :]) - labels = [reverse_dictionary[i] for i in xrange(plot_only)] - plot_with_labels(low_dim_embs, labels, os.path.join(gettempdir(), - 'tsne.png')) - - except ImportError as ex: - print('Please install sklearn, matplotlib, and scipy to show embeddings.') - print(ex) - - -# All functionality is run after tf.compat.v1.app.run() (b/122547914). This -# could be split up but the methods are laid sequentially with their usage for -# clarity. -def main(unused_argv): - # Give a folder path as an argument with '--log_dir' to save - # TensorBoard summaries. Default is a log folder in current directory. - current_path = os.path.dirname(os.path.realpath(sys.argv[0])) - - parser = argparse.ArgumentParser() - parser.add_argument( - '--log_dir', - type=str, - default=os.path.join(current_path, 'log'), - help='The log directory for TensorBoard summaries.') - flags, unused_flags = parser.parse_known_args() - word2vec_basic(flags.log_dir) - - -if __name__ == '__main__': - tf.app.run() diff --git a/tensorflow/lite/experimental/examples/lstm/BUILD b/tensorflow/lite/experimental/examples/lstm/BUILD index cb5a98e4078..019967b794c 100644 --- a/tensorflow/lite/experimental/examples/lstm/BUILD +++ b/tensorflow/lite/experimental/examples/lstm/BUILD @@ -5,6 +5,19 @@ package( licenses = ["notice"], # Apache 2.0 ) +py_library( + name = "input_data", + srcs = ["input_data.py"], + srcs_version = "PY2AND3", + visibility = ["//visibility:private"], + deps = [ + "//tensorflow/python:framework", + "//tensorflow/python:platform", + "//third_party/py/numpy", + "@six_archive//:six", + ], +) + py_library( name = "rnn", srcs = ["rnn.py"], @@ -44,10 +57,10 @@ py_test( "no_pip", ], deps = [ + ":input_data", ":rnn", ":rnn_cell", "//tensorflow:tensorflow_py", - "//tensorflow/examples/tutorials/mnist:input_data", "//tensorflow/lite/python:lite", "//tensorflow/python:framework", "//tensorflow/python:platform", @@ -67,10 +80,10 @@ py_test( "no_pip", ], deps = [ + ":input_data", ":rnn", ":rnn_cell", "//tensorflow:tensorflow_py", - "//tensorflow/examples/tutorials/mnist:input_data", "//tensorflow/lite/python:lite", "//tensorflow/python:framework_test_lib", "//tensorflow/python:platform", @@ -90,10 +103,10 @@ py_test( "no_pip", ], deps = [ + ":input_data", ":rnn", ":rnn_cell", "//tensorflow:tensorflow_py", - "//tensorflow/examples/tutorials/mnist:input_data", "//tensorflow/lite/python:lite", "//tensorflow/python:framework_test_lib", "//tensorflow/python:platform", @@ -113,10 +126,10 @@ py_test( "no_pip", ], deps = [ + ":input_data", ":rnn", ":rnn_cell", "//tensorflow:tensorflow_py", - "//tensorflow/examples/tutorials/mnist:input_data", "//tensorflow/lite/python:lite", "//tensorflow/python:framework_test_lib", "//tensorflow/python:platform", diff --git a/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_lstm_test.py b/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_lstm_test.py index 0d2a2f58ad2..39e44fd0d91 100644 --- a/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_lstm_test.py +++ b/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_lstm_test.py @@ -22,7 +22,7 @@ import numpy as np from six.moves import range import tensorflow.compat.v1 as tf -from tensorflow.examples.tutorials.mnist import input_data +from tensorflow.lite.experimental.examples.lstm import input_data from tensorflow.lite.experimental.examples.lstm.rnn import bidirectional_dynamic_rnn from tensorflow.python.framework import test_util from tensorflow.python.platform import test diff --git a/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_rnn_test.py b/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_rnn_test.py index 2f0a7821572..4f3bd6c3146 100644 --- a/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_rnn_test.py +++ b/tensorflow/lite/experimental/examples/lstm/bidirectional_sequence_rnn_test.py @@ -22,7 +22,7 @@ import numpy as np from six.moves import range import tensorflow.compat.v1 as tf -from tensorflow.examples.tutorials.mnist import input_data +from tensorflow.lite.experimental.examples.lstm import input_data from tensorflow.lite.experimental.examples.lstm.rnn import bidirectional_dynamic_rnn from tensorflow.python.framework import test_util from tensorflow.python.platform import test diff --git a/tensorflow/examples/tutorials/mnist/input_data.py b/tensorflow/lite/experimental/examples/lstm/input_data.py similarity index 99% rename from tensorflow/examples/tutorials/mnist/input_data.py rename to tensorflow/lite/experimental/examples/lstm/input_data.py index a70787d7dcc..6116be79e62 100644 --- a/tensorflow/examples/tutorials/mnist/input_data.py +++ b/tensorflow/lite/experimental/examples/lstm/input_data.py @@ -25,6 +25,7 @@ import collections import gzip import os + import numpy from six.moves import urllib from six.moves import xrange # pylint: disable=redefined-builtin @@ -138,7 +139,7 @@ class _DataSet(object): Args: images: The images labels: The labels - fake_data: Ignore images and labels, use fake data. + fake_data: Ignore inages and labels, use fake data. one_hot: Bool, return the labels as one hot vectors (if True) or ints (if False). dtype: Output image dtype. One of [uint8, float32]. `uint8` output has @@ -330,3 +331,4 @@ def read_data_sets(train_dir, test = _DataSet(test_images, test_labels, **options) return _Datasets(train=train, validation=validation, test=test) + diff --git a/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_lstm_test.py b/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_lstm_test.py index dd7005ace4d..66a1b41bf30 100644 --- a/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_lstm_test.py +++ b/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_lstm_test.py @@ -22,7 +22,7 @@ import numpy as np from six.moves import range import tensorflow.compat.v1 as tf -from tensorflow.examples.tutorials.mnist import input_data +from tensorflow.lite.experimental.examples.lstm import input_data from tensorflow.python.framework import test_util from tensorflow.python.platform import test diff --git a/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_rnn_test.py b/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_rnn_test.py index 90b758e82fc..f07717cb07a 100644 --- a/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_rnn_test.py +++ b/tensorflow/lite/experimental/examples/lstm/unidirectional_sequence_rnn_test.py @@ -22,7 +22,7 @@ import numpy as np from six.moves import range import tensorflow.compat.v1 as tf -from tensorflow.examples.tutorials.mnist import input_data +from tensorflow.lite.experimental.examples.lstm import input_data from tensorflow.python.framework import test_util from tensorflow.python.platform import test