TensorFlow: Upstream latest changes to Git.

Changes:
- Updates to installation instructions.
- Updates to documentation.
- Minor modifications and tests for word2vec.

Base CL: 107284192
diff --git a/README.md b/README.md
index a52845a..2f8dac4 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,66 @@
 networks research.  The system is general enough to be applicable in a wide
 variety of other domains, as well.
 
+# Download and Setup
+
+For detailed installation instructions, see
+[here](g3doc/get_started/os_setup.md).
+
+## Binary Installation
+
+### Ubuntu/Linux
+
+Make sure you have [pip](https://pypi.python.org/pypi/pip) installed:
+
+```sh
+$ sudo apt-get install python-pip
+```
+
+Install TensorFlow:
+
+```sh
+# For CPU-only version
+$ sudo pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
+
+# For GPU-enabled version
+$ sudo pip install https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
+```
+
+### Mac OS X
+
+Make sure you have [pip](https://pypi.python.org/pypi/pip) installed:
+
+If using `easy_install`:
+
+```sh
+$ sudo easy_install pip
+```
+
+Install TensorFlow (only CPU binary version is currently available).
+
+```sh
+$ sudo pip install https://storage.googleapis.com/tensorflow/mac/tensorflow-0.5.0-py2-none-any.whl
+```
+
+### Try your first TensorFlow program
+
+```sh
+$ python
+
+>>> import tensorflow as tf
+>>> hello = tf.constant('Hello, TensorFlow!')
+>>> sess = tf.Session()
+>>> print sess.run(hello)
+Hello, TensorFlow!
+>>> a = tf.constant(10)
+>>> b = tf.constant(32)
+>>> print sess.run(a+b)
+42
+>>>
+
+```
+
+
 ##For more information
 
-* [Installation and setup instructions](/tensorflow/g3doc/get_started/os_setup.md)
 * [TensorFlow website](http://tensorflow.org)
diff --git a/tensorflow/core/framework/tensor.proto b/tensorflow/core/framework/tensor.proto
index b42694a..a47c7b7 100644
--- a/tensorflow/core/framework/tensor.proto
+++ b/tensorflow/core/framework/tensor.proto
@@ -10,7 +10,7 @@
 message TensorProto {
   DataType dtype = 1;
 
-  // Shape of the tensor.  TODO(mdevin): sort out the 0-rank issues.
+  // Shape of the tensor.  TODO(touts): sort out the 0-rank issues.
   TensorShapeProto tensor_shape = 2;
 
   // Only one of the representations below is set, one of "tensor_contents" and
diff --git a/tensorflow/core/kernels/softmax_op.h b/tensorflow/core/kernels/softmax_op.h
index 69bd531..030db4b 100644
--- a/tensorflow/core/kernels/softmax_op.h
+++ b/tensorflow/core/kernels/softmax_op.h
@@ -46,7 +46,7 @@
     Eigen::IndexList<Eigen::type2index<1>, int> one_by_class;
     one_by_class.set(1, num_classes);
 #endif
-    // NOTE(mdevin): If you modify this implementation please run
+    // NOTE(touts): If you modify this implementation please run
     // the ImageNetSoftmaxFwd benchmark in core_ops_test.cc.
     //
     // softmax = exp(logits - max(logits along classes));
diff --git a/tensorflow/core/kernels/xent_op.h b/tensorflow/core/kernels/xent_op.h
index edb7d81..46af840 100644
--- a/tensorflow/core/kernels/xent_op.h
+++ b/tensorflow/core/kernels/xent_op.h
@@ -35,7 +35,7 @@
                       typename TTypes<T>::Matrix scratch,
                       typename TTypes<T>::Vec loss,
                       typename TTypes<T>::Matrix backprop) {
-    // NOTE(mdevin): This duplicates some of the computations in softmax_op
+    // NOTE(touts): This duplicates some of the computations in softmax_op
     // because we need the intermediate (logits -max(logits)) values to
     // avoid a log(exp()) in the computation of the loss.
 
diff --git a/tensorflow/core/lib/histogram/histogram.h b/tensorflow/core/lib/histogram/histogram.h
index 9b655f3..3e1e078 100644
--- a/tensorflow/core/lib/histogram/histogram.h
+++ b/tensorflow/core/lib/histogram/histogram.h
@@ -97,7 +97,7 @@
 
   void Clear();
 
-  // TODO(mdevin): It might be a good idea to provide a AddN(<many values>)
+  // TODO(touts): It might be a good idea to provide a AddN(<many values>)
   // method to avoid grabbing/releasing the lock when adding many values.
   void Add(double value);
 
diff --git a/tensorflow/core/public/tensor_shape.h b/tensorflow/core/public/tensor_shape.h
index a889b8b..de4f60e 100644
--- a/tensorflow/core/public/tensor_shape.h
+++ b/tensorflow/core/public/tensor_shape.h
@@ -63,7 +63,7 @@
 
   /// \brief Returns the number of elements in dimension "d".
   /// REQUIRES: "0 <= d < dims()"
-  // TODO(mdevin): Rename to dimension() to match Eigen::Tensor::dimension()?
+  // TODO(touts): Rename to dimension() to match Eigen::Tensor::dimension()?
   int64 dim_size(int d) const {
     DCHECK_GE(d, 0);
     DCHECK_LT(d, dims());
diff --git a/tensorflow/core/util/event.proto b/tensorflow/core/util/event.proto
index 5d67823..b2d0982 100644
--- a/tensorflow/core/util/event.proto
+++ b/tensorflow/core/util/event.proto
@@ -12,7 +12,7 @@
   // Timestamp of the event.
   double wall_time = 1;
 
-  // Globale step of the event.
+  // Global step of the event.
   int64 step = 2;
 
   oneof what {
diff --git a/tensorflow/examples/android/README.md b/tensorflow/examples/android/README.md
index 8a64415..a7c90fe 100644
--- a/tensorflow/examples/android/README.md
+++ b/tensorflow/examples/android/README.md
@@ -20,7 +20,6 @@
 "The external label '//external:android/sdk' is not bound to anything" will
 be reported.
 
-
 To build the APK, run this from your workspace root:
 ```
 bazel build //tensorflow/examples/android:tensorflow_demo -c opt --copt=-mfpu=neon
@@ -29,11 +28,19 @@
 otherwise non-problematic issue) in Eigen will halt the application during
 execution. This issue will be corrected in an upcoming release.
 
-If adb debugging is enabled on your device, you may instead use the following
-command from your workspace root to automatically build and install:
+If adb debugging is enabled on your Android 5.0 or later device, you may then
+use the following command from your workspace root to install the APK once
+built:
+'''
+adb install -r -g bazel-bin/tensorflow/examples/android/tensorflow_demo_incremental.apk
+'''
+
+Alternatively, a streamlined means of building, installing and running in one
+command is:
 ```
-bazel mobile-install //tensorflow/examples/android:tensorflow_demo -c opt --copt=-mfpu=neon
+bazel mobile-install //tensorflow/examples/android:tensorflow_demo -c opt --start_app --copt=-mfpu=neon
 ```
 
-Add the "--start_app" flag if you wish to automatically start the app after
-installing. Otherwise, find the application icon labeled "Tensorflow Demo".
+If camera permission errors are encountered (possible on Android Marshmallow or
+above), then the adb install command above should be used instead, as it
+automatically grants the required camera permissions with '-g'.
diff --git a/tensorflow/g3doc/api_docs/index.md b/tensorflow/g3doc/api_docs/index.md
index 7234bf4..a4a5b50 100644
--- a/tensorflow/g3doc/api_docs/index.md
+++ b/tensorflow/g3doc/api_docs/index.md
@@ -9,7 +9,7 @@
 languages like Go, Java, Javascript, Lua R, and perhaps others. With SWIG, it's
 relatively easy to contribute a TensorFlow interface to your favorite language.
 
-Note: Many practical aspects of ssage are covered in the Mechanics tab, and
+Note: Many practical aspects of usage are covered in the Mechanics tab, and
 some additional documentation not specific to any particular language API is
 available in the Resources tab.
 
diff --git a/tensorflow/g3doc/api_docs/python/array_ops.md b/tensorflow/g3doc/api_docs/python/array_ops.md
index eecb442..282e0c6 100644
--- a/tensorflow/g3doc/api_docs/python/array_ops.md
+++ b/tensorflow/g3doc/api_docs/python/array_ops.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Tensor Transformations
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Casting](#AUTOGENERATED-casting)
diff --git a/tensorflow/g3doc/api_docs/python/client.md b/tensorflow/g3doc/api_docs/python/client.md
index b37057e..3ab0af0 100644
--- a/tensorflow/g3doc/api_docs/python/client.md
+++ b/tensorflow/g3doc/api_docs/python/client.md
@@ -299,7 +299,8 @@
 or `Recv` op, there will be no corresponding
 [`Operation`](framework.md#Operation) object.  In that case, this
 will return `None`, and you should instead use the
-[`node_def`](OpError.node_def) to discover information about the op.
+[`OpError.node_def`](#OpError.node_def) to discover information about the
+op.
 
 ##### Returns:
 
@@ -536,7 +537,7 @@
 
 For example, running a [`queue.enqueue()`](io_ops.md#QueueBase.enqueue)
 operation may raise `AbortedError` if a
-[`queue.close()`](io_ops.md@QueueBase.close) operation previously ran.
+[`queue.close()`](io_ops.md#QueueBase.close) operation previously ran.
 
 - - -
 
diff --git a/tensorflow/g3doc/api_docs/python/constant_op.md b/tensorflow/g3doc/api_docs/python/constant_op.md
index 34d2b51..ab19844 100644
--- a/tensorflow/g3doc/api_docs/python/constant_op.md
+++ b/tensorflow/g3doc/api_docs/python/constant_op.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Constants, Sequences, and Random Values
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Constant Value Tensors](#AUTOGENERATED-constant-value-tensors)
diff --git a/tensorflow/g3doc/api_docs/python/control_flow_ops.md b/tensorflow/g3doc/api_docs/python/control_flow_ops.md
index ad4321f..4d96984 100644
--- a/tensorflow/g3doc/api_docs/python/control_flow_ops.md
+++ b/tensorflow/g3doc/api_docs/python/control_flow_ops.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Control Flow
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Control Flow Operations](#AUTOGENERATED-control-flow-operations)
diff --git a/tensorflow/g3doc/api_docs/python/framework.md b/tensorflow/g3doc/api_docs/python/framework.md
index e28daaa..0614c68 100644
--- a/tensorflow/g3doc/api_docs/python/framework.md
+++ b/tensorflow/g3doc/api_docs/python/framework.md
@@ -33,7 +33,7 @@
 
 <!-- TOC-END This section was generated by neural network, THANKS FOR READING! -->
 
-Import names from the framework library.
+Classes and functions for building TensorFlow graphs.
 
 ## Core graph data structures <div class="md-anchor" id="AUTOGENERATED-core-graph-data-structures">{#AUTOGENERATED-core-graph-data-structures}</div>
 
@@ -126,6 +126,10 @@
 
 Returns a serialized `GraphDef` representation of this graph.
 
+The serialized `GraphDef` can be imported into another `Graph`
+(using [`import_graph_def()`](#import_graph_def)) or used with the
+[C++ Session API](../cc/index.md).
+
 This method is thread-safe.
 
 ##### Args:
@@ -137,8 +141,7 @@
 
 ##### Returns:
 
-  A
-  [`GraphDef`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/graph.proto)
+  A [`GraphDef`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/graph.proto)
   protocol buffer.
 
 
diff --git a/tensorflow/g3doc/api_docs/python/image.md b/tensorflow/g3doc/api_docs/python/image.md
index 6b3d6c3..0baa28f 100644
--- a/tensorflow/g3doc/api_docs/python/image.md
+++ b/tensorflow/g3doc/api_docs/python/image.md
@@ -1,32 +1,36 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Images
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
-* [Encoding and Decoding.](#AUTOGENERATED-encoding-and-decoding.)
+* [Encoding and Decoding](#AUTOGENERATED-encoding-and-decoding)
   * [tf.image.decode_jpeg(contents, channels=None, ratio=None, fancy_upscaling=None, try_recover_truncated=None, acceptable_fraction=None, name=None)](#decode_jpeg)
   * [tf.image.encode_jpeg(image, format=None, quality=None, progressive=None, optimize_size=None, chroma_downsampling=None, density_unit=None, x_density=None, y_density=None, xmp_metadata=None, name=None)](#encode_jpeg)
   * [tf.image.decode_png(contents, channels=None, name=None)](#decode_png)
   * [tf.image.encode_png(image, compression=None, name=None)](#encode_png)
-* [Resizing.](#AUTOGENERATED-resizing.)
+* [Resizing](#AUTOGENERATED-resizing)
   * [tf.image.resize_images(images, new_height, new_width, method=0)](#resize_images)
   * [tf.image.resize_area(images, size, name=None)](#resize_area)
   * [tf.image.resize_bicubic(images, size, name=None)](#resize_bicubic)
   * [tf.image.resize_bilinear(images, size, name=None)](#resize_bilinear)
   * [tf.image.resize_nearest_neighbor(images, size, name=None)](#resize_nearest_neighbor)
-* [Cropping.](#AUTOGENERATED-cropping.)
+* [Cropping](#AUTOGENERATED-cropping)
   * [tf.image.resize_image_with_crop_or_pad(image, target_height, target_width)](#resize_image_with_crop_or_pad)
   * [tf.image.pad_to_bounding_box(image, offset_height, offset_width, target_height, target_width)](#pad_to_bounding_box)
   * [tf.image.crop_to_bounding_box(image, offset_height, offset_width, target_height, target_width)](#crop_to_bounding_box)
   * [tf.image.random_crop(image, size, seed=None, name=None)](#random_crop)
   * [tf.image.extract_glimpse(input, size, offsets, centered=None, normalized=None, uniform_noise=None, name=None)](#extract_glimpse)
-* [Flipping and Transposing.](#AUTOGENERATED-flipping-and-transposing.)
+* [Flipping and Transposing](#AUTOGENERATED-flipping-and-transposing)
   * [tf.image.flip_up_down(image)](#flip_up_down)
   * [tf.image.random_flip_up_down(image, seed=None)](#random_flip_up_down)
   * [tf.image.flip_left_right(image)](#flip_left_right)
   * [tf.image.random_flip_left_right(image, seed=None)](#random_flip_left_right)
   * [tf.image.transpose_image(image)](#transpose_image)
-* [Image Adjustments.](#AUTOGENERATED-image-adjustments.)
+* [Image Adjustments](#AUTOGENERATED-image-adjustments)
   * [tf.image.adjust_brightness(image, delta, min_value=None, max_value=None)](#adjust_brightness)
   * [tf.image.random_brightness(image, max_delta, seed=None)](#random_brightness)
   * [tf.image.adjust_contrast(images, contrast_factor, min_value=None, max_value=None)](#adjust_contrast)
@@ -36,7 +40,7 @@
 
 <!-- TOC-END This section was generated by neural network, THANKS FOR READING! -->
 
-## Encoding and Decoding. <div class="md-anchor" id="AUTOGENERATED-encoding-and-decoding.">{#AUTOGENERATED-encoding-and-decoding.}</div>
+## Encoding and Decoding <div class="md-anchor" id="AUTOGENERATED-encoding-and-decoding">{#AUTOGENERATED-encoding-and-decoding}</div>
 
 TensorFlow provides Ops to decode and encode JPEG and PNG formats.  Encoded
 images are represented by scalar string Tensors, decoded images by 3-D uint8
@@ -211,7 +215,7 @@
 
 
 
-## Resizing. <div class="md-anchor" id="AUTOGENERATED-resizing.">{#AUTOGENERATED-resizing.}</div>
+## Resizing <div class="md-anchor" id="AUTOGENERATED-resizing">{#AUTOGENERATED-resizing}</div>
 
 The resizing Ops accept input images as tensors of several types.  They always
 output resized images as float32 tensors.
@@ -376,7 +380,7 @@
 
 
 
-## Cropping. <div class="md-anchor" id="AUTOGENERATED-cropping.">{#AUTOGENERATED-cropping.}</div>
+## Cropping <div class="md-anchor" id="AUTOGENERATED-cropping">{#AUTOGENERATED-cropping}</div>
 
 - - -
 
@@ -555,7 +559,7 @@
 
 
 
-## Flipping and Transposing. <div class="md-anchor" id="AUTOGENERATED-flipping-and-transposing.">{#AUTOGENERATED-flipping-and-transposing.}</div>
+## Flipping and Transposing <div class="md-anchor" id="AUTOGENERATED-flipping-and-transposing">{#AUTOGENERATED-flipping-and-transposing}</div>
 
 - - -
 
@@ -687,7 +691,7 @@
 
 
 
-## Image Adjustments. <div class="md-anchor" id="AUTOGENERATED-image-adjustments.">{#AUTOGENERATED-image-adjustments.}</div>
+## Image Adjustments <div class="md-anchor" id="AUTOGENERATED-image-adjustments">{#AUTOGENERATED-image-adjustments}</div>
 
 TensorFlow provides functions to adjust images in various ways: brightness,
 contrast, hue, and saturation.  Each adjustment can be done with predefined
diff --git a/tensorflow/g3doc/api_docs/python/index.md b/tensorflow/g3doc/api_docs/python/index.md
index 72c0a40..8750d0a 100644
--- a/tensorflow/g3doc/api_docs/python/index.md
+++ b/tensorflow/g3doc/api_docs/python/index.md
@@ -2,336 +2,349 @@
 
 # TensorFlow Python reference documentation
 
-* <b>[Building Graphs](framework.md)</b>: [class DType](framework.md#DType),
-    [class Dimension](framework.md#Dimension),
-    [class Graph](framework.md#Graph),
-    [class GraphKeys](framework.md#GraphKeys),
-    [NoGradient](framework.md#NoGradient),
-    [class Operation](framework.md#Operation),
-    [class RegisterGradient](framework.md#RegisterGradient),
-    [class RegisterShape](framework.md#RegisterShape),
-    [class Tensor](framework.md#Tensor),
-    [class TensorShape](framework.md#TensorShape),
-    [add_to_collection](framework.md#add_to_collection),
-    [as_dtype](framework.md#as_dtype),
-    [control_dependencies](framework.md#control_dependencies),
-    [convert_to_tensor](framework.md#convert_to_tensor),
-    [device](framework.md#device),
-    [get_collection](framework.md#get_collection),
-    [get_default_graph](framework.md#get_default_graph),
-    [get_seed](framework.md#get_seed),
-    [import_graph_def](framework.md#import_graph_def),
-    [name_scope](framework.md#name_scope),
-    [op_scope](framework.md#op_scope)
+* **[Building Graphs](framework.md)**:
+  * [`add_to_collection`](framework.md#add_to_collection)
+  * [`as_dtype`](framework.md#as_dtype)
+  * [`control_dependencies`](framework.md#control_dependencies)
+  * [`convert_to_tensor`](framework.md#convert_to_tensor)
+  * [`device`](framework.md#device)
+  * [`Dimension`](framework.md#Dimension)
+  * [`DType`](framework.md#DType)
+  * [`get_collection`](framework.md#get_collection)
+  * [`get_default_graph`](framework.md#get_default_graph)
+  * [`get_seed`](framework.md#get_seed)
+  * [`Graph`](framework.md#Graph)
+  * [`GraphKeys`](framework.md#GraphKeys)
+  * [`import_graph_def`](framework.md#import_graph_def)
+  * [`name_scope`](framework.md#name_scope)
+  * [`NoGradient`](framework.md#NoGradient)
+  * [`op_scope`](framework.md#op_scope)
+  * [`Operation`](framework.md#Operation)
+  * [`RegisterGradient`](framework.md#RegisterGradient)
+  * [`RegisterShape`](framework.md#RegisterShape)
+  * [`Tensor`](framework.md#Tensor)
+  * [`TensorShape`](framework.md#TensorShape)
 
-* <b>[Constants, Sequences, and Random Values](constant_op.md)</b>: [constant](constant_op.md#constant),
-    [fill](constant_op.md#fill),
-    [linspace](constant_op.md#linspace),
-    [ones](constant_op.md#ones),
-    [ones_like](constant_op.md#ones_like),
-    [random_normal](constant_op.md#random_normal),
-    [random_shuffle](constant_op.md#random_shuffle),
-    [random_uniform](constant_op.md#random_uniform),
-    [range](constant_op.md#range),
-    [set_random_seed](constant_op.md#set_random_seed),
-    [truncated_normal](constant_op.md#truncated_normal),
-    [zeros](constant_op.md#zeros),
-    [zeros_like](constant_op.md#zeros_like)
+* **[Constants, Sequences, and Random Values](constant_op.md)**:
+  * [`constant`](constant_op.md#constant)
+  * [`fill`](constant_op.md#fill)
+  * [`linspace`](constant_op.md#linspace)
+  * [`ones`](constant_op.md#ones)
+  * [`ones_like`](constant_op.md#ones_like)
+  * [`random_normal`](constant_op.md#random_normal)
+  * [`random_shuffle`](constant_op.md#random_shuffle)
+  * [`random_uniform`](constant_op.md#random_uniform)
+  * [`range`](constant_op.md#range)
+  * [`set_random_seed`](constant_op.md#set_random_seed)
+  * [`truncated_normal`](constant_op.md#truncated_normal)
+  * [`zeros`](constant_op.md#zeros)
+  * [`zeros_like`](constant_op.md#zeros_like)
 
-* <b>[Variables](state_ops.md)</b>: [class IndexedSlices](state_ops.md#IndexedSlices),
-    [class Saver](state_ops.md#Saver),
-    [class Variable](state_ops.md#Variable),
-    [all_variables](state_ops.md#all_variables),
-    [assert_variables_initialized](state_ops.md#assert_variables_initialized),
-    [assign](state_ops.md#assign),
-    [assign_add](state_ops.md#assign_add),
-    [assign_sub](state_ops.md#assign_sub),
-    [constant_initializer](state_ops.md#constant_initializer),
-    [count_up_to](state_ops.md#count_up_to),
-    [device](state_ops.md#device),
-    [get_checkpoint_state](state_ops.md#get_checkpoint_state),
-    [get_variable](state_ops.md#get_variable),
-    [get_variable_scope](state_ops.md#get_variable_scope),
-    [initialize_all_variables](state_ops.md#initialize_all_variables),
-    [initialize_variables](state_ops.md#initialize_variables),
-    [latest_checkpoint](state_ops.md#latest_checkpoint),
-    [random_normal_initializer](state_ops.md#random_normal_initializer),
-    [random_uniform_initializer](state_ops.md#random_uniform_initializer),
-    [scatter_add](state_ops.md#scatter_add),
-    [scatter_sub](state_ops.md#scatter_sub),
-    [scatter_update](state_ops.md#scatter_update),
-    [sparse_mask](state_ops.md#sparse_mask),
-    [trainable_variables](state_ops.md#trainable_variables),
-    [truncated_normal_initializer](state_ops.md#truncated_normal_initializer),
-    [uniform_unit_scaling_initializer](state_ops.md#uniform_unit_scaling_initializer),
-    [update_checkpoint_state](state_ops.md#update_checkpoint_state),
-    [variable_scope](state_ops.md#variable_scope),
-    [zeros_initializer](state_ops.md#zeros_initializer)
+* **[Variables](state_ops.md)**:
+  * [`all_variables`](state_ops.md#all_variables)
+  * [`assert_variables_initialized`](state_ops.md#assert_variables_initialized)
+  * [`assign`](state_ops.md#assign)
+  * [`assign_add`](state_ops.md#assign_add)
+  * [`assign_sub`](state_ops.md#assign_sub)
+  * [`constant_initializer`](state_ops.md#constant_initializer)
+  * [`count_up_to`](state_ops.md#count_up_to)
+  * [`device`](state_ops.md#device)
+  * [`get_checkpoint_state`](state_ops.md#get_checkpoint_state)
+  * [`get_variable`](state_ops.md#get_variable)
+  * [`get_variable_scope`](state_ops.md#get_variable_scope)
+  * [`IndexedSlices`](state_ops.md#IndexedSlices)
+  * [`initialize_all_variables`](state_ops.md#initialize_all_variables)
+  * [`initialize_variables`](state_ops.md#initialize_variables)
+  * [`latest_checkpoint`](state_ops.md#latest_checkpoint)
+  * [`random_normal_initializer`](state_ops.md#random_normal_initializer)
+  * [`random_uniform_initializer`](state_ops.md#random_uniform_initializer)
+  * [`Saver`](state_ops.md#Saver)
+  * [`scatter_add`](state_ops.md#scatter_add)
+  * [`scatter_sub`](state_ops.md#scatter_sub)
+  * [`scatter_update`](state_ops.md#scatter_update)
+  * [`sparse_mask`](state_ops.md#sparse_mask)
+  * [`trainable_variables`](state_ops.md#trainable_variables)
+  * [`truncated_normal_initializer`](state_ops.md#truncated_normal_initializer)
+  * [`uniform_unit_scaling_initializer`](state_ops.md#uniform_unit_scaling_initializer)
+  * [`update_checkpoint_state`](state_ops.md#update_checkpoint_state)
+  * [`Variable`](state_ops.md#Variable)
+  * [`variable_scope`](state_ops.md#variable_scope)
+  * [`zeros_initializer`](state_ops.md#zeros_initializer)
 
-* <b>[Tensor Transformations](array_ops.md)</b>: [cast](array_ops.md#cast),
-    [concat](array_ops.md#concat),
-    [dynamic_partition](array_ops.md#dynamic_partition),
-    [dynamic_stitch](array_ops.md#dynamic_stitch),
-    [expand_dims](array_ops.md#expand_dims),
-    [gather](array_ops.md#gather),
-    [pack](array_ops.md#pack),
-    [pad](array_ops.md#pad),
-    [rank](array_ops.md#rank),
-    [reshape](array_ops.md#reshape),
-    [reverse](array_ops.md#reverse),
-    [reverse_sequence](array_ops.md#reverse_sequence),
-    [shape](array_ops.md#shape),
-    [size](array_ops.md#size),
-    [slice](array_ops.md#slice),
-    [split](array_ops.md#split),
-    [squeeze](array_ops.md#squeeze),
-    [string_to_number](array_ops.md#string_to_number),
-    [tile](array_ops.md#tile),
-    [to_bfloat16](array_ops.md#to_bfloat16),
-    [to_double](array_ops.md#to_double),
-    [to_float](array_ops.md#to_float),
-    [to_int32](array_ops.md#to_int32),
-    [to_int64](array_ops.md#to_int64),
-    [transpose](array_ops.md#transpose),
-    [unpack](array_ops.md#unpack)
+* **[Tensor Transformations](array_ops.md)**:
+  * [`cast`](array_ops.md#cast)
+  * [`concat`](array_ops.md#concat)
+  * [`dynamic_partition`](array_ops.md#dynamic_partition)
+  * [`dynamic_stitch`](array_ops.md#dynamic_stitch)
+  * [`expand_dims`](array_ops.md#expand_dims)
+  * [`gather`](array_ops.md#gather)
+  * [`pack`](array_ops.md#pack)
+  * [`pad`](array_ops.md#pad)
+  * [`rank`](array_ops.md#rank)
+  * [`reshape`](array_ops.md#reshape)
+  * [`reverse`](array_ops.md#reverse)
+  * [`reverse_sequence`](array_ops.md#reverse_sequence)
+  * [`shape`](array_ops.md#shape)
+  * [`size`](array_ops.md#size)
+  * [`slice`](array_ops.md#slice)
+  * [`split`](array_ops.md#split)
+  * [`squeeze`](array_ops.md#squeeze)
+  * [`string_to_number`](array_ops.md#string_to_number)
+  * [`tile`](array_ops.md#tile)
+  * [`to_bfloat16`](array_ops.md#to_bfloat16)
+  * [`to_double`](array_ops.md#to_double)
+  * [`to_float`](array_ops.md#to_float)
+  * [`to_int32`](array_ops.md#to_int32)
+  * [`to_int64`](array_ops.md#to_int64)
+  * [`transpose`](array_ops.md#transpose)
+  * [`unpack`](array_ops.md#unpack)
 
-* <b>[Math](math_ops.md)</b>: [abs](math_ops.md#abs),
-    [accumulate_n](math_ops.md#accumulate_n),
-    [add](math_ops.md#add),
-    [add_n](math_ops.md#add_n),
-    [argmax](math_ops.md#argmax),
-    [argmin](math_ops.md#argmin),
-    [batch_cholesky](math_ops.md#batch_cholesky),
-    [batch_matmul](math_ops.md#batch_matmul),
-    [batch_matrix_determinant](math_ops.md#batch_matrix_determinant),
-    [batch_matrix_inverse](math_ops.md#batch_matrix_inverse),
-    [ceil](math_ops.md#ceil),
-    [cholesky](math_ops.md#cholesky),
-    [complex](math_ops.md#complex),
-    [complex_abs](math_ops.md#complex_abs),
-    [conj](math_ops.md#conj),
-    [cos](math_ops.md#cos),
-    [diag](math_ops.md#diag),
-    [div](math_ops.md#div),
-    [edit_distance](math_ops.md#edit_distance),
-    [exp](math_ops.md#exp),
-    [floor](math_ops.md#floor),
-    [imag](math_ops.md#imag),
-    [inv](math_ops.md#inv),
-    [invert_permutation](math_ops.md#invert_permutation),
-    [listdiff](math_ops.md#listdiff),
-    [log](math_ops.md#log),
-    [matmul](math_ops.md#matmul),
-    [matrix_determinant](math_ops.md#matrix_determinant),
-    [matrix_inverse](math_ops.md#matrix_inverse),
-    [maximum](math_ops.md#maximum),
-    [minimum](math_ops.md#minimum),
-    [mod](math_ops.md#mod),
-    [mul](math_ops.md#mul),
-    [neg](math_ops.md#neg),
-    [pow](math_ops.md#pow),
-    [real](math_ops.md#real),
-    [reduce_all](math_ops.md#reduce_all),
-    [reduce_any](math_ops.md#reduce_any),
-    [reduce_max](math_ops.md#reduce_max),
-    [reduce_mean](math_ops.md#reduce_mean),
-    [reduce_min](math_ops.md#reduce_min),
-    [reduce_prod](math_ops.md#reduce_prod),
-    [reduce_sum](math_ops.md#reduce_sum),
-    [round](math_ops.md#round),
-    [rsqrt](math_ops.md#rsqrt),
-    [segment_max](math_ops.md#segment_max),
-    [segment_mean](math_ops.md#segment_mean),
-    [segment_min](math_ops.md#segment_min),
-    [segment_prod](math_ops.md#segment_prod),
-    [segment_sum](math_ops.md#segment_sum),
-    [sign](math_ops.md#sign),
-    [sin](math_ops.md#sin),
-    [sparse_segment_mean](math_ops.md#sparse_segment_mean),
-    [sparse_segment_sum](math_ops.md#sparse_segment_sum),
-    [sqrt](math_ops.md#sqrt),
-    [square](math_ops.md#square),
-    [sub](math_ops.md#sub),
-    [transpose](math_ops.md#transpose),
-    [unique](math_ops.md#unique),
-    [unsorted_segment_sum](math_ops.md#unsorted_segment_sum),
-    [where](math_ops.md#where)
+* **[Math](math_ops.md)**:
+  * [`abs`](math_ops.md#abs)
+  * [`accumulate_n`](math_ops.md#accumulate_n)
+  * [`add`](math_ops.md#add)
+  * [`add_n`](math_ops.md#add_n)
+  * [`argmax`](math_ops.md#argmax)
+  * [`argmin`](math_ops.md#argmin)
+  * [`batch_cholesky`](math_ops.md#batch_cholesky)
+  * [`batch_matmul`](math_ops.md#batch_matmul)
+  * [`batch_matrix_determinant`](math_ops.md#batch_matrix_determinant)
+  * [`batch_matrix_inverse`](math_ops.md#batch_matrix_inverse)
+  * [`ceil`](math_ops.md#ceil)
+  * [`cholesky`](math_ops.md#cholesky)
+  * [`complex`](math_ops.md#complex)
+  * [`complex_abs`](math_ops.md#complex_abs)
+  * [`conj`](math_ops.md#conj)
+  * [`cos`](math_ops.md#cos)
+  * [`diag`](math_ops.md#diag)
+  * [`div`](math_ops.md#div)
+  * [`edit_distance`](math_ops.md#edit_distance)
+  * [`exp`](math_ops.md#exp)
+  * [`floor`](math_ops.md#floor)
+  * [`imag`](math_ops.md#imag)
+  * [`inv`](math_ops.md#inv)
+  * [`invert_permutation`](math_ops.md#invert_permutation)
+  * [`listdiff`](math_ops.md#listdiff)
+  * [`log`](math_ops.md#log)
+  * [`matmul`](math_ops.md#matmul)
+  * [`matrix_determinant`](math_ops.md#matrix_determinant)
+  * [`matrix_inverse`](math_ops.md#matrix_inverse)
+  * [`maximum`](math_ops.md#maximum)
+  * [`minimum`](math_ops.md#minimum)
+  * [`mod`](math_ops.md#mod)
+  * [`mul`](math_ops.md#mul)
+  * [`neg`](math_ops.md#neg)
+  * [`pow`](math_ops.md#pow)
+  * [`real`](math_ops.md#real)
+  * [`reduce_all`](math_ops.md#reduce_all)
+  * [`reduce_any`](math_ops.md#reduce_any)
+  * [`reduce_max`](math_ops.md#reduce_max)
+  * [`reduce_mean`](math_ops.md#reduce_mean)
+  * [`reduce_min`](math_ops.md#reduce_min)
+  * [`reduce_prod`](math_ops.md#reduce_prod)
+  * [`reduce_sum`](math_ops.md#reduce_sum)
+  * [`round`](math_ops.md#round)
+  * [`rsqrt`](math_ops.md#rsqrt)
+  * [`segment_max`](math_ops.md#segment_max)
+  * [`segment_mean`](math_ops.md#segment_mean)
+  * [`segment_min`](math_ops.md#segment_min)
+  * [`segment_prod`](math_ops.md#segment_prod)
+  * [`segment_sum`](math_ops.md#segment_sum)
+  * [`sign`](math_ops.md#sign)
+  * [`sin`](math_ops.md#sin)
+  * [`sparse_segment_mean`](math_ops.md#sparse_segment_mean)
+  * [`sparse_segment_sum`](math_ops.md#sparse_segment_sum)
+  * [`sqrt`](math_ops.md#sqrt)
+  * [`square`](math_ops.md#square)
+  * [`sub`](math_ops.md#sub)
+  * [`transpose`](math_ops.md#transpose)
+  * [`unique`](math_ops.md#unique)
+  * [`unsorted_segment_sum`](math_ops.md#unsorted_segment_sum)
+  * [`where`](math_ops.md#where)
 
-* <b>[Control Flow](control_flow_ops.md)</b>: [Assert](control_flow_ops.md#Assert),
-    [Print](control_flow_ops.md#Print),
-    [add_check_numerics_ops](control_flow_ops.md#add_check_numerics_ops),
-    [check_numerics](control_flow_ops.md#check_numerics),
-    [count_up_to](control_flow_ops.md#count_up_to),
-    [equal](control_flow_ops.md#equal),
-    [greater](control_flow_ops.md#greater),
-    [greater_equal](control_flow_ops.md#greater_equal),
-    [group](control_flow_ops.md#group),
-    [identity](control_flow_ops.md#identity),
-    [is_finite](control_flow_ops.md#is_finite),
-    [is_inf](control_flow_ops.md#is_inf),
-    [is_nan](control_flow_ops.md#is_nan),
-    [less](control_flow_ops.md#less),
-    [less_equal](control_flow_ops.md#less_equal),
-    [logical_and](control_flow_ops.md#logical_and),
-    [logical_not](control_flow_ops.md#logical_not),
-    [logical_or](control_flow_ops.md#logical_or),
-    [logical_xor](control_flow_ops.md#logical_xor),
-    [no_op](control_flow_ops.md#no_op),
-    [not_equal](control_flow_ops.md#not_equal),
-    [select](control_flow_ops.md#select),
-    [tuple](control_flow_ops.md#tuple),
-    [verify_tensor_all_finite](control_flow_ops.md#verify_tensor_all_finite),
-    [where](control_flow_ops.md#where)
+* **[Control Flow](control_flow_ops.md)**:
+  * [`add_check_numerics_ops`](control_flow_ops.md#add_check_numerics_ops)
+  * [`Assert`](control_flow_ops.md#Assert)
+  * [`check_numerics`](control_flow_ops.md#check_numerics)
+  * [`count_up_to`](control_flow_ops.md#count_up_to)
+  * [`equal`](control_flow_ops.md#equal)
+  * [`greater`](control_flow_ops.md#greater)
+  * [`greater_equal`](control_flow_ops.md#greater_equal)
+  * [`group`](control_flow_ops.md#group)
+  * [`identity`](control_flow_ops.md#identity)
+  * [`is_finite`](control_flow_ops.md#is_finite)
+  * [`is_inf`](control_flow_ops.md#is_inf)
+  * [`is_nan`](control_flow_ops.md#is_nan)
+  * [`less`](control_flow_ops.md#less)
+  * [`less_equal`](control_flow_ops.md#less_equal)
+  * [`logical_and`](control_flow_ops.md#logical_and)
+  * [`logical_not`](control_flow_ops.md#logical_not)
+  * [`logical_or`](control_flow_ops.md#logical_or)
+  * [`logical_xor`](control_flow_ops.md#logical_xor)
+  * [`no_op`](control_flow_ops.md#no_op)
+  * [`not_equal`](control_flow_ops.md#not_equal)
+  * [`Print`](control_flow_ops.md#Print)
+  * [`select`](control_flow_ops.md#select)
+  * [`tuple`](control_flow_ops.md#tuple)
+  * [`verify_tensor_all_finite`](control_flow_ops.md#verify_tensor_all_finite)
+  * [`where`](control_flow_ops.md#where)
 
-* <b>[Images](image.md)</b>: [adjust_brightness](image.md#adjust_brightness),
-    [adjust_contrast](image.md#adjust_contrast),
-    [crop_to_bounding_box](image.md#crop_to_bounding_box),
-    [decode_jpeg](image.md#decode_jpeg),
-    [decode_png](image.md#decode_png),
-    [encode_jpeg](image.md#encode_jpeg),
-    [encode_png](image.md#encode_png),
-    [extract_glimpse](image.md#extract_glimpse),
-    [flip_left_right](image.md#flip_left_right),
-    [flip_up_down](image.md#flip_up_down),
-    [pad_to_bounding_box](image.md#pad_to_bounding_box),
-    [per_image_whitening](image.md#per_image_whitening),
-    [random_brightness](image.md#random_brightness),
-    [random_contrast](image.md#random_contrast),
-    [random_crop](image.md#random_crop),
-    [random_flip_left_right](image.md#random_flip_left_right),
-    [random_flip_up_down](image.md#random_flip_up_down),
-    [resize_area](image.md#resize_area),
-    [resize_bicubic](image.md#resize_bicubic),
-    [resize_bilinear](image.md#resize_bilinear),
-    [resize_image_with_crop_or_pad](image.md#resize_image_with_crop_or_pad),
-    [resize_images](image.md#resize_images),
-    [resize_nearest_neighbor](image.md#resize_nearest_neighbor),
-    [transpose_image](image.md#transpose_image)
+* **[Images](image.md)**:
+  * [`adjust_brightness`](image.md#adjust_brightness)
+  * [`adjust_contrast`](image.md#adjust_contrast)
+  * [`crop_to_bounding_box`](image.md#crop_to_bounding_box)
+  * [`decode_jpeg`](image.md#decode_jpeg)
+  * [`decode_png`](image.md#decode_png)
+  * [`encode_jpeg`](image.md#encode_jpeg)
+  * [`encode_png`](image.md#encode_png)
+  * [`extract_glimpse`](image.md#extract_glimpse)
+  * [`flip_left_right`](image.md#flip_left_right)
+  * [`flip_up_down`](image.md#flip_up_down)
+  * [`pad_to_bounding_box`](image.md#pad_to_bounding_box)
+  * [`per_image_whitening`](image.md#per_image_whitening)
+  * [`random_brightness`](image.md#random_brightness)
+  * [`random_contrast`](image.md#random_contrast)
+  * [`random_crop`](image.md#random_crop)
+  * [`random_flip_left_right`](image.md#random_flip_left_right)
+  * [`random_flip_up_down`](image.md#random_flip_up_down)
+  * [`resize_area`](image.md#resize_area)
+  * [`resize_bicubic`](image.md#resize_bicubic)
+  * [`resize_bilinear`](image.md#resize_bilinear)
+  * [`resize_image_with_crop_or_pad`](image.md#resize_image_with_crop_or_pad)
+  * [`resize_images`](image.md#resize_images)
+  * [`resize_nearest_neighbor`](image.md#resize_nearest_neighbor)
+  * [`transpose_image`](image.md#transpose_image)
 
-* <b>[Sparse Tensors](sparse_ops.md)</b>: [class SparseTensor](sparse_ops.md#SparseTensor),
-    [class SparseTensorValue](sparse_ops.md#SparseTensorValue),
-    [shape](sparse_ops.md#shape),
-    [sparse_concat](sparse_ops.md#sparse_concat),
-    [sparse_fill_empty_rows](sparse_ops.md#sparse_fill_empty_rows),
-    [sparse_reorder](sparse_ops.md#sparse_reorder),
-    [sparse_retain](sparse_ops.md#sparse_retain),
-    [sparse_tensor_to_dense](sparse_ops.md#sparse_tensor_to_dense),
-    [sparse_to_dense](sparse_ops.md#sparse_to_dense),
-    [sparse_to_indicator](sparse_ops.md#sparse_to_indicator)
+* **[Sparse Tensors](sparse_ops.md)**:
+  * [`shape`](sparse_ops.md#shape)
+  * [`sparse_concat`](sparse_ops.md#sparse_concat)
+  * [`sparse_fill_empty_rows`](sparse_ops.md#sparse_fill_empty_rows)
+  * [`sparse_reorder`](sparse_ops.md#sparse_reorder)
+  * [`sparse_retain`](sparse_ops.md#sparse_retain)
+  * [`sparse_tensor_to_dense`](sparse_ops.md#sparse_tensor_to_dense)
+  * [`sparse_to_dense`](sparse_ops.md#sparse_to_dense)
+  * [`sparse_to_indicator`](sparse_ops.md#sparse_to_indicator)
+  * [`SparseTensor`](sparse_ops.md#SparseTensor)
+  * [`SparseTensorValue`](sparse_ops.md#SparseTensorValue)
 
-* <b>[Inputs and Readers](io_ops.md)</b>: [class FIFOQueue](io_ops.md#FIFOQueue),
-    [class FixedLengthRecordReader](io_ops.md#FixedLengthRecordReader),
-    [class IdentityReader](io_ops.md#IdentityReader),
-    [class QueueBase](io_ops.md#QueueBase),
-    [class RandomShuffleQueue](io_ops.md#RandomShuffleQueue),
-    [class ReaderBase](io_ops.md#ReaderBase),
-    [class TFRecordReader](io_ops.md#TFRecordReader),
-    [class TextLineReader](io_ops.md#TextLineReader),
-    [class WholeFileReader](io_ops.md#WholeFileReader),
-    [batch](io_ops.md#batch),
-    [batch_join](io_ops.md#batch_join),
-    [decode_csv](io_ops.md#decode_csv),
-    [decode_raw](io_ops.md#decode_raw),
-    [limit_epochs](io_ops.md#limit_epochs),
-    [match_filenames_once](io_ops.md#match_filenames_once),
-    [matching_files](io_ops.md#matching_files),
-    [parse_example](io_ops.md#parse_example),
-    [parse_single_example](io_ops.md#parse_single_example),
-    [placeholder](io_ops.md#placeholder),
-    [range_input_producer](io_ops.md#range_input_producer),
-    [read_file](io_ops.md#read_file),
-    [shuffle_batch](io_ops.md#shuffle_batch),
-    [shuffle_batch_join](io_ops.md#shuffle_batch_join),
-    [size](io_ops.md#size),
-    [slice_input_producer](io_ops.md#slice_input_producer),
-    [string_input_producer](io_ops.md#string_input_producer)
+* **[Inputs and Readers](io_ops.md)**:
+  * [`batch`](io_ops.md#batch)
+  * [`batch_join`](io_ops.md#batch_join)
+  * [`decode_csv`](io_ops.md#decode_csv)
+  * [`decode_raw`](io_ops.md#decode_raw)
+  * [`FIFOQueue`](io_ops.md#FIFOQueue)
+  * [`FixedLengthRecordReader`](io_ops.md#FixedLengthRecordReader)
+  * [`IdentityReader`](io_ops.md#IdentityReader)
+  * [`limit_epochs`](io_ops.md#limit_epochs)
+  * [`match_filenames_once`](io_ops.md#match_filenames_once)
+  * [`matching_files`](io_ops.md#matching_files)
+  * [`parse_example`](io_ops.md#parse_example)
+  * [`parse_single_example`](io_ops.md#parse_single_example)
+  * [`placeholder`](io_ops.md#placeholder)
+  * [`QueueBase`](io_ops.md#QueueBase)
+  * [`RandomShuffleQueue`](io_ops.md#RandomShuffleQueue)
+  * [`range_input_producer`](io_ops.md#range_input_producer)
+  * [`read_file`](io_ops.md#read_file)
+  * [`ReaderBase`](io_ops.md#ReaderBase)
+  * [`shuffle_batch`](io_ops.md#shuffle_batch)
+  * [`shuffle_batch_join`](io_ops.md#shuffle_batch_join)
+  * [`size`](io_ops.md#size)
+  * [`slice_input_producer`](io_ops.md#slice_input_producer)
+  * [`string_input_producer`](io_ops.md#string_input_producer)
+  * [`TextLineReader`](io_ops.md#TextLineReader)
+  * [`TFRecordReader`](io_ops.md#TFRecordReader)
+  * [`WholeFileReader`](io_ops.md#WholeFileReader)
 
-* <b>[Data IO (Python functions)](python_io.md)</b>: [class TFRecordWriter](python_io.md#TFRecordWriter),
-    [tf_record_iterator](python_io.md#tf_record_iterator)
+* **[Data IO (Python functions)](python_io.md)**:
+  * [`tf_record_iterator`](python_io.md#tf_record_iterator)
+  * [`TFRecordWriter`](python_io.md#TFRecordWriter)
 
-* <b>[Neural Network](nn.md)</b>: [avg_pool](nn.md#avg_pool),
-    [bias_add](nn.md#bias_add),
-    [compute_accidental_hits](nn.md#compute_accidental_hits),
-    [conv2d](nn.md#conv2d),
-    [depthwise_conv2d](nn.md#depthwise_conv2d),
-    [dropout](nn.md#dropout),
-    [embedding_lookup](nn.md#embedding_lookup),
-    [embedding_lookup_sparse](nn.md#embedding_lookup_sparse),
-    [fixed_unigram_candidate_sampler](nn.md#fixed_unigram_candidate_sampler),
-    [in_top_k](nn.md#in_top_k),
-    [l2_loss](nn.md#l2_loss),
-    [l2_normalize](nn.md#l2_normalize),
-    [learned_unigram_candidate_sampler](nn.md#learned_unigram_candidate_sampler),
-    [local_response_normalization](nn.md#local_response_normalization),
-    [log_uniform_candidate_sampler](nn.md#log_uniform_candidate_sampler),
-    [max_pool](nn.md#max_pool),
-    [max_pool_with_argmax](nn.md#max_pool_with_argmax),
-    [moments](nn.md#moments),
-    [nce_loss](nn.md#nce_loss),
-    [relu](nn.md#relu),
-    [relu6](nn.md#relu6),
-    [sampled_softmax_loss](nn.md#sampled_softmax_loss),
-    [separable_conv2d](nn.md#separable_conv2d),
-    [sigmoid](nn.md#sigmoid),
-    [sigmoid_cross_entropy_with_logits](nn.md#sigmoid_cross_entropy_with_logits),
-    [softmax](nn.md#softmax),
-    [softmax_cross_entropy_with_logits](nn.md#softmax_cross_entropy_with_logits),
-    [softplus](nn.md#softplus),
-    [tanh](nn.md#tanh),
-    [top_k](nn.md#top_k),
-    [uniform_candidate_sampler](nn.md#uniform_candidate_sampler)
+* **[Neural Network](nn.md)**:
+  * [`avg_pool`](nn.md#avg_pool)
+  * [`bias_add`](nn.md#bias_add)
+  * [`compute_accidental_hits`](nn.md#compute_accidental_hits)
+  * [`conv2d`](nn.md#conv2d)
+  * [`depthwise_conv2d`](nn.md#depthwise_conv2d)
+  * [`dropout`](nn.md#dropout)
+  * [`embedding_lookup`](nn.md#embedding_lookup)
+  * [`embedding_lookup_sparse`](nn.md#embedding_lookup_sparse)
+  * [`fixed_unigram_candidate_sampler`](nn.md#fixed_unigram_candidate_sampler)
+  * [`in_top_k`](nn.md#in_top_k)
+  * [`l2_loss`](nn.md#l2_loss)
+  * [`l2_normalize`](nn.md#l2_normalize)
+  * [`learned_unigram_candidate_sampler`](nn.md#learned_unigram_candidate_sampler)
+  * [`local_response_normalization`](nn.md#local_response_normalization)
+  * [`log_uniform_candidate_sampler`](nn.md#log_uniform_candidate_sampler)
+  * [`max_pool`](nn.md#max_pool)
+  * [`max_pool_with_argmax`](nn.md#max_pool_with_argmax)
+  * [`moments`](nn.md#moments)
+  * [`nce_loss`](nn.md#nce_loss)
+  * [`relu`](nn.md#relu)
+  * [`relu6`](nn.md#relu6)
+  * [`sampled_softmax_loss`](nn.md#sampled_softmax_loss)
+  * [`separable_conv2d`](nn.md#separable_conv2d)
+  * [`sigmoid`](nn.md#sigmoid)
+  * [`sigmoid_cross_entropy_with_logits`](nn.md#sigmoid_cross_entropy_with_logits)
+  * [`softmax`](nn.md#softmax)
+  * [`softmax_cross_entropy_with_logits`](nn.md#softmax_cross_entropy_with_logits)
+  * [`softplus`](nn.md#softplus)
+  * [`tanh`](nn.md#tanh)
+  * [`top_k`](nn.md#top_k)
+  * [`uniform_candidate_sampler`](nn.md#uniform_candidate_sampler)
 
-* <b>[Running Graphs](client.md)</b>: [class AbortedError](client.md#AbortedError),
-    [class AlreadyExistsError](client.md#AlreadyExistsError),
-    [class CancelledError](client.md#CancelledError),
-    [class DataLossError](client.md#DataLossError),
-    [class DeadlineExceededError](client.md#DeadlineExceededError),
-    [class FailedPreconditionError](client.md#FailedPreconditionError),
-    [class InternalError](client.md#InternalError),
-    [class InvalidArgumentError](client.md#InvalidArgumentError),
-    [class NotFoundError](client.md#NotFoundError),
-    [class OpError](client.md#OpError),
-    [class OutOfRangeError](client.md#OutOfRangeError),
-    [class PermissionDeniedError](client.md#PermissionDeniedError),
-    [class ResourceExhaustedError](client.md#ResourceExhaustedError),
-    [class Session](client.md#Session),
-    [class UnauthenticatedError](client.md#UnauthenticatedError),
-    [class UnavailableError](client.md#UnavailableError),
-    [class UnimplementedError](client.md#UnimplementedError),
-    [class UnknownError](client.md#UnknownError),
-    [get_default_session](client.md#get_default_session)
+* **[Running Graphs](client.md)**:
+  * [`AbortedError`](client.md#AbortedError)
+  * [`AlreadyExistsError`](client.md#AlreadyExistsError)
+  * [`CancelledError`](client.md#CancelledError)
+  * [`DataLossError`](client.md#DataLossError)
+  * [`DeadlineExceededError`](client.md#DeadlineExceededError)
+  * [`FailedPreconditionError`](client.md#FailedPreconditionError)
+  * [`get_default_session`](client.md#get_default_session)
+  * [`InternalError`](client.md#InternalError)
+  * [`InvalidArgumentError`](client.md#InvalidArgumentError)
+  * [`NotFoundError`](client.md#NotFoundError)
+  * [`OpError`](client.md#OpError)
+  * [`OutOfRangeError`](client.md#OutOfRangeError)
+  * [`PermissionDeniedError`](client.md#PermissionDeniedError)
+  * [`ResourceExhaustedError`](client.md#ResourceExhaustedError)
+  * [`Session`](client.md#Session)
+  * [`UnauthenticatedError`](client.md#UnauthenticatedError)
+  * [`UnavailableError`](client.md#UnavailableError)
+  * [`UnimplementedError`](client.md#UnimplementedError)
+  * [`UnknownError`](client.md#UnknownError)
 
-* <b>[Training](train.md)</b>: [class AdagradOptimizer](train.md#AdagradOptimizer),
-    [class AdamOptimizer](train.md#AdamOptimizer),
-    [class AggregationMethod](train.md#AggregationMethod),
-    [class Coordinator](train.md#Coordinator),
-    [class ExponentialMovingAverage](train.md#ExponentialMovingAverage),
-    [class FtrlOptimizer](train.md#FtrlOptimizer),
-    [class GradientDescentOptimizer](train.md#GradientDescentOptimizer),
-    [class MomentumOptimizer](train.md#MomentumOptimizer),
-    [class Optimizer](train.md#Optimizer),
-    [class QueueRunner](train.md#QueueRunner),
-    [class RMSPropOptimizer](train.md#RMSPropOptimizer),
-    [class SummaryWriter](train.md#SummaryWriter),
-    [add_queue_runner](train.md#add_queue_runner),
-    [clip_by_average_norm](train.md#clip_by_average_norm),
-    [clip_by_global_norm](train.md#clip_by_global_norm),
-    [clip_by_norm](train.md#clip_by_norm),
-    [clip_by_value](train.md#clip_by_value),
-    [exponential_decay](train.md#exponential_decay),
-    [global_norm](train.md#global_norm),
-    [global_step](train.md#global_step),
-    [gradients](train.md#gradients),
-    [histogram_summary](train.md#histogram_summary),
-    [image_summary](train.md#image_summary),
-    [merge_all_summaries](train.md#merge_all_summaries),
-    [merge_summary](train.md#merge_summary),
-    [scalar_summary](train.md#scalar_summary),
-    [start_queue_runners](train.md#start_queue_runners),
-    [stop_gradient](train.md#stop_gradient),
-    [summary_iterator](train.md#summary_iterator),
-    [write_graph](train.md#write_graph),
-    [zero_fraction](train.md#zero_fraction)
+* **[Training](train.md)**:
+  * [`AdagradOptimizer`](train.md#AdagradOptimizer)
+  * [`AdamOptimizer`](train.md#AdamOptimizer)
+  * [`add_queue_runner`](train.md#add_queue_runner)
+  * [`AggregationMethod`](train.md#AggregationMethod)
+  * [`clip_by_average_norm`](train.md#clip_by_average_norm)
+  * [`clip_by_global_norm`](train.md#clip_by_global_norm)
+  * [`clip_by_norm`](train.md#clip_by_norm)
+  * [`clip_by_value`](train.md#clip_by_value)
+  * [`Coordinator`](train.md#Coordinator)
+  * [`exponential_decay`](train.md#exponential_decay)
+  * [`ExponentialMovingAverage`](train.md#ExponentialMovingAverage)
+  * [`FtrlOptimizer`](train.md#FtrlOptimizer)
+  * [`global_norm`](train.md#global_norm)
+  * [`global_step`](train.md#global_step)
+  * [`GradientDescentOptimizer`](train.md#GradientDescentOptimizer)
+  * [`gradients`](train.md#gradients)
+  * [`histogram_summary`](train.md#histogram_summary)
+  * [`image_summary`](train.md#image_summary)
+  * [`merge_all_summaries`](train.md#merge_all_summaries)
+  * [`merge_summary`](train.md#merge_summary)
+  * [`MomentumOptimizer`](train.md#MomentumOptimizer)
+  * [`Optimizer`](train.md#Optimizer)
+  * [`QueueRunner`](train.md#QueueRunner)
+  * [`RMSPropOptimizer`](train.md#RMSPropOptimizer)
+  * [`scalar_summary`](train.md#scalar_summary)
+  * [`start_queue_runners`](train.md#start_queue_runners)
+  * [`stop_gradient`](train.md#stop_gradient)
+  * [`summary_iterator`](train.md#summary_iterator)
+  * [`SummaryWriter`](train.md#SummaryWriter)
+  * [`write_graph`](train.md#write_graph)
+  * [`zero_fraction`](train.md#zero_fraction)
 
 <div class="sections-order" style="display: none;">
 <!--
diff --git a/tensorflow/g3doc/api_docs/python/io_ops.md b/tensorflow/g3doc/api_docs/python/io_ops.md
index ab8c4aa..888c499 100644
--- a/tensorflow/g3doc/api_docs/python/io_ops.md
+++ b/tensorflow/g3doc/api_docs/python/io_ops.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Inputs and Readers
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Placeholders](#AUTOGENERATED-placeholders)
@@ -15,6 +19,7 @@
 * [Converting](#AUTOGENERATED-converting)
   * [tf.decode_csv(records, record_defaults, field_delim=None, name=None)](#decode_csv)
   * [tf.decode_raw(bytes, out_type, little_endian=None, name=None)](#decode_raw)
+  * [Example protocol buffer](#AUTOGENERATED-example-protocol-buffer)
   * [tf.parse_example(serialized, names=None, sparse_keys=None, sparse_types=None, dense_keys=None, dense_types=None, dense_defaults=None, dense_shapes=None, name='ParseExample')](#parse_example)
   * [tf.parse_single_example(serialized, names=None, sparse_keys=None, sparse_types=None, dense_keys=None, dense_types=None, dense_defaults=None, dense_shapes=None, name='ParseSingleExample')](#parse_single_example)
 * [Queues](#AUTOGENERATED-queues)
@@ -1061,109 +1066,106 @@
   of bytes divided by the number of bytes to represent out_type.
 
 
+
+- - -
+
+### Example protocol buffer <div class="md-anchor" id="AUTOGENERATED-example-protocol-buffer">{#AUTOGENERATED-example-protocol-buffer}</div>
+
+TensorFlow's [recommended format for training
+examples](../../how_tos/reading_data/index.md#standard-tensorflow-format)
+is serialized `Example` protocol buffers, [described
+here](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/example.proto).
+They contain `Features`, [described
+here](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/feature.proto).
+
 - - -
 
 ### tf.parse_example(serialized, names=None, sparse_keys=None, sparse_types=None, dense_keys=None, dense_types=None, dense_defaults=None, dense_shapes=None, name='ParseExample') <div class="md-anchor" id="parse_example">{#parse_example}</div>
 
-Parse Example protos.
+Parses `Example` protos.
 
-##### Args:
+Parses a number of serialized [`Example`]
+(https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/example.proto)
+protos given in `serialized`.
 
+`names` may contain descriptive names for the corresponding serialized protos.
+These may be useful for debugging purposes, but they have no effect on the
+output. If not `None`, `names` must be the same length as `serialized`.
 
-*  <b>serialized</b>: string vector, a batch of binary serialized Example protos.
-*  <b>names</b>: A string vector, the names of the serialized protos.
-    "names" may contain, e.g., table key (descriptive) names for the
-    corresponding serialized protos.  These are purely useful for debugging
-    purposes, and the presence of values here has no effect on the output.
-    "names" may be an empty vector, if no names are available.
-    If non-empty, this vector must be the same length as "serialized".
-*  <b>sparse_keys</b>: A string list of keys in the Examples' features.
-    These keys are associated with sparse values.
-*  <b>sparse_types</b>: A list of DTypes.
-    This list's length must match that of sparse_keys.  Currently
-    parse_example supports tf.float32 (FloatList), tf.int64 (Int64List),
-    and tf.string (BytesList).
-*  <b>dense_keys</b>: A string list of keys in the Examples' features.
-    These keys are associated with dense values.
-*  <b>dense_types</b>: A list of DTypes.
-    This list's length must match that of dense_keys.  Currently
-    parse_example supports tf.float32 (FloatList), tf.int64 (Int64List),
-    and tf.string (BytesList).
-*  <b>dense_defaults</b>: A dict of {key:Tensor} (some may be missing).
-    The keys of the dict must match the dense_keys of the feature.
-    If a key is not present in this dictionary, the corresponding dense
-    Feature is required in all elements of serialized.
-*  <b>dense_shapes</b>: A list of tuples.
-    Entries provide the shape of data in each dense Feature in features.
-    The length of dense_shapes must be the same as the length of dense_keys.
-    The number of elements in the Feature corresponding to dense_key[j]
-    must always have np.prod(dense_shapes[j]) entries.
-    If dense_shapes[j] == (D0, D1, ..., DN) then the the shape of output
-    Tensor dense_values[j] will be (|serialized|, D0, D1, ..., DN):
-    The dense outputs are just the inputs row-stacked by batch.
-*  <b>name</b>: (Optional) Name of Op in the graph.
+This op parses serialized examples into a dictionary mapping keys to `Tensor`
+and `SparseTensor` objects respectively, depending on whether the keys appear
+in `sparse_keys` or `dense_keys`.
 
-##### Returns:
+The key `dense_keys[j]` is mapped to a `Tensor` of type `dense_types[j]` and
+of shape `(serialized.size(),) + dense_shapes[j]`.
 
-  A dictionary mapping keys to Tensors and SparseTensors.
+`dense_defaults` provides defaults for values referenced using `dense_keys`.
+If a key is not present in this dictionary, the corresponding dense `Feature`
+is required in all elements of `serialized`.
 
-  The key dense_keys[j] is mapped to a tensor of type dense_types[j] and
-  of shape (serialized.size(),) + dense_shapes[j] (i.e., the dense outputs are
-  inputs, reshaped in row-major format and then row-stacked by batch).
+`dense_shapes[j]` provides the shape of each `Feature` entry referenced by
+`dense_keys[j]`. The number of elements in the `Feature` corresponding to
+`dense_key[j]` must always have `np.prod(dense_shapes[j])` entries. The
+returned `Tensor` for `dense_key[j]` has shape `[N] + dense_shape[j]`, where
+`N` is the number of `Example`s in `serialized`.
 
-  The key sparse_keys[j] is mapped to a SparseTensor of type sparse_types[j].
-  The SparseTensor represents a ragged matrix.  Its indices are [batch, index]
-  where "batch" is is the batch entry the value is from, and "index" is the
-  value's index in the list of values associated with that feature
-  and example.  For example, if one expects a tf.float32 sparse feature "ft"
-  and three serialized examples are provided:
+The key `sparse_keys[j]` is mapped to a `SparseTensor` of type
+`sparse_types[j]`. The `SparseTensor` represents a ragged matrix.
+Its indices are `[batch, index]` where `batch` is the batch entry the value
+is from, and `index` is the value's index in the list of values associated
+with that feature and example.
 
-  serialized = [
+Examples:
 
-*  <b>features</b>: 
-      { feature: [ key: { "ft" value: float_list: { value: [1.0, 2.0] } } ] },
-*  <b>features</b>: 
-      { feature: [] },
-*  <b>features</b>: 
-      { feature: [ key: { "ft" value: float_list: { value: [3.0] } } ] }
-  ]
+For example, if one expects a `tf.float32` sparse feature `ft` and three
+serialized `Example`s are provided:
 
-  then the output will look like:
+```
+serialized = [
+  features:
+    { feature: [ key: { "ft" value: float_list: { value: [1.0, 2.0] } } ] },
+  features:
+    { feature: [] },
+  features:
+    { feature: [ key: { "ft" value: float_list: { value: [3.0] } } ] }
+]
+```
 
-    {"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
-                        values=[1.0, 2.0, 3.0],
-                        shape=(3, 2)) }
+then the output will look like:
 
-##### Raises:
+```
+{"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
+                    values=[1.0, 2.0, 3.0],
+                    shape=(3, 2)) }
+```
 
+Given two `Example` input protos in `serialized`:
 
-*  <b>ValueError</b>: If sparse and dense keys intersect, or input lengths do not
-    match up for sparse_* (similarly for dense_*).
-*  <b>TypeError</b>: If an input is malformed.
+```
+[
+  features: {
+    feature: { key: "kw" value: { bytes_list: { value: [ "knit", "big" ] } } }
+    feature: { key: "gps" value: { float_list: { value: [] } } }
+  },
+  features: {
+    feature: { key: "kw" value: { bytes_list: { value: [ "emmy" ] } } }
+    feature: { key: "dank" value: { int64_list: { value: [ 42 ] } } }
+    feature: { key: "gps" value: { } }
+  }
+]
+```
 
-Example input, format, and output: Just Sparse Inputs
-================================================
+And arguments
 
-Given two brain.Example input protos:
+```
+  names: ["input0", "input1"],
+  sparse_keys: ["kw", "dank", "gps"]
+  sparse_types: [DT_STRING, DT_INT64, DT_FLOAT]
+```
 
+Then the output is a dictionary:
 
-*  <b>serialized</b>: // serialized versions of the protos below
-  [features: {
-
-*  <b>feature</b>: { key: "kw" value: { bytes_list: { value: [ "knit", "big" ] } } }
-*  <b>feature</b>: { key: "gps" value: { float_list: { value: [] } } }
-   },
-*  <b>features</b>: {
-*  <b>feature</b>: { key: "kw" value: { bytes_list: { value: [ "emmy" ] } } }
-*  <b>feature</b>: { key: "dank" value: { int64_list: { value: [ 42 ] } } }
-*  <b>feature</b>: { key: "gps" value: { } }
-  }]
-
-*  <b>names</b>: ["input0", "input1"],
-*  <b>sparse_keys</b>: ["kw", "dank", "gps"]
-*  <b>sparse_types</b>: [DT_STRING, DT_INT64, DT_FLOAT]
-
-Then the expected output is a dictionary:
+```python
 {
   "kw": SparseTensor(
       indices=[[0, 0], [0, 1], [1, 0]],
@@ -1178,78 +1180,96 @@
       values=[],
       shape=[2, 0]),
 }
+```
 
+For dense results in two serialized `Example`s:
 
-Example input, format, and output: Dense Inputs (without defaults)
-==================================================================
-
-Given two brain.Example input protos:
-
-
-*  <b>serialized</b>: // serialized versions of the protos below
-  [features: {
-
-*  <b>feature</b>: { key: "age" value: { int64_list: { value: [ 0 ] } } }
-*  <b>feature</b>: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
+```
+[
+  features: {
+    feature: { key: "age" value: { int64_list: { value: [ 0 ] } } }
+    feature: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
    },
-*  <b>features</b>: {
-*  <b>feature</b>: { key: "age" value: { int64_list: { value: [] } } }
-*  <b>feature</b>: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
-  }]
+   features: {
+    feature: { key: "age" value: { int64_list: { value: [] } } }
+    feature: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
+  }
+]
+```
 
-*  <b>names</b>: ["input0", "input1"],
-*  <b>dense_keys</b>: np.array(["age", "gender"])
-*  <b>dense_types</b>: [tf.int64, tf.string]
-*  <b>dense_defaults</b>: {
-  "age": -1  # defaults to -1 if missing
+We can use arguments:
+
+```
+names: ["input0", "input1"],
+dense_keys: np.array(["age", "gender"]),
+dense_types: [tf.int64, tf.string],
+dense_defaults: {
+  "age": -1  # "age" defaults to -1 if missing
              # "gender" has no specified default so it's required
 }
+dense_shapes: [(1,), (1,)],  # age, gender, label, weight
+```
 
-*  <b>dense_shapes</b>: [(1,), (1,)]  # age, gender, label, weight
+And the expected output is:
 
-Then the expected output is a dictionary:
+```python
 {
   "age": [[0], [-1]],
   "gender": [["f"], ["f"]],
 }
+```
+
+##### Args:
 
 
-Example input, format, and output: Dense Inputs (with defaults)
-===============================================================
+*  <b>serialized</b>: A list of strings, a batch of binary serialized `Example`
+    protos.
+*  <b>names</b>: A list of strings, the names of the serialized protos.
+*  <b>sparse_keys</b>: A list of string keys in the examples' features.
+    The results for these keys will be returned as `SparseTensor` objects.
+*  <b>sparse_types</b>: A list of `DTypes` of the same length as `sparse_keys`.
+    Only `tf.float32` (`FloatList`), `tf.int64` (`Int64List`),
+    and `tf.string` (`BytesList`) are supported.
+*  <b>dense_keys</b>: A list of string keys in the examples' features.
+    The results for these keys will be returned as `Tensor`s
+*  <b>dense_types</b>: A list of DTypes of the same length as `dense_keys`.
+    Only `tf.float32` (`FloatList`), `tf.int64` (`Int64List`),
+    and `tf.string` (`BytesList`) are supported.
+*  <b>dense_defaults</b>: A dict mapping string keys to `Tensor`s.
+    The keys of the dict must match the dense_keys of the feature.
+*  <b>dense_shapes</b>: A list of tuples with the same length as `dense_keys`.
+    The shape of the data for each dense feature referenced by `dense_keys`.
+*  <b>name</b>: A name for this operation (optional).
 
-Given two brain.Example input protos:
+##### Returns:
+
+  A `dict` mapping keys to `Tensor`s and `SparseTensor`s.
+
+##### Raises:
 
 
-*  <b>serialized</b>: // serialized versions of the protos below
-  [features: {
-
-*  <b>feature</b>: { key: "weight" value: { float_list: { value: [ 1.0 ] } } }
-   },
-*  <b>features</b>: {
-*  <b>feature</b>: { key: "label" value: { float_list: { value: [ -1.0, 0.0 ] } } }
-  }]
-
-*  <b>names</b>: ["input0", "input1"],
-*  <b>dense_keys</b>: np.array(["label", "weight"])
-*  <b>dense_defaults</b>: {
-  "label": [1.0, 2.0],  # float (default: vector)
-  "weight": 5.0         # float (default: scalar, 5.0)
-}
-
-*  <b>dense_shapes</b>: [(2,), (1,)]  # age, gender, label, weight
-
-Then the expected output is a dictionary:
-{
-  "label": [[1.0, 2.0], [-1.0, 0.0]],
-  "weight": [[1.0], [5.0]],
-}
+*  <b>ValueError</b>: If sparse and dense key sets intersect, or input lengths do not
+    match up.
 
 
 - - -
 
 ### tf.parse_single_example(serialized, names=None, sparse_keys=None, sparse_types=None, dense_keys=None, dense_types=None, dense_defaults=None, dense_shapes=None, name='ParseSingleExample') <div class="md-anchor" id="parse_single_example">{#parse_single_example}</div>
 
-Identical to parse_example but for scalar serialized and names.
+Parses a single `Example` proto.
+
+Similar to `parse_example`, except:
+
+For dense tensors, the returned `Tensor` is identical to the output of
+`parse_example`, except there is no batch dimension, the output shape is the
+same as the shape given in `dense_shape`.
+
+For `SparseTensor`s, the first (batch) column of the indices matrix is removed
+(the indices matrix is a column vector), the values vector is unchanged, and
+the first (batch_size) entry of the shape vector is removed (it is now a
+single element vector).
+
+See also `parse_example`.
 
 ##### Args:
 
@@ -1264,22 +1284,12 @@
 *  <b>dense_types</b>: See parse_example documentation for more details.
 *  <b>dense_defaults</b>: See parse_example documentation for more details.
 *  <b>dense_shapes</b>: See parse_example documentation for more details.
-*  <b>name</b>: Optional op name.
+*  <b>name</b>: A name for this operation (optional).
 
 ##### Returns:
 
   A dictionary mapping keys to Tensors and SparseTensors.
 
-  For dense tensors, the Tensor is identical to the output of parse_example,
-  except it is one less dimension (the first, batch, dimension is removed).
-
-  For SparseTensors:
-    The first (batch) column of the indices matrix is removed
-      (it is now a column vector).
-    The values vector is unchanged.
-    The first (batch_size) entry of the shape vector is removed
-      (it is now a single element vector).
-
 ##### Raises:
 
 
@@ -1632,7 +1642,7 @@
 ## Input pipeline <div class="md-anchor" id="AUTOGENERATED-input-pipeline">{#AUTOGENERATED-input-pipeline}</div>
 
 TensorFlow functions for setting up an input-prefetching pipeline.
-Please see the [reading data how-to](../../how_tos/reading_data.md)
+Please see the [reading data how-to](../../how_tos/reading_data/index.md)
 for context.
 
 ### Beginning of an input pipeline <div class="md-anchor" id="AUTOGENERATED-beginning-of-an-input-pipeline">{#AUTOGENERATED-beginning-of-an-input-pipeline}</div>
@@ -1822,41 +1832,45 @@
 
 Run a list of tensors to fill a queue to create batches of examples.
 
-This version enqueues a different list of tensors in different threads.
-Implemented using a queue -- a QueueRunner for the queue
-is added to the current Graph's QUEUE_RUNNER collection.
+Enqueues a different list of tensors in different threads.
+Implemented using a queue -- a `QueueRunner` for the queue
+is added to the current `Graph`'s `QUEUE_RUNNER` collection.
+
+`len(tensor_list_list)` threads will be started, with thread `i` enqueuing
+the tensors from tensor_list[i]. `tensor_list[i1][j]` must match
+`tensor_list[i2][j]` in type and shape, except in the first dimension if
+`enqueue_many` is true.
+
+If `enqueue_many` is false, each `tensor_list_list[i]` is assumed to
+represent a single example.  Otherwise, `tensor_list_list[i]` is assumed to
+represent a batch of examples, where the first dimension is indexed by
+example, and all members of `tensor_list_list[i]` should have the same size
+in the first dimension.
+
+If `enqueue_many` is false, then an input tensor `x` will be output as a
+tensor with shape `[batch_size] + x.shape`. If `enqueue_many` is true, the
+slices of any input tensor `x` are treated as examples, and the output tensors
+will have shape `[batch_size] + x.shape[1:]`.
+
+The `capacity` argument controls the how long the prefetching
+is allowed to grow the queues.
 
 ##### Args:
 
 
 *  <b>tensor_list_list</b>: A list of tuples of tensors to enqueue.
-    len(tensor_list_list) threads will be started, with the i-th
-    thread enqueuing the tensors from tensor_list[i].
-    tensor_list[i1][j] must match tensor_list[i2][j] in type and
-    shape (except in the first dimension if enqueue_many is true).
-*  <b>batch_size</b>: The new batch size pulled from the queue.
-*  <b>capacity</b>: Maximum number of elements in the queue, controls the
-    how far ahead the prefetching allowed is allowed to get and
-    memory usage.
-*  <b>enqueue_many</b>: If False, each tensor_list_list[i] is assumed to
-    represent a single example.  If True, tensor_list_list[i] is
-    assumed to represent a batch of examples, where the first
-    dimension is indexed by example, and all members of
-    tensor_list_list[i] should have the same size in the first
-    dimension.
-*  <b>shapes</b>: Optional. The shapes for each example.  Defaults to the
-    inferred shapes for tensor_list_list[i] (which must match, after
-    leaving off the first dimension if enqueue_many is True).
+*  <b>batch_size</b>: An integer. The new batch size pulled from the queue.
+*  <b>capacity</b>: An integer. The maximum number of elements in the queue.
+*  <b>enqueue_many</b>: Whether each tensor in `tensor_list_list` is a single
+    example.
+*  <b>shapes</b>: (Optional) The shapes for each example.  Defaults to the
+    inferred shapes for `tensor_list_list[i]`.
 *  <b>name</b>: A name for the operations (optional).
 
 ##### Returns:
 
   A list of tensors with the same number and types as
-  tensor_list_list[i].  If enqueue_many is false, then an input
-  tensor with shape `[x, y, z]` will be output as a tensor with
-  shape `[batch_size, x, y, z]`.  If enqueue_many is True, and an
-  input tensor has shape `[*, x, y, z]`, the the output will have
-  shape `[batch_size, x, y, z]`.
+  `tensor_list_list[i]`.
 
 
 - - -
@@ -1933,15 +1947,15 @@
 *  <b>min_after_dequeue</b>: Minimum number elements in the queue after a
     dequeue, used to ensure a level of mixing of elements.
 *  <b>seed</b>: Seed for the random shuffling within the queue.
-*  <b>enqueue_many</b>: If False, each tensor_list_list[i] is assumed to
-    represent a single example.  If True, tensor_list_list[i] is
+*  <b>enqueue_many</b>: If `False`, each tensor_list_list[i] is assumed to
+    represent a single example.  If `True`, tensor_list_list[i] is
     assumed to represent a batch of examples, where the first
     dimension is indexed by example, and all members of
     tensor_list_list[i] should have the same size in the first
     dimension.
 *  <b>shapes</b>: Optional. The shapes for each example.  Defaults to the
-    inferred shapes for tensor_list_list[i] (which must match, after
-    leaving off the first dimension if enqueue_many is True).
+    inferred shapes for `tensor_list_list[i]` (which must match, after
+    leaving off the first dimension if enqueue_many is `True`).
 *  <b>name</b>: A name for the operations (optional).
 
 ##### Returns:
diff --git a/tensorflow/g3doc/api_docs/python/math_ops.md b/tensorflow/g3doc/api_docs/python/math_ops.md
index fb93c38..53f7c59 100644
--- a/tensorflow/g3doc/api_docs/python/math_ops.md
+++ b/tensorflow/g3doc/api_docs/python/math_ops.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Math
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Arithmetic Operators](#AUTOGENERATED-arithmetic-operators)
diff --git a/tensorflow/g3doc/api_docs/python/nn.md b/tensorflow/g3doc/api_docs/python/nn.md
index 91fab34..50c460b 100644
--- a/tensorflow/g3doc/api_docs/python/nn.md
+++ b/tensorflow/g3doc/api_docs/python/nn.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Neural Network
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Activation Functions](#AUTOGENERATED-activation-functions)
@@ -899,7 +903,7 @@
 (called candidates) for each batch of training examples.
 
 See our [Candidate Sampling Algorithms Reference]
-(http://www.tensorflow.org/extras/candidate_sampling.pdf)
+(../../extras/candidate_sampling.pdf)
 
 ### Sampled Loss Functions <div class="md-anchor" id="AUTOGENERATED-sampled-loss-functions">{#AUTOGENERATED-sampled-loss-functions}</div>
 
diff --git a/tensorflow/g3doc/api_docs/python/sparse_ops.md b/tensorflow/g3doc/api_docs/python/sparse_ops.md
index 7e9ab07..1d30f81 100644
--- a/tensorflow/g3doc/api_docs/python/sparse_ops.md
+++ b/tensorflow/g3doc/api_docs/python/sparse_ops.md
@@ -1,16 +1,20 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Sparse Tensors
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
-* [Sparse Tensor Representation.](#AUTOGENERATED-sparse-tensor-representation.)
+* [Sparse Tensor Representation](#AUTOGENERATED-sparse-tensor-representation)
   * [class tf.SparseTensor](#SparseTensor)
   * [class tf.SparseTensorValue](#SparseTensorValue)
-* [Sparse to Dense Conversion.](#AUTOGENERATED-sparse-to-dense-conversion.)
+* [Sparse to Dense Conversion](#AUTOGENERATED-sparse-to-dense-conversion)
   * [tf.sparse_to_dense(sparse_indices, output_shape, sparse_values, default_value, name=None)](#sparse_to_dense)
   * [tf.sparse_tensor_to_dense(sp_input, default_value, name=None)](#sparse_tensor_to_dense)
   * [tf.sparse_to_indicator(sp_input, vocab_size, name=None)](#sparse_to_indicator)
-* [Manipulation.](#AUTOGENERATED-manipulation.)
+* [Manipulation](#AUTOGENERATED-manipulation)
   * [tf.sparse_concat(concat_dim, sp_inputs, name=None)](#sparse_concat)
   * [tf.sparse_reorder(sp_input, name=None)](#sparse_reorder)
   * [tf.sparse_retain(sp_input, to_retain)](#sparse_retain)
@@ -19,7 +23,7 @@
 
 <!-- TOC-END This section was generated by neural network, THANKS FOR READING! -->
 
-## Sparse Tensor Representation. <div class="md-anchor" id="AUTOGENERATED-sparse-tensor-representation.">{#AUTOGENERATED-sparse-tensor-representation.}</div>
+## Sparse Tensor Representation <div class="md-anchor" id="AUTOGENERATED-sparse-tensor-representation">{#AUTOGENERATED-sparse-tensor-representation}</div>
 
 Tensorflow supports a `SparseTensor` representation for data that is sparse
 in multiple dimensions. Contrast this representation with `IndexedSlices`,
@@ -157,7 +161,7 @@
 
 
 
-## Sparse to Dense Conversion. <div class="md-anchor" id="AUTOGENERATED-sparse-to-dense-conversion.">{#AUTOGENERATED-sparse-to-dense-conversion.}</div>
+## Sparse to Dense Conversion <div class="md-anchor" id="AUTOGENERATED-sparse-to-dense-conversion">{#AUTOGENERATED-sparse-to-dense-conversion}</div>
 
 - - -
 
@@ -296,7 +300,7 @@
 
 
 
-## Manipulation. <div class="md-anchor" id="AUTOGENERATED-manipulation.">{#AUTOGENERATED-manipulation.}</div>
+## Manipulation <div class="md-anchor" id="AUTOGENERATED-manipulation">{#AUTOGENERATED-manipulation}</div>
 
 - - -
 
diff --git a/tensorflow/g3doc/api_docs/python/state_ops.md b/tensorflow/g3doc/api_docs/python/state_ops.md
index 70d9121..25bbe55 100644
--- a/tensorflow/g3doc/api_docs/python/state_ops.md
+++ b/tensorflow/g3doc/api_docs/python/state_ops.md
@@ -1,6 +1,10 @@
 <!-- This file is machine generated: DO NOT EDIT! -->
 
 # Variables
+
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
 * [Variables](#AUTOGENERATED-variables)
@@ -11,7 +15,7 @@
   * [tf.initialize_all_variables()](#initialize_all_variables)
   * [tf.initialize_variables(var_list, name='init')](#initialize_variables)
   * [tf.assert_variables_initialized(var_list=None)](#assert_variables_initialized)
-* [Saving and Restoring Variables.](#AUTOGENERATED-saving-and-restoring-variables.)
+* [Saving and Restoring Variables](#AUTOGENERATED-saving-and-restoring-variables)
   * [class tf.train.Saver](#Saver)
   * [tf.train.latest_checkpoint(checkpoint_dir, latest_filename=None)](#latest_checkpoint)
   * [tf.train.get_checkpoint_state(checkpoint_dir, latest_filename=None)](#get_checkpoint_state)
@@ -325,7 +329,7 @@
 
 This convenience method requires a session where the graph containing this
 variable has been launched. If no session is passed, the default session is
-used.  See the [Session class](../client.md#Session) for more information on
+used.  See the [Session class](client.md#Session) for more information on
 launching a graph and on sessions.
 
 ```python
@@ -506,7 +510,7 @@
 
 
 
-## Saving and Restoring Variables. <div class="md-anchor" id="AUTOGENERATED-saving-and-restoring-variables.">{#AUTOGENERATED-saving-and-restoring-variables.}</div>
+## Saving and Restoring Variables <div class="md-anchor" id="AUTOGENERATED-saving-and-restoring-variables">{#AUTOGENERATED-saving-and-restoring-variables}</div>
 
 - - -
 
diff --git a/tensorflow/g3doc/api_docs/python/train.md b/tensorflow/g3doc/api_docs/python/train.md
index 0c88968..554d256 100644
--- a/tensorflow/g3doc/api_docs/python/train.md
+++ b/tensorflow/g3doc/api_docs/python/train.md
@@ -3,7 +3,7 @@
 # Training
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
-* [Optimizers.](#AUTOGENERATED-optimizers.)
+* [Optimizers](#AUTOGENERATED-optimizers)
   * [class tf.train.Optimizer](#Optimizer)
   * [Usage](#AUTOGENERATED-usage)
   * [Processing gradients before applying them.](#AUTOGENERATED-processing-gradients-before-applying-them.)
@@ -15,7 +15,7 @@
   * [class tf.train.AdamOptimizer](#AdamOptimizer)
   * [class tf.train.FtrlOptimizer](#FtrlOptimizer)
   * [class tf.train.RMSPropOptimizer](#RMSPropOptimizer)
-* [Gradient Computation.](#AUTOGENERATED-gradient-computation.)
+* [Gradient Computation](#AUTOGENERATED-gradient-computation)
   * [tf.gradients(ys, xs, grad_ys=None, name='gradients', colocate_gradients_with_ops=False, gate_gradients=False, aggregation_method=None)](#gradients)
   * [class tf.AggregationMethod](#AggregationMethod)
   * [tf.stop_gradient(input, name=None)](#stop_gradient)
@@ -25,26 +25,26 @@
   * [tf.clip_by_average_norm(t, clip_norm, name=None)](#clip_by_average_norm)
   * [tf.clip_by_global_norm(t_list, clip_norm, use_norm=None, name=None)](#clip_by_global_norm)
   * [tf.global_norm(t_list, name=None)](#global_norm)
-* [Decaying the learning rate.](#AUTOGENERATED-decaying-the-learning-rate.)
+* [Decaying the learning rate](#AUTOGENERATED-decaying-the-learning-rate)
   * [tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)](#exponential_decay)
-* [Moving Averages.](#AUTOGENERATED-moving-averages.)
+* [Moving Averages](#AUTOGENERATED-moving-averages)
   * [class tf.train.ExponentialMovingAverage](#ExponentialMovingAverage)
-* [Coordinator and QueueRunner.](#AUTOGENERATED-coordinator-and-queuerunner.)
+* [Coordinator and QueueRunner](#AUTOGENERATED-coordinator-and-queuerunner)
   * [class tf.train.Coordinator](#Coordinator)
   * [class tf.train.QueueRunner](#QueueRunner)
   * [tf.train.add_queue_runner(qr, collection='queue_runners')](#add_queue_runner)
   * [tf.train.start_queue_runners(sess=None, coord=None, daemon=True, start=True, collection='queue_runners')](#start_queue_runners)
-* [Summary Operations.](#AUTOGENERATED-summary-operations.)
+* [Summary Operations](#AUTOGENERATED-summary-operations)
   * [tf.scalar_summary(tags, values, collections=None, name=None)](#scalar_summary)
   * [tf.image_summary(tag, tensor, max_images=None, collections=None, name=None)](#image_summary)
   * [tf.histogram_summary(tag, values, collections=None, name=None)](#histogram_summary)
   * [tf.nn.zero_fraction(value, name=None)](#zero_fraction)
   * [tf.merge_summary(inputs, collections=None, name=None)](#merge_summary)
   * [tf.merge_all_summaries(key='summaries')](#merge_all_summaries)
-* [Adding Summaries to Event Files.](#AUTOGENERATED-adding-summaries-to-event-files.)
+* [Adding Summaries to Event Files](#AUTOGENERATED-adding-summaries-to-event-files)
   * [class tf.train.SummaryWriter](#SummaryWriter)
   * [tf.train.summary_iterator(path)](#summary_iterator)
-* [Training utilities.](#AUTOGENERATED-training-utilities.)
+* [Training utilities](#AUTOGENERATED-training-utilities)
   * [tf.train.global_step(sess, global_step_tensor)](#global_step)
   * [tf.train.write_graph(graph_def, logdir, name, as_text=True)](#write_graph)
 
@@ -53,7 +53,7 @@
 
 This library provides a set of classes and functions that helps train models.
 
-## Optimizers. <div class="md-anchor" id="AUTOGENERATED-optimizers.">{#AUTOGENERATED-optimizers.}</div>
+## Optimizers <div class="md-anchor" id="AUTOGENERATED-optimizers">{#AUTOGENERATED-optimizers}</div>
 
 The Optimizer base class provides methods to compute gradients for a loss and
 apply gradients to variables.  A collection of subclasses implement classic
@@ -523,7 +523,7 @@
 
 
 
-## Gradient Computation. <div class="md-anchor" id="AUTOGENERATED-gradient-computation.">{#AUTOGENERATED-gradient-computation.}</div>
+## Gradient Computation <div class="md-anchor" id="AUTOGENERATED-gradient-computation">{#AUTOGENERATED-gradient-computation}</div>
 
 TensorFlow provides functions to compute the derivatives for a given
 TensorFlow computation graph, adding operations to the graph. The
@@ -816,7 +816,7 @@
 
 
 
-## Decaying the learning rate. <div class="md-anchor" id="AUTOGENERATED-decaying-the-learning-rate.">{#AUTOGENERATED-decaying-the-learning-rate.}</div>
+## Decaying the learning rate <div class="md-anchor" id="AUTOGENERATED-decaying-the-learning-rate">{#AUTOGENERATED-decaying-the-learning-rate}</div>
 - - -
 
 ### tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None) <div class="md-anchor" id="exponential_decay">{#exponential_decay}</div>
@@ -873,7 +873,7 @@
 
 
 
-## Moving Averages. <div class="md-anchor" id="AUTOGENERATED-moving-averages.">{#AUTOGENERATED-moving-averages.}</div>
+## Moving Averages <div class="md-anchor" id="AUTOGENERATED-moving-averages">{#AUTOGENERATED-moving-averages}</div>
 
 Some training algorithms, such as GradientDescent and Momentum often benefit
 from maintaining a moving average of variables during optimization.  Using the
@@ -1075,7 +1075,7 @@
 
 
 
-## Coordinator and QueueRunner. <div class="md-anchor" id="AUTOGENERATED-coordinator-and-queuerunner.">{#AUTOGENERATED-coordinator-and-queuerunner.}</div>
+## Coordinator and QueueRunner <div class="md-anchor" id="AUTOGENERATED-coordinator-and-queuerunner">{#AUTOGENERATED-coordinator-and-queuerunner}</div>
 
 See [Threading and Queues](../../how_tos/threading_and_queues/index.md)
 for how to use threads and queues.  For documentation on the Queue API,
@@ -1399,17 +1399,21 @@
 
 
 
-## Summary Operations. <div class="md-anchor" id="AUTOGENERATED-summary-operations.">{#AUTOGENERATED-summary-operations.}</div>
+## Summary Operations <div class="md-anchor" id="AUTOGENERATED-summary-operations">{#AUTOGENERATED-summary-operations}</div>
 
 The following ops output
 [`Summary`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/summary.proto)
 protocol buffers as serialized string tensors.
 
-You can fetch the output of a summary op in a session, and pass it to a
-[SummaryWriter](train.md#SummaryWriter) to append it to an event file.  You can
-then use TensorBoard to visualize the contents of the event files.  See
-[TensorBoard and Summaries](../../how_tos/summaries_and_tensorboard/index.md)
-for more details.
+You can fetch the output of a summary op in a session, and pass it to
+a [SummaryWriter](train.md#SummaryWriter) to append it to an event
+file.  Event files contain
+[`Event`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/util/event.proto)
+protos that can contain `Summary` protos along with the timestamp and
+step.  You can then use TensorBoard to visualize the contents of the
+event files.  See [TensorBoard and
+Summaries](../../how_tos/summaries_and_tensorboard/index.md) for more
+details.
 
 - - -
 
@@ -1587,7 +1591,7 @@
 
 
 
-## Adding Summaries to Event Files. <div class="md-anchor" id="AUTOGENERATED-adding-summaries-to-event-files.">{#AUTOGENERATED-adding-summaries-to-event-files.}</div>
+## Adding Summaries to Event Files <div class="md-anchor" id="AUTOGENERATED-adding-summaries-to-event-files">{#AUTOGENERATED-adding-summaries-to-event-files}</div>
 
 See [Summaries and
 TensorBoard](../../how_tos/summaries_and_tensorboard/index.md) for an
@@ -1768,7 +1772,7 @@
 
 
 
-## Training utilities. <div class="md-anchor" id="AUTOGENERATED-training-utilities.">{#AUTOGENERATED-training-utilities.}</div>
+## Training utilities <div class="md-anchor" id="AUTOGENERATED-training-utilities">{#AUTOGENERATED-training-utilities}</div>
 
 - - -
 
diff --git a/tensorflow/g3doc/get_started/basic_usage.md b/tensorflow/g3doc/get_started/basic_usage.md
index 04c3334..359798d 100644
--- a/tensorflow/g3doc/get_started/basic_usage.md
+++ b/tensorflow/g3doc/get_started/basic_usage.md
@@ -77,7 +77,7 @@
 op. To actually multiply the matrices, and get the result of the multiplication,
 you must launch the graph in a session.
 
-## Launching the graph in a Session
+### Launching the graph in a session
 
 Launching follows construction.  To launch a graph, create a `Session` object.
 Without arguments the session constructor launches the default graph.
@@ -102,20 +102,16 @@
 # The output of the op is returned in 'result' as a numpy `ndarray` object.
 result = sess.run(product)
 print result
+# ==> [[ 12.]]
 
 # Close the Session when we're done.
 sess.close()
-
-
-# Stdout output ==> [[ 12.]]
 ```
 
 Sessions should be closed to release resources. You can also enter a `Session`
 with a "with" block. The `Session` closes automatically at the end of the
 `with` block.
 
-
-
 ```python
 with tf.Session() as sess:
   result = sess.run([product])
@@ -150,6 +146,37 @@
 See [Using GPUs](../how_tos/using_gpu/index.md) for more information about GPUs
 and TensorFlow.
 
+## Interactive Usage
+
+The Python examples in the documentation launch the graph with a
+[`Session`](../api_docs/python/client.md#Session) and use the
+[`Session.run()`](../api_docs/python/client.md#Session.run) method to execute
+operations.
+
+For ease of use in interactive Python environments, such as
+[IPython](http://ipython.org) you can instead use the
+[`InteractiveSession`](../api_docs/python/client.md#InteractiveSession) class,
+and the [`Tensor.eval()`](../api_docs/python/framework.md#Tensor.eval) and
+[`Operation.run()`](../api_docs/python/framework.md#Operation.run) methods.  This
+avoids having to keep a variable holding the session.
+
+```python
+# Enter an interactive TensorFlow Session.
+import tensorflow as tf
+sess = tf.InteractiveSession()
+
+x = tf.Variable([1.0, 2.0])
+a = tf.constant([3.0, 3.0])
+
+# Initialize 'x' using the run() method of its initializer op.
+x.initializer.run()
+
+# Add an op to subtact 'a' from 'x'.  Run it and print the result
+sub = tf.sub(x, a)
+print sub.eval()
+# ==> [-2. -1.]
+```
+
 ## Tensors
 
 TensorFlow programs use a tensor data structure to represent all data -- only
@@ -159,14 +186,6 @@
 these concepts, see the [Rank, Shape, and Type](../resources/dims_types.md)
 reference.
 
-
-# output:
-# [array([ 21.], dtype=float32), array([ 7.], dtype=float32)]
-
-
-
-
-
 ## Variables
 
 Variables maintain state across executions of the graph. The following example
diff --git a/tensorflow/g3doc/get_started/blue_pill.jpg b/tensorflow/g3doc/get_started/blue_pill.jpg
deleted file mode 100644
index e69de29..0000000
--- a/tensorflow/g3doc/get_started/blue_pill.jpg
+++ /dev/null
diff --git a/tensorflow/g3doc/get_started/index.md b/tensorflow/g3doc/get_started/index.md
index 5b92e6e..f61fd4c 100644
--- a/tensorflow/g3doc/get_started/index.md
+++ b/tensorflow/g3doc/get_started/index.md
@@ -52,17 +52,15 @@
 of MNIST, definitely take the blue pill.  If you're somewhere in between, we
 suggest skimming blue, then red.
 
-TODO(danmane): Add in creative commons attribution for these images.
-Also, make sure the sizes are precisely the same.
-
 <div style="width:100%; margin:auto; margin-bottom:10px; margin-top:20px; display: flex; flex-direction: row">
  <a href="../tutorials/mnist/beginners/index.md">
-   <img style="flex-grow:1; flex-shrink:1;border: 1px solid black;" src="./blue_pill.jpg">
+   <img style="flex-grow:1; flex-shrink:1;border: 1px solid black;" src="./blue_pill.png">
  </a>
  <a href="../tutorials/mnist/pros/index.md">
-   <img style="flex-grow:1; flex-shrink:1; border: 1px solid black;" src="./red_pill.jpg">
+   <img style="flex-grow:1; flex-shrink:1; border: 1px solid black;" src="./red_pill.png">
  </a>
 </div>
+<p style="font-size:10px;">Images licensed CC BY-SA 4.0; original by W. Carter</p>
 
 If you're already sure you want to learn and install TensorFlow you can skip
 these and charge ahead.  Don't worry, you'll still get to see MNIST -- we'll
diff --git a/tensorflow/g3doc/get_started/os_setup.md b/tensorflow/g3doc/get_started/os_setup.md
index 01e6fde..f8113bc 100644
--- a/tensorflow/g3doc/get_started/os_setup.md
+++ b/tensorflow/g3doc/get_started/os_setup.md
@@ -4,10 +4,10 @@
 
 ### Ubuntu/Linux
 
-Make sure you have `pip` and `numpy` installed :
+Make sure you have [pip](https://pypi.python.org/pypi/pip) installed:
 
 ```sh
-$ sudo apt-get install python-pip python-numpy
+$ sudo apt-get install python-pip
 ```
 
 Install TensorFlow:
@@ -22,7 +22,7 @@
 
 ### Mac OS X
 
-Make sure you have `pip` installed:
+Make sure you have [pip](https://pypi.python.org/pypi/pip) installed:
 
 If using `easy_install`:
 
@@ -90,16 +90,16 @@
 
 ```
 
-## Source Installation {#source}
+## Installing from sources {#source}
 
 ### Clone the TensorFlow repository
 
-TODO(keveman): Supply clone command for external users.
-
 ```sh
-$ git clone --recurse-submodules https://YOUR_WHITELISTED_EMAIL_WITH_AT_REPLACED_BY_DOT@tensorflow.googlesource.com/tf3
+$ git clone --recurse-submodules https://tensorflow.googlesource.com/tensorflow
 ```
 
+`--recurse-submodules` is required to fetch the protobuf library that TensorFlow
+depends on.
 
 ### Installation for Linux
 
@@ -162,11 +162,9 @@
 
 Please specify the location where CUDA 7.0 toolkit is installed. Refer to
 README.md for more details. [default is: /usr/local/cuda]: /usr/local/cuda
-CUDA 7.0 toolkit found
 
 Please specify the location where CUDNN 6.5 V2 library is installed. Refer to
 README.md for more details. [default is: /usr/local/cuda]: /usr/local/cuda
-CUDNN 6.5 V2 library found
 
 Setting up Cuda include
 Setting up Cuda lib64
@@ -191,9 +189,6 @@
 000009/000005 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
 000006/000001 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
 000009/000009 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
-000006/000008 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
-000009/000003 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
-000006/000006 lambda = 2.000000 x = [0.894427 -0.447214] y = [1.788854 -0.894427]
 ```
 
 Note that "--config=cuda" is needed to enable the GPU support.
@@ -231,14 +226,24 @@
 
 Follow installation instructions [here](http://docs.scipy.org/doc/numpy/user/install.html).
 
-### Build and train your first TensorFlow neural net model
+
+### Create the pip package and install
 
 ```sh
-$ cd tf3
+$ bazel build -c opt //tensorflow/tools/pip_package:build_pip_package
 
-$ bazel build tensorflow/models/image/mnist:convolutional
+$ bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
 
-$ bazel-bin/tensorflow/models/image/mnist/convolutional
+# The name of the .whl file will depend on your platform.
+$ pip install /tmp/tensorflow_pkg/tensorflow-0.5.0-cp27-none-linux_x86_64.whl
+```
+
+### Train your first TensorFlow neural net model
+
+From the root of your source tree, run:
+
+```sh
+$ python tensorflow/models/image/mnist/convolutional.py
 Succesfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.
 Succesfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.
 Succesfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.
diff --git a/tensorflow/g3doc/get_started/red_pill.jpg b/tensorflow/g3doc/get_started/red_pill.jpg
deleted file mode 100644
index e69de29..0000000
--- a/tensorflow/g3doc/get_started/red_pill.jpg
+++ /dev/null
diff --git a/tensorflow/g3doc/how_tos/summaries_and_tensorboard/index.md b/tensorflow/g3doc/how_tos/summaries_and_tensorboard/index.md
index 18f4b42..6573187 100644
--- a/tensorflow/g3doc/how_tos/summaries_and_tensorboard/index.md
+++ b/tensorflow/g3doc/how_tos/summaries_and_tensorboard/index.md
@@ -8,8 +8,11 @@
 and even additional data like images that pass through it. When TensorBoard is
 fully configured, it looks like this:
 
-TODO(danmane): Enable a live TensorBoard
-![MNIST TensorBoard](./mnist_tensorboard.png "MNIST TensorBoard")
+![MNIST TensorBoard](./mnist_tensorboard.png "MNIST TensorBoard") If you're on
+desktop Chrome or FF, try playing around with [this live
+TensorBoard](/tensorboard/cifar.html).
+
+
 
 ## Serializing the data
 
diff --git a/tensorflow/g3doc/extras/tensorflow-whitepaper2015.bib b/tensorflow/g3doc/resources/bib.md
similarity index 94%
rename from tensorflow/g3doc/extras/tensorflow-whitepaper2015.bib
rename to tensorflow/g3doc/resources/bib.md
index d04168a..94a005e 100644
--- a/tensorflow/g3doc/extras/tensorflow-whitepaper2015.bib
+++ b/tensorflow/g3doc/resources/bib.md
@@ -1,3 +1,5 @@
+# BibTex Citation
+```
 @misc{tensorflow2015-whitepaper,
 title={{TensorFlow}: Large-Scale Machine Learning on Heterogeneous Systems},
 url={http://www.tensorflow.org/extras/tensorflow-whitepaper2015.pdf},
@@ -9,7 +11,7 @@
     Eugene~Brevdo and
     Zhifeng~Chen and
     Craig~Citro and
-    Greg~Corrado and
+    Greg~S-Corrado and
     Andy~Davis and
     Jeffrey~Dean and
     Matthieu~Devin and
@@ -43,3 +45,4 @@
     Xiaoqiang~Zheng},
   year={2015},
 }
+```
diff --git a/tensorflow/g3doc/resources/faq.md b/tensorflow/g3doc/resources/faq.md
index fcdc8d1..2bd485e 100644
--- a/tensorflow/g3doc/resources/faq.md
+++ b/tensorflow/g3doc/resources/faq.md
@@ -1,21 +1,28 @@
 # Frequently Asked Questions
 
 This document provides answers to some of the frequently asked questions about
-TensorFlow. If you have a question that is not covered here, please
-[get in touch](index.md).
+TensorFlow. If you have a question that is not covered here, you might find an
+answer on one of the TensorFlow [community resources](index.md).
 
 <!-- TOC-BEGIN This section is generated by neural network: DO NOT EDIT! -->
 ## Contents
+  * [Building a TensorFlow graph](#AUTOGENERATED-building-a-tensorflow-graph)
+  * [Running a TensorFlow computation](#AUTOGENERATED-running-a-tensorflow-computation)
+  * [Variables](#AUTOGENERATED-variables)
+  * [Tensor shapes](#AUTOGENERATED-tensor-shapes)
+  * [TensorBoard](#AUTOGENERATED-tensorboard)
+  * [Extending TensorFlow](#AUTOGENERATED-extending-tensorflow)
+  * [Miscellaneous](#AUTOGENERATED-miscellaneous)
 
 
 <!-- TOC-END This section was generated by neural network, THANKS FOR READING! -->
 
-#### Building a TensorFlow graph
+### Building a TensorFlow graph <div class="md-anchor" id="AUTOGENERATED-building-a-tensorflow-graph">{#AUTOGENERATED-building-a-tensorflow-graph}</div>
 
 See also the
 [API documentation on building graphs](../api_docs/python/framework.md).
 
-##### Why does `c = tf.matmul(a, b)` not execute the matrix multiplication immediately?
+#### Why does `c = tf.matmul(a, b)` not execute the matrix multiplication immediately?
 
 In the TensorFlow Python API, `a`, `b`, and `c` are
 [`Tensor`](../api_docs/python/framework.md#Tensor) objects. A `Tensor` object is
@@ -28,12 +35,12 @@
 whole computation much more efficiently than executing the operations
 one-by-one.
 
-##### How are devices named?
+#### How are devices named?
 
 The supported device names are `"/device:CPU:0"` (or `"/cpu:0"`) for the CPU
 device, and `"/device:GPU:i"` (or `"/gpu:i"`) for the *i*th GPU device.
 
-##### How do I place operations on a particular device?
+#### How do I place operations on a particular device?
 
 To place a group of operations on a device, create them within a
 [`with tf.device(name):`](../api_docs/python/framework.md#device) context.  See
@@ -43,17 +50,17 @@
 [CIFAR-10 tutorial](../tutorials/deep_cnn/index.md) for an example model that
 uses multiple GPUs.
 
-##### What are the different types of tensors that are available?
+#### What are the different types of tensors that are available?
 
 TensorFlow supports a variety of different data types and tensor shapes. See the
 [ranks, shapes, and types reference](dims_types.md) for more details.
 
-#### Running a TensorFlow computation
+### Running a TensorFlow computation <div class="md-anchor" id="AUTOGENERATED-running-a-tensorflow-computation">{#AUTOGENERATED-running-a-tensorflow-computation}</div>
 
 See also the
 [API documentation on running graphs](../api_docs/python/client.md).
 
-##### What's the deal with feeding and placeholders?
+#### What's the deal with feeding and placeholders?
 
 Feeding is a mechanism in the TensorFlow Session API that allows you to
 substitute different values for one or more tensors at run time. The `feed_dict`
@@ -69,7 +76,7 @@
 example of how placeholders and feeding can be used to provide the training data
 for a neural network.
 
-##### What is the difference between `Session.run()` and `Tensor.eval()`?
+#### What is the difference between `Session.run()` and `Tensor.eval()`?
 
 If `t` is a [`Tensor`](../api_docs/python/framework.md#Tensor) object,
 [`t.eval()`](../api_docs/python/framework.md#Tensor.eval) is shorthand for
@@ -96,7 +103,7 @@
 simple use cases (like unit tests); if your code deals with multiple graphs and
 sessions, it may be more straightforward to explicit calls to `Session.run()`.
 
-##### Do Sessions have a lifetime? What about intermediate tensors?
+#### Do Sessions have a lifetime? What about intermediate tensors?
 
 Sessions can own resources, such
 [variables](../api_docs/python/state_ops.md#Variable),
@@ -110,13 +117,13 @@
 [`Session.run()`](../api_docs/python/client.md) will be freed at or before the
 end of the call.
 
-##### Can I run distributed training on multiple computers?
+#### Can I run distributed training on multiple computers?
 
 The initial open-source release of TensorFlow supports multiple devices (CPUs
 and GPUs) in a single computer. We are working on a distributed version as well:
 if you are interested, please let us know so we can prioritize accordingly.
 
-##### Does the runtime parallelize parts of graph execution?
+#### Does the runtime parallelize parts of graph execution?
 
 The TensorFlow runtime parallelizes graph execution across many different
 dimensions:
@@ -131,7 +138,7 @@
   enables the runtime to get higher throughput, if a single step does not use
   all of the resources in your computer.
 
-##### Which client languages are supported in TensorFlow?
+#### Which client languages are supported in TensorFlow?
 
 TensorFlow is designed to support multiple client languages. Currently, the
 best-supported client language is [Python](../api_docs/python/index.md). The
@@ -145,7 +152,7 @@
 that makes it easy to build a client in many different languages. We invite
 contributions of new language bindings.
 
-##### Does TensorFlow make use of all the devices (GPUs and CPUs) available on my machine?
+#### Does TensorFlow make use of all the devices (GPUs and CPUs) available on my machine?
 
 TensorFlow supports multiple GPUs and CPUs. See the how-to documentation on
 [using GPUs with TensorFlow](../how_tos/using_gpu/index.md) for details of how
@@ -156,10 +163,10 @@
 Note that TensorFlow only uses GPU devices with a compute capability greater
 than 3.5.
 
-##### Why does `Session.run()` hang when using a reader or a queue?
+#### Why does `Session.run()` hang when using a reader or a queue?
 
-The [reader](../api_docs/io_ops.md#ReaderBase) and
-[queue](../api_docs/io_ops.md#QueueBase) classes provide special operations that
+The [reader](../api_docs/python/io_ops.md#ReaderBase) and
+[queue](../api_docs/python/io_ops.md#QueueBase) classes provide special operations that
 can *block* until input (or free space in a bounded queue) becomes
 available. These operations allow you to build sophisticated
 [input pipelines](../how_tos/reading_data/index.md), at the cost of making the
@@ -168,20 +175,20 @@
 [using `QueueRunner` objects to drive queues and readers](../how_tos/reading_data/index.md#QueueRunners)
 for more information on how to use them.
 
-#### Variables
+### Variables <div class="md-anchor" id="AUTOGENERATED-variables">{#AUTOGENERATED-variables}</div>
 
 See also the how-to documentation on [variables](../how_tos/variables/index.md)
 and [variable scopes](../how_tos/variable_scope/index.md), and
 [the API documentation for variables](../api_docs/python/state_ops.md).
 
-##### What is the lifetime of a variable?
+#### What is the lifetime of a variable?
 
 A variable is created when you first run the
 [`tf.Variable.initializer`](../api_docs/python/state_ops.md#Variable.initializer)
 operation for that variable in a session. It is destroyed when that
 [`session is closed`](../api_docs/python/client.md#Session.close).
 
-##### How do variables behave when they are concurrently accessed?
+#### How do variables behave when they are concurrently accessed?
 
 Variables allow concurrent read and write operations. The value read from a
 variable may change it is concurrently updated. By default, concurrent assigment
@@ -189,12 +196,12 @@
 a lock when assigning to a variable, pass `use_locking=True` to
 [`Variable.assign()`](../api_docs/python/state_ops.md#Variable.assign).
 
-#### Tensor shapes
+### Tensor shapes <div class="md-anchor" id="AUTOGENERATED-tensor-shapes">{#AUTOGENERATED-tensor-shapes}</div>
 
 See also the
 [`TensorShape` API documentation](../api_docs/python/framework.md#TensorShape).
 
-##### How can I determine the shape of a tensor in Python?
+#### How can I determine the shape of a tensor in Python?
 
 In TensorFlow, a tensor has both a static (inferred) shape and a dynamic (true)
 shape. The static shape can be read using the
@@ -205,7 +212,7 @@
 shape is not fully defined, the dynamic shape of a `Tensor` `t` can be
 determined by evaluating [`tf.shape(t)`](../api_docs/python/array_ops.md#shape).
 
-##### What is the difference between `x.set_shape()` and `x = tf.reshape(x)`?
+#### What is the difference between `x.set_shape()` and `x = tf.reshape(x)`?
 
 The [`tf.Tensor.set_shape()`](../api_docs/python/framework.md) method updates
 the static shape of a `Tensor` object, and it is typically used to provide
@@ -215,7 +222,7 @@
 The [`tf.reshape()`](../api_docs/python/array_ops.md#reshape) operation creates
 a new tensor with a different dynamic shape.
 
-##### How do I build a graph that works with variable batch sizes?
+#### How do I build a graph that works with variable batch sizes?
 
 It is often useful to build a graph that works with variable batch sizes, for
 example so that the same code can be used for (mini-)batch training, and
@@ -241,31 +248,31 @@
   [`tf.placeholder(..., shape=[None, ...])`](../api_docs/python/io_ops.md#placeholder). The
   `None` element of the shape corresponds to a variable-sized dimension.
 
-#### TensorBoard
+### TensorBoard <div class="md-anchor" id="AUTOGENERATED-tensorboard">{#AUTOGENERATED-tensorboard}</div>
 
 See also the
 [how-to documentation on TensorBoard](../how_tos/graph_viz/index.md).
 
-##### What is the simplest way to send data to tensorboard? # TODO(danmane)
+#### What is the simplest way to send data to tensorboard? # TODO(danmane)
 
 Add summary_ops to your TensorFlow graph, and use a SummaryWriter to write all
 of these summaries to a log directory. Then, startup TensorBoard using
 <SOME_COMMAND> and pass the --logdir flag so that it points to your
 log directory. For more details, see <YET_UNWRITTEN_TENSORBOARD_TUTORIAL>.
 
-#### Extending TensorFlow
+### Extending TensorFlow <div class="md-anchor" id="AUTOGENERATED-extending-tensorflow">{#AUTOGENERATED-extending-tensorflow}</div>
 
 See also the how-to documentation for
 [adding a new operation to TensorFlow](../how_tos/adding_an_op/index.md).
 
-##### My data is in a custom format. How do I read it using TensorFlow?
+#### My data is in a custom format. How do I read it using TensorFlow?
 
 There are two main options for dealing with data in a custom format.
 
 The easier option is to write parsing code in Python that transforms the data
-into a numpy array, then feed a
-[tf.placeholder()](../api_docs/python/io_ops.md#placeholder) a tensor with that
-data. See the documentation on
+into a numpy array, then feed a [`tf.placeholder()`]
+(../api_docs/python/io_ops.md#placeholder) a tensor with that data. See the
+documentation on
 [using placeholders for input](../how_tos/reading_data/index.md#Feeding) for
 more details. This approach is easy to get up and running, but the parsing can
 be a performance bottleneck.
@@ -276,7 +283,7 @@
 [guide to handling new data formats](../how_tos/new_data_formats/index.md) has
 more information about the steps for doing this.
 
-##### How do I define an operation that takes a variable number of inputs?
+#### How do I define an operation that takes a variable number of inputs?
 
 The TensorFlow op registration mechanism allows you to define inputs that are a
 single tensor, a list of tensors with the same type (for example when adding
@@ -286,15 +293,15 @@
 [adding an op with a list of inputs or outputs](../how_tos/adding_an_op/index.md#list-input-output)
 for more details of how to define these different input types.
 
-#### Miscellaneous
+### Miscellaneous <div class="md-anchor" id="AUTOGENERATED-miscellaneous">{#AUTOGENERATED-miscellaneous}</div>
 
-##### Does TensorFlow work with Python 3?
+#### Does TensorFlow work with Python 3?
 
 We have only tested TensorFlow using Python 2.7. We are aware of some changes
 that will be required for Python 3 compatibility, and welcome contributions
 towards this effort.
 
-##### What is TensorFlow's coding style convention?
+#### What is TensorFlow's coding style convention?
 
 The TensorFlow Python API adheres to the
 [PEP8](https://www.python.org/dev/peps/pep-0008/) conventions.<sup>*</sup> In
diff --git a/tensorflow/g3doc/resources/glossary.md b/tensorflow/g3doc/resources/glossary.md
index ab1fc4e..2e78239 100644
--- a/tensorflow/g3doc/resources/glossary.md
+++ b/tensorflow/g3doc/resources/glossary.md
@@ -1,5 +1,7 @@
 # Glossary
 
+TODO(someone): Fix several broken links in Glossary
+
 **Broadcasting operation**
 
 An operation that uses [numpy-style broadcasting](http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html)
diff --git a/tensorflow/g3doc/resources/index.md b/tensorflow/g3doc/resources/index.md
index c9b88f4..5e279e4 100644
--- a/tensorflow/g3doc/resources/index.md
+++ b/tensorflow/g3doc/resources/index.md
@@ -12,25 +12,33 @@
 
 If you use TensorFlow in your research and would like to cite the TensorFlow
 system, we suggest you cite the paper above.  You can use this [BibTeX
-entry](../extras/tensorflow-whitepaper2015.bib).  As the project progresses, we
+entry](bib.md).  As the project progresses, we
 may update the suggested citation with new papers.
 
 
 ## Community
 
-TODO(rajatmonga):  Write this!
+### Discuss
 
-* NO - google group
-* YES, ASAP - internal support mailing list
-* YES, ASAP - stack overflow presence
-* SOON - slack
+* GitHub: <https://github.com/tensorflow/tensorflow>
+* Stack Overflow: <https://stackoverflow.com/questions/tagged/tensorflow>
+* [TensorFlow discuss mailing list](
+  https://groups.google.com/forum/#!forum/tensorflow-discuss)
 
+### Report Issues
 
+* [TensorFlow issues](https://github.com/tensorflow/tensorflow/issues)
 
+### Development
+
+* If you are interested in contributing to TensorFlow please
+  [review the contributing guide](
+  https://github.com/tensorflow/tensorflow/blob/master/CONTRIBUTING.md).
 
 
 <div class='sections-order' style="display: none;">
 <!--
+<!-- bib.md -->
 <!-- uses.md -->
 <!-- faq.md -->
 <!-- glossary.md -->
diff --git a/tensorflow/g3doc/resources/uses.md b/tensorflow/g3doc/resources/uses.md
index ac42b1f..f73d4e9 100644
--- a/tensorflow/g3doc/resources/uses.md
+++ b/tensorflow/g3doc/resources/uses.md
@@ -36,7 +36,3 @@
   * **Description**: On-device computer vision model to do optical character recoignition to enable real-time translation.
   * **More info**: [Google Research blog post](http://googleresearch.blogspot.com/2015/07/how-google-translate-squeezes-deep.html)
 }
-
-* TODO(opensource): Add several other research projects
-* TODO(opensource): Pointer Sets?
-* TODO(opensource): Others
diff --git a/tensorflow/g3doc/tutorials/deep_cnn/index.md b/tensorflow/g3doc/tutorials/deep_cnn/index.md
index f40a94b..0bbba2c 100644
--- a/tensorflow/g3doc/tutorials/deep_cnn/index.md
+++ b/tensorflow/g3doc/tutorials/deep_cnn/index.md
@@ -198,7 +198,8 @@
 
 We visualize it in TensorBoard with a [scalar_summary](../../api_docs/python/train.md?#scalar_summary):
 
-[![CIFAR-10 Loss](./cifar_loss.png "CIFAR-10 Total Loss")](#TODO(migmigmig)#TODO(danmane))
+![CIFAR-10 Loss](./cifar_loss.png "CIFAR-10 Total Loss")
+###### [View this TensorBoard live! (Chrome/FF)](/tensorboard/cifar.html)
 
 We train the model using standard
 [gradient descent](https://en.wikipedia.org/wiki/Gradient_descent)
@@ -207,7 +208,8 @@
 [exponentially decays](../../api_docs/python/train.md#exponential_decay)
 over time.
 
-[![CIFAR-10 Learning Rate Decay](./cifar_lr_decay.png "CIFAR-10 Learning Rate Decay")](#TODO(migmigmig)#TODO(danmane))
+![CIFAR-10 Learning Rate Decay](./cifar_lr_decay.png "CIFAR-10 Learning Rate Decay")
+###### [View this TensorBoard live! (Chrome/FF)](/tensorboard/cifar.html)
 
 The `train()` function adds the operations needed to minimize the objective by
 calculating the gradient and updating the learned variables (see
diff --git a/tensorflow/g3doc/tutorials/index.md b/tensorflow/g3doc/tutorials/index.md
index 726a5c6..470645d 100644
--- a/tensorflow/g3doc/tutorials/index.md
+++ b/tensorflow/g3doc/tutorials/index.md
@@ -90,15 +90,6 @@
 [View Tutorial](mnist/download/index.md)
 
 
-## Sparse Linear Regression
-
-In many practical machine learning settings we have a large number input
-features, only very few of which are active for any given example.  TensorFlow
-has great tools for learning predictive models in these settings.
-
-COMING SOON
-
-
 ## Visual Object Recognition
 
 We will be releasing our state-of-the-art Inception object recognition model,
@@ -116,14 +107,6 @@
 COMING SOON
 
 
-## Automated Image Captioning
-
-TODO(vinyals): Write me, three lines max.
-
-COMING SOON
-
-
-
 <div class='sections-order' style="display: none;">
 <!--
 <!-- mnist/beginners/index.md -->
diff --git a/tensorflow/g3doc/tutorials/mnist/beginners/index.md b/tensorflow/g3doc/tutorials/mnist/beginners/index.md
index 8ccb69d..398eca5 100644
--- a/tensorflow/g3doc/tutorials/mnist/beginners/index.md
+++ b/tensorflow/g3doc/tutorials/mnist/beginners/index.md
@@ -212,19 +212,12 @@
 run entirely outside Python. (Approaches like this can be seen in a few
 machine learning libraries.)
 
-To run computations, TensorFlow needs to connect to its backend. This connection
-is called a `Session`. To use TensorFlow, we need to import it and create a
-session.
+To use TensorFlow, we need to import it.
 
 ```python
 import tensorflow as tf
-sess = tf.InteractiveSession()
 ```
 
-(Using an `InteractiveSession` makes TensorFlow a bit more flexible about how
-you structure your code. In particular, it's helpful for work in interactive
-contexts like iPython.)
-
 We describe these interacting operations by manipulating symbolic variables.
 Let's create one:
 
@@ -350,11 +343,19 @@
 single operation which, when run, will do a step of gradient descent training,
 slightly tweaking your variables to reduce the cost.
 
-Now we have our model set up to train. But before we start, we need to
-initialize the variables we created:
+Now we have our model set up to train. One last thing before we launch it,
+we have to add an operation to initialize the variables we created:
 
 ```python
-tf.initialize_all_variables().run()
+init = tf.initialize_all_variables()
+```
+
+We can now launch the model in a `Session`, and run the operation that
+initializes the variables:
+
+```python
+sess = tf.Session()
+sess.run(init)
 ```
 
 Let's train -- we'll run the training step 1000 times!
@@ -362,7 +363,7 @@
 ```python
 for i in range(1000):
   batch_xs, batch_ys = mnist.train.next_batch(100)
-  train_step.run({x: batch_xs, y_: batch_ys})
+  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
 ```
 
 Each step of the loop, we get a "batch" of one hundred random data points from
@@ -403,7 +404,7 @@
 Finally, we ask for our accuracy on our test data.
 
 ```python
-print accuracy.eval({x: mnist.test.images, y_: mnist.test.labels})
+print sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})
 ```
 
 This should be about 91%.
diff --git a/tensorflow/g3doc/tutorials/mnist/pros/index.md b/tensorflow/g3doc/tutorials/mnist/pros/index.md
index 1769671..cb02925 100644
--- a/tensorflow/g3doc/tutorials/mnist/pros/index.md
+++ b/tensorflow/g3doc/tutorials/mnist/pros/index.md
@@ -32,18 +32,14 @@
 It also provides a function for iterating through data minibatches, which we
 will use below.
 
-### Start TensorFlow Session
+### Start TensorFlow InteractiveSession
 
 Tensorflow relies on a highly efficient C++ backend to do its computation. The
-connection to this backend is called a session. We will need to create a session
-before we can do any computation.
+connection to this backend is called a session.  The common usage for TensorFlow
+programs is to first create a graph and then launch it in a session.
 
-```python
-import tensorflow as tf
-sess = tf.InteractiveSession()
-```
-
-Using an `InteractiveSession` makes TensorFlow more flexible about how you
+Here we instead use the convenience `InteractiveSession` class, which
+makes TensorFlow more flexible about how you
 structure your code.
 It allows you to interleave operations which build a
 [computation graph](../../../get_started/basic_usage.md#the-computation-graph)
@@ -54,6 +50,11 @@
 the entire computation graph before starting a session and [launching the
 graph](../../../get_started/basic_usage.md#launching-the-graph-in-a-session).
 
+```python
+import tensorflow as tf
+sess = tf.InteractiveSession()
+```
+
 #### Computation Graph
 
 To do efficient numerical computing in Python, we typically use libraries like
diff --git a/tensorflow/g3doc/tutorials/word2vec/index.md b/tensorflow/g3doc/tutorials/word2vec/index.md
index 8779f33..832c7c1 100644
--- a/tensorflow/g3doc/tutorials/word2vec/index.md
+++ b/tensorflow/g3doc/tutorials/word2vec/index.md
@@ -373,14 +373,14 @@
 compromised speed because we use Python for reading and feeding data items --
 each of which require very little work on the TensorFlow back-end.  If you find
 your model is seriously bottlenecked on input data, you may want to implement a
-custom data reader for your problem, as described in [New Data
-Formats](../how_tos/new_data_formats/index.md).  For the case of Skip-Gram
+custom data reader for your problem, as described in
+[New Data Formats](../../how_tos/new_data_formats/index.md).  For the case of Skip-Gram
 modeling, we've actually already done this for you as an example in
 [tensorflow/models/embedding/word2vec.py](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/embedding/word2vec.py).
 
 If your model is no longer I/O bound but you want still more performance, you
 can take things further by writing your own TensorFlow Ops, as described in
-[Adding a New Op](../how_tos/adding_an_op/index.md).  Again we've provided an
+[Adding a New Op](../../how_tos/adding_an_op/index.md).  Again we've provided an
 example of this for the Skip-Gram case
 [tensorflow/models/embedding/word2vec_optimized.py](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/models/embedding/word2vec_optimized.py).
 Feel free to benchmark these against each other to measure performance
diff --git a/tensorflow/g3doc/tutorials/word2vec/word2vec_basic.py b/tensorflow/g3doc/tutorials/word2vec/word2vec_basic.py
index 0a98157..632ce1f 100644
--- a/tensorflow/g3doc/tutorials/word2vec/word2vec_basic.py
+++ b/tensorflow/g3doc/tutorials/word2vec/word2vec_basic.py
@@ -1,3 +1,5 @@
+import tensorflow.python.platform
+
 import collections
 import math
 import numpy as np
@@ -216,4 +218,3 @@
 
 except ImportError:
   print "Please install sklearn and matplotlib to visualize embeddings."
-
diff --git a/tensorflow/models/embedding/BUILD b/tensorflow/models/embedding/BUILD
index 0fb164b..f8f7e7b 100644
--- a/tensorflow/models/embedding/BUILD
+++ b/tensorflow/models/embedding/BUILD
@@ -31,6 +31,26 @@
     ],
 )
 
+py_test(
+    name = "word2vec_test",
+    size = "small",
+    srcs = ["word2vec_test.py"],
+    deps = [
+        ":word2vec",
+        "//tensorflow:tensorflow_py",
+    ],
+)
+
+py_test(
+    name = "word2vec_optimized_test",
+    size = "small",
+    srcs = ["word2vec_optimized_test.py"],
+    deps = [
+        ":word2vec_optimized",
+        "//tensorflow:tensorflow_py",
+    ],
+)
+
 cc_library(
     name = "word2vec_ops",
     srcs = [
diff --git a/tensorflow/models/embedding/word2vec.py b/tensorflow/models/embedding/word2vec.py
index 4ebf3d6..a31de44 100644
--- a/tensorflow/models/embedding/word2vec.py
+++ b/tensorflow/models/embedding/word2vec.py
@@ -402,7 +402,7 @@
       if now - last_checkpoint_time > opts.checkpoint_interval:
         self.saver.save(self._session,
                         opts.save_path + "model",
-                        global_step=step)
+                        global_step=step.astype(int))
         last_checkpoint_time = now
       if epoch != initial_epoch:
         break
@@ -482,6 +482,9 @@
 
 def main(_):
   """Train a word2vec model."""
+  if not FLAGS.train_data or not FLAGS.eval_data or not FLAGS.save_path:
+    print "--train_data --eval_data and --save_path must be specified."
+    sys.exit(1)
   opts = Options()
   with tf.Graph().as_default(), tf.Session() as session:
     model = Word2Vec(opts, session)
diff --git a/tensorflow/models/embedding/word2vec_optimized.py b/tensorflow/models/embedding/word2vec_optimized.py
index 23e7645..4d69601 100644
--- a/tensorflow/models/embedding/word2vec_optimized.py
+++ b/tensorflow/models/embedding/word2vec_optimized.py
@@ -386,6 +386,9 @@
 
 def main(_):
   """Train a word2vec model."""
+  if not FLAGS.train_data or not FLAGS.eval_data or not FLAGS.save_path:
+    print "--train_data --eval_data and --save_path must be specified."
+    sys.exit(1)
   opts = Options()
   with tf.Graph().as_default(), tf.Session() as session:
     model = Word2Vec(opts, session)
diff --git a/tensorflow/models/embedding/word2vec_optimized_test.py b/tensorflow/models/embedding/word2vec_optimized_test.py
new file mode 100644
index 0000000..bc109d5
--- /dev/null
+++ b/tensorflow/models/embedding/word2vec_optimized_test.py
@@ -0,0 +1,44 @@
+"""Tests for word2vec_optimized module."""
+
+import os
+
+import tensorflow.python.platform
+import tensorflow as tf
+
+from tensorflow.models.embedding import word2vec_optimized as word2vec_optimized
+
+flags = tf.app.flags
+
+FLAGS = flags.FLAGS
+
+
+class Word2VecTest(tf.test.TestCase):
+
+  def setUp(self):
+    FLAGS.train_data = os.path.join(self.get_temp_dir() + "test-text.txt")
+    FLAGS.eval_data = os.path.join(self.get_temp_dir() + "eval-text.txt")
+    FLAGS.save_path = self.get_temp_dir()
+    with open(FLAGS.train_data, "w") as f:
+      f.write(
+          """alice was beginning to get very tired of sitting by her sister on
+          the bank, and of having nothing to do: once or twice she had peeped
+          into the book her sister was reading, but it had no pictures or
+          conversations in it, 'and what is the use of a book,' thought alice
+          'without pictures or conversations?' So she was considering in her own
+          mind (as well as she could, for the hot day made her feel very sleepy
+          and stupid), whether the pleasure of making a daisy-chain would be
+          worth the trouble of getting up and picking the daisies, when suddenly
+          a White rabbit with pink eyes ran close by her.\n""")
+      with open(FLAGS.eval_data, "w") as f:
+        f.write("alice she rabbit once\n")
+
+  def testWord2VecOptimized(self):
+    FLAGS.batch_size = 5
+    FLAGS.num_neg_samples = 10
+    FLAGS.epochs_to_train = 1
+    FLAGS.min_count = 0
+    word2vec_optimized.main([])
+
+
+if __name__ == "__main__":
+  tf.test.main()
diff --git a/tensorflow/models/embedding/word2vec_test.py b/tensorflow/models/embedding/word2vec_test.py
new file mode 100644
index 0000000..62a033d
--- /dev/null
+++ b/tensorflow/models/embedding/word2vec_test.py
@@ -0,0 +1,44 @@
+"""Tests for word2vec module."""
+
+import os
+
+import tensorflow.python.platform
+import tensorflow as tf
+
+from tensorflow.models.embedding import word2vec as word2vec
+
+flags = tf.app.flags
+
+FLAGS = flags.FLAGS
+
+
+class Word2VecTest(tf.test.TestCase):
+
+  def setUp(self):
+    FLAGS.train_data = os.path.join(self.get_temp_dir() + "test-text.txt")
+    FLAGS.eval_data = os.path.join(self.get_temp_dir() + "eval-text.txt")
+    FLAGS.save_path = self.get_temp_dir()
+    with open(FLAGS.train_data, "w") as f:
+      f.write(
+          """alice was beginning to get very tired of sitting by her sister on
+          the bank, and of having nothing to do: once or twice she had peeped
+          into the book her sister was reading, but it had no pictures or
+          conversations in it, 'and what is the use of a book,' thought alice
+          'without pictures or conversations?' So she was considering in her own
+          mind (as well as she could, for the hot day made her feel very sleepy
+          and stupid), whether the pleasure of making a daisy-chain would be
+          worth the trouble of getting up and picking the daisies, when suddenly
+          a White rabbit with pink eyes ran close by her.\n""")
+      with open(FLAGS.eval_data, "w") as f:
+        f.write("alice she rabbit once\n")
+
+  def testWord2Vec(self):
+    FLAGS.batch_size = 5
+    FLAGS.num_neg_samples = 10
+    FLAGS.epochs_to_train = 1
+    FLAGS.min_count = 0
+    word2vec.main([])
+
+
+if __name__ == "__main__":
+  tf.test.main()
diff --git a/tensorflow/python/framework/device.py b/tensorflow/python/framework/device.py
index 676e5f7..b6d7256 100644
--- a/tensorflow/python/framework/device.py
+++ b/tensorflow/python/framework/device.py
@@ -90,7 +90,7 @@
     for y in splits:
       ly = len(y)
       if y:
-        # NOTE(mdevin): we use the property getters here.
+        # NOTE(touts): we use the property getters here.
         if ly == 2 and y[0] == "job":
           self.job = y[1]
         elif ly == 2 and y[0] == "replica":
diff --git a/tensorflow/python/framework/docs.py b/tensorflow/python/framework/docs.py
index 68dbb3d..fcf269c 100644
--- a/tensorflow/python/framework/docs.py
+++ b/tensorflow/python/framework/docs.py
@@ -60,18 +60,18 @@
     print >>f, ""
     print >>f, "# TensorFlow Python reference documentation"
     print >>f, ""
+    fullname_f = lambda name: self._members[name][0]
+    anchor_f = lambda name: _get_anchor(self._module_to_name, fullname_f(name))
+
     for filename, library in self._filename_to_library_map:
-      per_symbol_links = []
-      for name in sorted(library.mentioned):
-        if name in self._members:
-          fullname, member = self._members[name]
-          anchor = _get_anchor(self._module_to_name, fullname)
-          prefix = "class " * inspect.isclass(member)
-          per_symbol_links.append("[%s%s](%s#%s)" %
-                                  (prefix, name, filename, anchor))
-      if per_symbol_links:
-        print >>f, "* <b>[%s](%s)</b>: %s" % (library.title, filename,
-                                              ",\n    ".join(per_symbol_links))
+      sorted_names = sorted(library.mentioned, key=str.lower)
+      member_names = [n for n in sorted_names if n in self._members]
+      links = ["[`%s`](%s#%s)" % (name, filename, anchor_f(name))
+               for name in member_names]
+      if links:
+        print >>f, "* **[%s](%s)**:" % (library.title, filename)
+        for link in links:
+          print >>f, "  * %s" % link
         print >>f, ""
 
     # actually include the files right here
@@ -146,7 +146,7 @@
                members,
                documented,
                exclude_symbols=(),
-               catch_all=False):
+               prefix=None):
     """Creates a new Library.
 
     Args:
@@ -157,6 +157,7 @@
       members: Dictionary mapping member name to (fullname, member).
       documented: Set of documented names to update.
       exclude_symbols: A list of specific symbols to exclude.
+      prefix: A string to include at the beginning of the page.
     """
     self._title = title
     self._module = module
@@ -166,6 +167,7 @@
     documented.update(exclude_symbols)
     self._documented = documented
     self._mentioned = set()
+    self._prefix = prefix or ""
 
   @property
   def title(self):
@@ -400,7 +402,7 @@
     # defined by the class itself (not inherited).  If NO methods were
     # described, describe all methods.
     #
-    # TODO(mdevin): when all methods have been categorized make it an error
+    # TODO(touts): when all methods have been categorized make it an error
     # if some methods are not categorized.
     any_method_called_out = (len(methods) != num_methods)
     if any_method_called_out:
@@ -429,9 +431,11 @@
     """
     print >>f, "<!-- This file is machine generated: DO NOT EDIT! -->"
     print >>f, ""
-    # TODO(mdevin): Do not insert these.  Let the doc writer put them in
+    # TODO(touts): Do not insert these.  Let the doc writer put them in
     # the module docstring explicitly.
     print >>f, "#", self._title
+    if self._prefix:
+      print >>f, self._prefix
     print >>f, "[TOC]"
     print >>f, ""
     if self._module is not None:
diff --git a/tensorflow/python/framework/errors.py b/tensorflow/python/framework/errors.py
index fe8f107..b3f9a78 100644
--- a/tensorflow/python/framework/errors.py
+++ b/tensorflow/python/framework/errors.py
@@ -43,7 +43,8 @@
     or `Recv` op, there will be no corresponding
     [`Operation`](framework.md#Operation) object.  In that case, this
     will return `None`, and you should instead use the
-    [`node_def`](OpError.node_def) to discover information about the op.
+    [`OpError.node_def`](#OpError.node_def) to discover information about the
+    op.
 
     Returns:
       The `Operation` that failed, or None.
@@ -293,7 +294,7 @@
 
   For example, running a [`queue.enqueue()`](io_ops.md#QueueBase.enqueue)
   operation may raise `AbortedError` if a
-  [`queue.close()`](io_ops.md@QueueBase.close) operation previously ran.
+  [`queue.close()`](io_ops.md#QueueBase.close) operation previously ran.
 
   @@__init__
   """
diff --git a/tensorflow/python/framework/framework_lib.py b/tensorflow/python/framework/framework_lib.py
index e317cfd..eacd4f5 100644
--- a/tensorflow/python/framework/framework_lib.py
+++ b/tensorflow/python/framework/framework_lib.py
@@ -1,5 +1,5 @@
 # pylint: disable=wildcard-import,unused-import,g-bad-import-order,line-too-long
-"""Import names from the framework library.
+"""Classes and functions for building TensorFlow graphs.
 
 ## Core graph data structures
 
diff --git a/tensorflow/python/framework/gen_docs_combined.py b/tensorflow/python/framework/gen_docs_combined.py
index a726d88..e82c45d 100644
--- a/tensorflow/python/framework/gen_docs_combined.py
+++ b/tensorflow/python/framework/gen_docs_combined.py
@@ -18,6 +18,12 @@
 FLAGS = tf.flags.FLAGS
 
 
+PREFIX_TEXT = """
+Note: Functions taking `Tensor` arguments can also take anything
+accepted by [`tf.convert_to_tensor`](framework.md#convert_to_tensor).
+"""
+
+
 def get_module_to_name():
   return {tf: 'tf',
           tf.errors: 'tf.errors',
@@ -42,20 +48,24 @@
   return [
       # Splits of module 'tf'.
       library("framework", "Building Graphs", framework_lib),
-      library("constant_op", "Constants, Sequences, and Random Values"),
-      library("state_ops", "Variables"),
+      library("constant_op", "Constants, Sequences, and Random Values",
+              prefix=PREFIX_TEXT),
+      library("state_ops", "Variables", prefix=PREFIX_TEXT),
       library("array_ops", "Tensor Transformations",
-              exclude_symbols=["list_diff"]),
+              exclude_symbols=["list_diff"], prefix=PREFIX_TEXT),
       library("math_ops", "Math",
               exclude_symbols=["sparse_matmul", "arg_min", "arg_max",
-                               "lin_space", "sparse_segment_mean_grad"]),
-      library("control_flow_ops", "Control Flow"),
-      library("image", "Images", tf.image, exclude_symbols=["ResizeMethod"]),
-      library("sparse_ops", "Sparse Tensors"),
+                               "lin_space", "sparse_segment_mean_grad"],
+              prefix=PREFIX_TEXT),
+      library("control_flow_ops", "Control Flow", prefix=PREFIX_TEXT),
+      library("image", "Images", tf.image, exclude_symbols=["ResizeMethod"],
+              prefix=PREFIX_TEXT),
+      library("sparse_ops", "Sparse Tensors", prefix=PREFIX_TEXT),
       library("io_ops", "Inputs and Readers",
               exclude_symbols=["LookupTableBase", "HashTable",
                                "initialize_all_tables",
-                               "string_to_hash_bucket"]),
+                               "string_to_hash_bucket"],
+              prefix=PREFIX_TEXT),
       library("python_io", "Data IO (Python functions)", tf.python_io),
       library("nn", "Neural Network", tf.nn,
               exclude_symbols=["deconv2d", "conv2d_backprop_input",
@@ -66,7 +76,8 @@
                                "xw_plus_b", "relu_layer", "lrn",
                                "batch_norm_with_global_normalization",
                                "batch_norm_with_global_normalization_grad",
-                               "all_candidate_sampler"]),
+                               "all_candidate_sampler"],
+              prefix=PREFIX_TEXT),
       library('client', "Running Graphs", client_lib,
               exclude_symbols=["InteractiveSession"]),
       library("train", "Training", tf.train,
diff --git a/tensorflow/python/framework/ops.py b/tensorflow/python/framework/ops.py
index 0b0442c..addcb1f 100644
--- a/tensorflow/python/framework/ops.py
+++ b/tensorflow/python/framework/ops.py
@@ -1604,6 +1604,10 @@
   def as_graph_def(self, from_version=None):
     """Returns a serialized `GraphDef` representation of this graph.
 
+    The serialized `GraphDef` can be imported into another `Graph`
+    (using [`import_graph_def()`](#import_graph_def)) or used with the
+    [C++ Session API](../cc/index.md).
+
     This method is thread-safe.
 
     Args:
@@ -1612,8 +1616,7 @@
         its `version` property had the given value.
 
     Returns:
-      A
-      [`GraphDef`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/graph.proto)
+      A [`GraphDef`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/graph.proto)
       protocol buffer.
     """
     graph = graph_pb2.GraphDef()
@@ -2116,7 +2119,7 @@
       self._names_in_use[name] = 1
     return name
 
-  # TODO(mdevin): remove
+  # TODO(touts): remove
   def _plain_name(self, name):
     """Return the fully scoped 'name'.
 
diff --git a/tensorflow/python/framework/tensor_util.py b/tensorflow/python/framework/tensor_util.py
index 81ed54c..c4e6d27 100644
--- a/tensorflow/python/framework/tensor_util.py
+++ b/tensorflow/python/framework/tensor_util.py
@@ -39,7 +39,7 @@
       fast_tensor_util.AppendUInt8ArrayToTensorProto,
       types.qint32.as_numpy_dtype:
       fast_tensor_util.AppendInt32ArrayToTensorProto,
-      # NOTE(mdevin): Intentionally no way to feed a DT_BFLOAT16.
+      # NOTE(touts): Intentionally no way to feed a DT_BFLOAT16.
   }
 else:
 
@@ -81,7 +81,7 @@
       types.qint8.as_numpy_dtype: SlowAppendIntArrayToTensorProto,
       types.quint8.as_numpy_dtype: SlowAppendIntArrayToTensorProto,
       types.qint32.as_numpy_dtype: SlowAppendIntArrayToTensorProto,
-      # NOTE(mdevin): Intentionally no way to feed a DT_BFLOAT16.
+      # NOTE(touts): Intentionally no way to feed a DT_BFLOAT16.
   }
 
 
@@ -472,7 +472,7 @@
   Raises:
     TypeError: if tensor is not an ops.Tensor.
   """
-  # TODO(mdevin): Support Variables?
+  # TODO(touts): Support Variables?
   if not isinstance(tensor, ops.Tensor):
     raise TypeError("tensor is not a Tensor")
   if tensor.op.type == "Const":
diff --git a/tensorflow/python/framework/types.py b/tensorflow/python/framework/types.py
index 6a8c629..ed45f1b 100644
--- a/tensorflow/python/framework/types.py
+++ b/tensorflow/python/framework/types.py
@@ -332,7 +332,7 @@
     (_np_qint8, qint8),
     (_np_quint8, quint8),
     (_np_qint32, qint32),
-    # NOTE(mdevin): Intentionally no way to feed a DT_BFLOAT16.
+    # NOTE(touts): Intentionally no way to feed a DT_BFLOAT16.
 ])
 _TF_TO_NP = {
     types_pb2.DT_FLOAT: np.float32,
@@ -341,7 +341,7 @@
     types_pb2.DT_UINT8: np.uint8,
     types_pb2.DT_INT16: np.int16,
     types_pb2.DT_INT8: np.int8,
-    # NOTE(mdevin): For strings we use np.object as it supports variable length
+    # NOTE(touts): For strings we use np.object as it supports variable length
     # strings.
     types_pb2.DT_STRING: np.object,
     types_pb2.DT_COMPLEX64: np.complex64,
diff --git a/tensorflow/python/framework/types_test.py b/tensorflow/python/framework/types_test.py
index acd2994..d933a28 100644
--- a/tensorflow/python/framework/types_test.py
+++ b/tensorflow/python/framework/types_test.py
@@ -34,7 +34,7 @@
       numpy_dtype = dtype.as_numpy_dtype
       _ = np.empty((1, 1, 1, 1), dtype=numpy_dtype)
       if dtype.base_dtype != types.bfloat16:
-        # NOTE(mdevin): Intentionally no way to feed a DT_BFLOAT16.
+        # NOTE(touts): Intentionally no way to feed a DT_BFLOAT16.
         self.assertEqual(
             types.as_dtype(datatype_enum).base_dtype, types.as_dtype(numpy_dtype))
 
diff --git a/tensorflow/python/kernel_tests/pad_op_test.py b/tensorflow/python/kernel_tests/pad_op_test.py
index 113aeb1..cb939a3 100644
--- a/tensorflow/python/kernel_tests/pad_op_test.py
+++ b/tensorflow/python/kernel_tests/pad_op_test.py
@@ -98,7 +98,7 @@
             tf.constant([-1, 0], shape=[1, 2]))
 
   def testIntTypes(self):
-    # TODO(mdevin): Figure out why the padding tests do not work on GPU
+    # TODO(touts): Figure out why the padding tests do not work on GPU
     # for int types and rank > 2.
     for t in [np.int32, np.int64]:
       self._testPad((np.random.rand(4, 3, 3) * 100).astype(t),
diff --git a/tensorflow/python/kernel_tests/variable_ops_test.py b/tensorflow/python/kernel_tests/variable_ops_test.py
index aaa4237..6185b22 100644
--- a/tensorflow/python/kernel_tests/variable_ops_test.py
+++ b/tensorflow/python/kernel_tests/variable_ops_test.py
@@ -33,7 +33,7 @@
       x = vals.astype(dtype)
       tftype = _NP_TO_TF[dtype]
       self.assertAllEqual(x, self._initFetch(x, tftype, use_gpu=False))
-      # NOTE(mdevin): the GPU test should pass for all types, whether the
+      # NOTE(touts): the GPU test should pass for all types, whether the
       # Variable op has an implementation for that type on GPU as we expect
       # that Variable and Assign have GPU implementations for matching tf.
       self.assertAllEqual(x, self._initFetch(x, tftype, use_gpu=True))
diff --git a/tensorflow/python/ops/control_flow_ops.py b/tensorflow/python/ops/control_flow_ops.py
index 068e3b5..2c089de 100644
--- a/tensorflow/python/ops/control_flow_ops.py
+++ b/tensorflow/python/ops/control_flow_ops.py
@@ -1192,7 +1192,7 @@
         return no_op(name=name)
 
 
-# TODO(mdevin): Accept "inputs" as a list.
+# TODO(touts): Accept "inputs" as a list.
 def group(*inputs, **kwargs):
   """Create an op that groups multiple operations.
 
@@ -1217,7 +1217,7 @@
   if kwargs:
     raise ValueError("Unknown keyword arguments: " + ", ".join(kwargs.keys()))
   if not inputs:
-    # TODO(mdevin): Would make sense to return a NoOp.
+    # TODO(touts): Would make sense to return a NoOp.
     raise ValueError("No inputs provided")
   with ops.op_scope(inputs, name, "group_deps") as name:
     # Sorts *inputs according to their devices.
diff --git a/tensorflow/python/ops/gradients_test.py b/tensorflow/python/ops/gradients_test.py
index dac0ebb..96af01e 100644
--- a/tensorflow/python/ops/gradients_test.py
+++ b/tensorflow/python/ops/gradients_test.py
@@ -37,7 +37,7 @@
     The list of operations between "from_ops" and "to_ops", sorted by
     decreasing operation id. This list contains all elements of to_ops.
 
-    TODO(mdevin): Think about returning an empty list if from_ops are not
+    TODO(touts): Think about returning an empty list if from_ops are not
     reachable from to_ops.  Presently it returns to_ops in that case.
   """
   # List of booleans, indexed by operation id, indicating if
diff --git a/tensorflow/python/ops/image_ops.py b/tensorflow/python/ops/image_ops.py
index 1b4f4ae..89f9821 100644
--- a/tensorflow/python/ops/image_ops.py
+++ b/tensorflow/python/ops/image_ops.py
@@ -1,4 +1,5 @@
-"""## Encoding and Decoding.
+# pylint: disable=g-short-docstring-punctuation
+"""## Encoding and Decoding
 
 TensorFlow provides Ops to decode and encode JPEG and PNG formats.  Encoded
 images are represented by scalar string Tensors, decoded images by 3-D uint8
@@ -17,7 +18,7 @@
 @@decode_png
 @@encode_png
 
-## Resizing.
+## Resizing
 
 The resizing Ops accept input images as tensors of several types.  They always
 output resized images as float32 tensors.
@@ -51,7 +52,7 @@
 @@resize_nearest_neighbor
 
 
-## Cropping.
+## Cropping
 
 @@resize_image_with_crop_or_pad
 
@@ -60,7 +61,7 @@
 @@random_crop
 @@extract_glimpse
 
-## Flipping and Transposing.
+## Flipping and Transposing
 
 @@flip_up_down
 @@random_flip_up_down
@@ -70,7 +71,7 @@
 
 @@transpose_image
 
-## Image Adjustments.
+## Image Adjustments
 
 TensorFlow provides functions to adjust images in various ways: brightness,
 contrast, hue, and saturation.  Each adjustment can be done with predefined
diff --git a/tensorflow/python/ops/io_ops.py b/tensorflow/python/ops/io_ops.py
index 9eb3bdf..829081f 100644
--- a/tensorflow/python/ops/io_ops.py
+++ b/tensorflow/python/ops/io_ops.py
@@ -1,3 +1,4 @@
+# pylint: disable=line-too-long
 """## Placeholders
 
 TensorFlow provides a placeholder operation that must be fed with data
@@ -26,6 +27,18 @@
 
 @@decode_csv
 @@decode_raw
+
+- - -
+
+### Example protocol buffer
+
+TensorFlow's [recommended format for training
+examples](../../how_tos/reading_data/index.md#standard-tensorflow-format)
+is serialized `Example` protocol buffers, [described
+here](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/example.proto).
+They contain `Features`, [described
+here](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/feature.proto).
+
 @@parse_example
 @@parse_single_example
 
@@ -49,7 +62,7 @@
 ## Input pipeline
 
 TensorFlow functions for setting up an input-prefetching pipeline.
-Please see the [reading data how-to](../../how_tos/reading_data.md)
+Please see the [reading data how-to](../../how_tos/reading_data/index.md)
 for context.
 
 ### Beginning of an input pipeline
diff --git a/tensorflow/python/ops/math_ops.py b/tensorflow/python/ops/math_ops.py
index d96320e..b0e548b 100644
--- a/tensorflow/python/ops/math_ops.py
+++ b/tensorflow/python/ops/math_ops.py
@@ -289,7 +289,7 @@
       values_cast = cast(x.values, dtype, name=name)
       return ops.SparseTensor(x.indices, values_cast, x.shape)
     else:
-      # TODO(mdevin): Handle what Josh said.
+      # TODO(touts): Handle what Josh said.
       #
       # Could return ops.convert_to_tensor(x, dtype=dtype, ...)  here, but that
       # allows some conversions that cast() can't do, e.g.  casting numbers to
@@ -801,7 +801,7 @@
   Raises:
     TypeError: If 'x' is not a Tensor or an IndexedSlices object.
   """
-  # TODO(mdevin): op_scope
+  # TODO(touts): op_scope
   if not isinstance(x, (ops.Tensor, ops.IndexedSlices)):
     raise TypeError("Not a Tensor or IndexedSlices: %s" % type(x))
   if isinstance(x, ops.IndexedSlices):
diff --git a/tensorflow/python/ops/nn.py b/tensorflow/python/ops/nn.py
index 7a4dc25..8eccc63 100644
--- a/tensorflow/python/ops/nn.py
+++ b/tensorflow/python/ops/nn.py
@@ -143,7 +143,7 @@
 (called candidates) for each batch of training examples.
 
 See our [Candidate Sampling Algorithms Reference]
-(http://www.tensorflow.org/extras/candidate_sampling.pdf)
+(../../extras/candidate_sampling.pdf)
 
 ### Sampled Loss Functions
 
diff --git a/tensorflow/python/ops/parsing_ops.py b/tensorflow/python/ops/parsing_ops.py
index dc954a3..940c932 100644
--- a/tensorflow/python/ops/parsing_ops.py
+++ b/tensorflow/python/ops/parsing_ops.py
@@ -28,96 +28,90 @@
                   dense_defaults=None,
                   dense_shapes=None,
                   name="ParseExample"):
-  """Parse Example protos.
+  """Parses `Example` protos.
 
-  Args:
-    serialized: string vector, a batch of binary serialized Example protos.
-    names: A string vector, the names of the serialized protos.
-      "names" may contain, e.g., table key (descriptive) names for the
-      corresponding serialized protos.  These are purely useful for debugging
-      purposes, and the presence of values here has no effect on the output.
-      "names" may be an empty vector, if no names are available.
-      If non-empty, this vector must be the same length as "serialized".
-    sparse_keys: A string list of keys in the Examples' features.
-      These keys are associated with sparse values.
-    sparse_types: A list of DTypes.
-      This list's length must match that of sparse_keys.  Currently
-      parse_example supports tf.float32 (FloatList), tf.int64 (Int64List),
-      and tf.string (BytesList).
-    dense_keys: A string list of keys in the Examples' features.
-      These keys are associated with dense values.
-    dense_types: A list of DTypes.
-      This list's length must match that of dense_keys.  Currently
-      parse_example supports tf.float32 (FloatList), tf.int64 (Int64List),
-      and tf.string (BytesList).
-    dense_defaults: A dict of {key:Tensor} (some may be missing).
-      The keys of the dict must match the dense_keys of the feature.
-      If a key is not present in this dictionary, the corresponding dense
-      Feature is required in all elements of serialized.
-    dense_shapes: A list of tuples.
-      Entries provide the shape of data in each dense Feature in features.
-      The length of dense_shapes must be the same as the length of dense_keys.
-      The number of elements in the Feature corresponding to dense_key[j]
-      must always have np.prod(dense_shapes[j]) entries.
-      If dense_shapes[j] == (D0, D1, ..., DN) then the the shape of output
-      Tensor dense_values[j] will be (|serialized|, D0, D1, ..., DN):
-      The dense outputs are just the inputs row-stacked by batch.
-    name: (Optional) Name of Op in the graph.
+  Parses a number of serialized [`Example`]
+  (https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/example/example.proto)
+  protos given in `serialized`.
 
-  Returns:
-    A dictionary mapping keys to Tensors and SparseTensors.
+  `names` may contain descriptive names for the corresponding serialized protos.
+  These may be useful for debugging purposes, but they have no effect on the
+  output. If not `None`, `names` must be the same length as `serialized`.
 
-    The key dense_keys[j] is mapped to a tensor of type dense_types[j] and
-    of shape (serialized.size(),) + dense_shapes[j] (i.e., the dense outputs are
-    inputs, reshaped in row-major format and then row-stacked by batch).
+  This op parses serialized examples into a dictionary mapping keys to `Tensor`
+  and `SparseTensor` objects respectively, depending on whether the keys appear
+  in `sparse_keys` or `dense_keys`.
 
-    The key sparse_keys[j] is mapped to a SparseTensor of type sparse_types[j].
-    The SparseTensor represents a ragged matrix.  Its indices are [batch, index]
-    where "batch" is is the batch entry the value is from, and "index" is the
-    value's index in the list of values associated with that feature
-    and example.  For example, if one expects a tf.float32 sparse feature "ft"
-    and three serialized examples are provided:
+  The key `dense_keys[j]` is mapped to a `Tensor` of type `dense_types[j]` and
+  of shape `(serialized.size(),) + dense_shapes[j]`.
 
-    serialized = [
-      features:
-        { feature: [ key: { "ft" value: float_list: { value: [1.0, 2.0] } } ] },
-      features:
-        { feature: [] },
-      features:
-        { feature: [ key: { "ft" value: float_list: { value: [3.0] } } ] }
-    ]
+  `dense_defaults` provides defaults for values referenced using `dense_keys`.
+  If a key is not present in this dictionary, the corresponding dense `Feature`
+  is required in all elements of `serialized`.
 
-    then the output will look like:
+  `dense_shapes[j]` provides the shape of each `Feature` entry referenced by
+  `dense_keys[j]`. The number of elements in the `Feature` corresponding to
+  `dense_key[j]` must always have `np.prod(dense_shapes[j])` entries. The
+  returned `Tensor` for `dense_key[j]` has shape `[N] + dense_shape[j]`, where
+  `N` is the number of `Example`s in `serialized`.
 
-      {"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
-                          values=[1.0, 2.0, 3.0],
-                          shape=(3, 2)) }
+  The key `sparse_keys[j]` is mapped to a `SparseTensor` of type
+  `sparse_types[j]`. The `SparseTensor` represents a ragged matrix.
+  Its indices are `[batch, index]` where `batch` is the batch entry the value
+  is from, and `index` is the value's index in the list of values associated
+  with that feature and example.
 
-  Raises:
-    ValueError: If sparse and dense keys intersect, or input lengths do not
-      match up for sparse_* (similarly for dense_*).
-    TypeError: If an input is malformed.
+  Examples:
 
-  Example input, format, and output: Just Sparse Inputs
-  ================================================
+  For example, if one expects a `tf.float32` sparse feature `ft` and three
+  serialized `Example`s are provided:
 
-  Given two brain.Example input protos:
+  ```
+  serialized = [
+    features:
+      { feature: [ key: { "ft" value: float_list: { value: [1.0, 2.0] } } ] },
+    features:
+      { feature: [] },
+    features:
+      { feature: [ key: { "ft" value: float_list: { value: [3.0] } } ] }
+  ]
+  ```
 
-  serialized:  // serialized versions of the protos below
-    [features: {
+  then the output will look like:
+
+  ```
+  {"ft": SparseTensor(indices=[[0, 0], [0, 1], [2, 0]],
+                      values=[1.0, 2.0, 3.0],
+                      shape=(3, 2)) }
+  ```
+
+  Given two `Example` input protos in `serialized`:
+
+  ```
+  [
+    features: {
       feature: { key: "kw" value: { bytes_list: { value: [ "knit", "big" ] } } }
       feature: { key: "gps" value: { float_list: { value: [] } } }
-     },
-     features: {
+    },
+    features: {
       feature: { key: "kw" value: { bytes_list: { value: [ "emmy" ] } } }
       feature: { key: "dank" value: { int64_list: { value: [ 42 ] } } }
       feature: { key: "gps" value: { } }
-    }]
-  names: ["input0", "input1"],
-  sparse_keys: ["kw", "dank", "gps"]
-  sparse_types: [DT_STRING, DT_INT64, DT_FLOAT]
+    }
+  ]
+  ```
 
-  Then the expected output is a dictionary:
+  And arguments
+
+  ```
+    names: ["input0", "input1"],
+    sparse_keys: ["kw", "dank", "gps"]
+    sparse_types: [DT_STRING, DT_INT64, DT_FLOAT]
+  ```
+
+  Then the output is a dictionary:
+
+  ```python
   {
     "kw": SparseTensor(
         indices=[[0, 0], [0, 1], [1, 0]],
@@ -132,63 +126,71 @@
         values=[],
         shape=[2, 0]),
   }
+  ```
 
+  For dense results in two serialized `Example`s:
 
-  Example input, format, and output: Dense Inputs (without defaults)
-  ==================================================================
-
-  Given two brain.Example input protos:
-
-  serialized:  // serialized versions of the protos below
-    [features: {
+  ```
+  [
+    features: {
       feature: { key: "age" value: { int64_list: { value: [ 0 ] } } }
       feature: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
      },
      features: {
       feature: { key: "age" value: { int64_list: { value: [] } } }
       feature: { key: "gender" value: { bytes_list: { value: [ "f" ] } } }
-    }]
+    }
+  ]
+  ```
+
+  We can use arguments:
+
+  ```
   names: ["input0", "input1"],
-  dense_keys: np.array(["age", "gender"])
-  dense_types: [tf.int64, tf.string]
+  dense_keys: np.array(["age", "gender"]),
+  dense_types: [tf.int64, tf.string],
   dense_defaults: {
-    "age": -1  # defaults to -1 if missing
+    "age": -1  # "age" defaults to -1 if missing
                # "gender" has no specified default so it's required
   }
-  dense_shapes: [(1,), (1,)]  # age, gender, label, weight
+  dense_shapes: [(1,), (1,)],  # age, gender, label, weight
+  ```
 
-  Then the expected output is a dictionary:
+  And the expected output is:
+
+  ```python
   {
     "age": [[0], [-1]],
     "gender": [["f"], ["f"]],
   }
+  ```
 
+  Args:
+    serialized: A list of strings, a batch of binary serialized `Example`
+      protos.
+    names: A list of strings, the names of the serialized protos.
+    sparse_keys: A list of string keys in the examples' features.
+      The results for these keys will be returned as `SparseTensor` objects.
+    sparse_types: A list of `DTypes` of the same length as `sparse_keys`.
+      Only `tf.float32` (`FloatList`), `tf.int64` (`Int64List`),
+      and `tf.string` (`BytesList`) are supported.
+    dense_keys: A list of string keys in the examples' features.
+      The results for these keys will be returned as `Tensor`s
+    dense_types: A list of DTypes of the same length as `dense_keys`.
+      Only `tf.float32` (`FloatList`), `tf.int64` (`Int64List`),
+      and `tf.string` (`BytesList`) are supported.
+    dense_defaults: A dict mapping string keys to `Tensor`s.
+      The keys of the dict must match the dense_keys of the feature.
+    dense_shapes: A list of tuples with the same length as `dense_keys`.
+      The shape of the data for each dense feature referenced by `dense_keys`.
+    name: A name for this operation (optional).
 
-  Example input, format, and output: Dense Inputs (with defaults)
-  ===============================================================
+  Returns:
+    A `dict` mapping keys to `Tensor`s and `SparseTensor`s.
 
-  Given two brain.Example input protos:
-
-  serialized:  // serialized versions of the protos below
-    [features: {
-      feature: { key: "weight" value: { float_list: { value: [ 1.0 ] } } }
-     },
-     features: {
-      feature: { key: "label" value: { float_list: { value: [ -1.0, 0.0 ] } } }
-    }]
-  names: ["input0", "input1"],
-  dense_keys: np.array(["label", "weight"])
-  dense_defaults: {
-    "label": [1.0, 2.0],  # float (default: vector)
-    "weight": 5.0         # float (default: scalar, 5.0)
-  }
-  dense_shapes: [(2,), (1,)]  # age, gender, label, weight
-
-  Then the expected output is a dictionary:
-  {
-    "label": [[1.0, 2.0], [-1.0, 0.0]],
-    "weight": [[1.0], [5.0]],
-  }
+  Raises:
+    ValueError: If sparse and dense key sets intersect, or input lengths do not
+      match up.
   """
   names = [] if names is None else names
   dense_defaults = {} if dense_defaults is None else dense_defaults
@@ -262,7 +264,20 @@
                          dense_defaults=None,
                          dense_shapes=None,
                          name="ParseSingleExample"):
-  """Identical to parse_example but for scalar serialized and names.
+  """Parses a single `Example` proto.
+
+  Similar to `parse_example`, except:
+
+  For dense tensors, the returned `Tensor` is identical to the output of
+  `parse_example`, except there is no batch dimension, the output shape is the
+  same as the shape given in `dense_shape`.
+
+  For `SparseTensor`s, the first (batch) column of the indices matrix is removed
+  (the indices matrix is a column vector), the values vector is unchanged, and
+  the first (batch_size) entry of the shape vector is removed (it is now a
+  single element vector).
+
+  See also `parse_example`.
 
   Args:
     serialized: A scalar string, a single serialized Example.
@@ -275,21 +290,11 @@
     dense_types: See parse_example documentation for more details.
     dense_defaults: See parse_example documentation for more details.
     dense_shapes: See parse_example documentation for more details.
-    name: Optional op name.
+    name: A name for this operation (optional).
 
   Returns:
     A dictionary mapping keys to Tensors and SparseTensors.
 
-    For dense tensors, the Tensor is identical to the output of parse_example,
-    except it is one less dimension (the first, batch, dimension is removed).
-
-    For SparseTensors:
-      The first (batch) column of the indices matrix is removed
-        (it is now a column vector).
-      The values vector is unchanged.
-      The first (batch_size) entry of the shape vector is removed
-        (it is now a single element vector).
-
   Raises:
     ValueError: if "scalar" or "names" have known shapes, and are not scalars.
   """
diff --git a/tensorflow/python/ops/sparse_ops.py b/tensorflow/python/ops/sparse_ops.py
index c0dca61..e0209bd 100644
--- a/tensorflow/python/ops/sparse_ops.py
+++ b/tensorflow/python/ops/sparse_ops.py
@@ -1,4 +1,5 @@
-"""## Sparse Tensor Representation.
+# pylint: disable=g-short-docstring-punctuation
+"""## Sparse Tensor Representation
 
 Tensorflow supports a `SparseTensor` representation for data that is sparse
 in multiple dimensions. Contrast this representation with `IndexedSlices`,
@@ -8,13 +9,13 @@
 @@SparseTensor
 @@SparseTensorValue
 
-## Sparse to Dense Conversion.
+## Sparse to Dense Conversion
 
 @@sparse_to_dense
 @@sparse_tensor_to_dense
 @@sparse_to_indicator
 
-## Manipulation.
+## Manipulation
 
 @@sparse_concat
 @@sparse_reorder
diff --git a/tensorflow/python/ops/state_ops.py b/tensorflow/python/ops/state_ops.py
index 1c8f38b..2e77bfa 100644
--- a/tensorflow/python/ops/state_ops.py
+++ b/tensorflow/python/ops/state_ops.py
@@ -14,7 +14,7 @@
 @@initialize_variables
 @@assert_variables_initialized
 
-## Saving and Restoring Variables.
+## Saving and Restoring Variables
 
 @@Saver
 
diff --git a/tensorflow/python/ops/variables.py b/tensorflow/python/ops/variables.py
index dafd3b8..ac202bb 100644
--- a/tensorflow/python/ops/variables.py
+++ b/tensorflow/python/ops/variables.py
@@ -207,7 +207,7 @@
 
     This convenience method requires a session where the graph containing this
     variable has been launched. If no session is passed, the default session is
-    used.  See the [Session class](../client.md#Session) for more information on
+    used.  See the [Session class](client.md#Session) for more information on
     launching a graph and on sessions.
 
     ```python
@@ -543,7 +543,7 @@
   """
   if var_list is None:
     var_list = all_variables()
-  # Backwards compatibility for old-style variables. TODO(mdevin): remove.
+  # Backwards compatibility for old-style variables. TODO(touts): remove.
   if not var_list:
     var_list = []
     for op in ops.get_default_graph().get_operations():
diff --git a/tensorflow/python/training/checkpoint_state.proto b/tensorflow/python/training/checkpoint_state.proto
index 1f52134..3abcd71 100644
--- a/tensorflow/python/training/checkpoint_state.proto
+++ b/tensorflow/python/training/checkpoint_state.proto
@@ -5,7 +5,7 @@
 
 // Protocol buffer representing the checkpoint state.
 //
-// TODO(mdevin): Add other attributes as needed.
+// TODO(touts): Add other attributes as needed.
 message CheckpointState {
   // Path to the most-recent model checkpoint.
   string model_checkpoint_path = 1;
diff --git a/tensorflow/python/training/input.py b/tensorflow/python/training/input.py
index 413fc04..6054d2b 100644
--- a/tensorflow/python/training/input.py
+++ b/tensorflow/python/training/input.py
@@ -329,38 +329,42 @@
                shapes=None, name=None):
   """Run a list of tensors to fill a queue to create batches of examples.
 
-  This version enqueues a different list of tensors in different threads.
-  Implemented using a queue -- a QueueRunner for the queue
-  is added to the current Graph's QUEUE_RUNNER collection.
+  Enqueues a different list of tensors in different threads.
+  Implemented using a queue -- a `QueueRunner` for the queue
+  is added to the current `Graph`'s `QUEUE_RUNNER` collection.
+
+  `len(tensor_list_list)` threads will be started, with thread `i` enqueuing
+  the tensors from tensor_list[i]. `tensor_list[i1][j]` must match
+  `tensor_list[i2][j]` in type and shape, except in the first dimension if
+  `enqueue_many` is true.
+
+  If `enqueue_many` is false, each `tensor_list_list[i]` is assumed to
+  represent a single example.  Otherwise, `tensor_list_list[i]` is assumed to
+  represent a batch of examples, where the first dimension is indexed by
+  example, and all members of `tensor_list_list[i]` should have the same size
+  in the first dimension.
+
+  If `enqueue_many` is false, then an input tensor `x` will be output as a
+  tensor with shape `[batch_size] + x.shape`. If `enqueue_many` is true, the
+  slices of any input tensor `x` are treated as examples, and the output tensors
+  will have shape `[batch_size] + x.shape[1:]`.
+
+  The `capacity` argument controls the how long the prefetching
+  is allowed to grow the queues.
 
   Args:
     tensor_list_list: A list of tuples of tensors to enqueue.
-      len(tensor_list_list) threads will be started, with the i-th
-      thread enqueuing the tensors from tensor_list[i].
-      tensor_list[i1][j] must match tensor_list[i2][j] in type and
-      shape (except in the first dimension if enqueue_many is true).
-    batch_size: The new batch size pulled from the queue.
-    capacity: Maximum number of elements in the queue, controls the
-      how far ahead the prefetching allowed is allowed to get and
-      memory usage.
-    enqueue_many: If False, each tensor_list_list[i] is assumed to
-      represent a single example.  If True, tensor_list_list[i] is
-      assumed to represent a batch of examples, where the first
-      dimension is indexed by example, and all members of
-      tensor_list_list[i] should have the same size in the first
-      dimension.
-    shapes: Optional. The shapes for each example.  Defaults to the
-      inferred shapes for tensor_list_list[i] (which must match, after
-      leaving off the first dimension if enqueue_many is True).
+    batch_size: An integer. The new batch size pulled from the queue.
+    capacity: An integer. The maximum number of elements in the queue.
+    enqueue_many: Whether each tensor in `tensor_list_list` is a single
+      example.
+    shapes: (Optional) The shapes for each example.  Defaults to the
+      inferred shapes for `tensor_list_list[i]`.
     name: A name for the operations (optional).
 
   Returns:
     A list of tensors with the same number and types as
-    tensor_list_list[i].  If enqueue_many is false, then an input
-    tensor with shape `[x, y, z]` will be output as a tensor with
-    shape `[batch_size, x, y, z]`.  If enqueue_many is True, and an
-    input tensor has shape `[*, x, y, z]`, the the output will have
-    shape `[batch_size, x, y, z]`.
+    `tensor_list_list[i]`.
   """
   with ops.op_scope(_flatten(tensor_list_list), name, "batch_join") as name:
     tensor_list_list = _validate_join(tensor_list_list)
@@ -462,15 +466,15 @@
     min_after_dequeue: Minimum number elements in the queue after a
       dequeue, used to ensure a level of mixing of elements.
     seed: Seed for the random shuffling within the queue.
-    enqueue_many: If False, each tensor_list_list[i] is assumed to
-      represent a single example.  If True, tensor_list_list[i] is
+    enqueue_many: If `False`, each tensor_list_list[i] is assumed to
+      represent a single example.  If `True`, tensor_list_list[i] is
       assumed to represent a batch of examples, where the first
       dimension is indexed by example, and all members of
       tensor_list_list[i] should have the same size in the first
       dimension.
     shapes: Optional. The shapes for each example.  Defaults to the
-      inferred shapes for tensor_list_list[i] (which must match, after
-      leaving off the first dimension if enqueue_many is True).
+      inferred shapes for `tensor_list_list[i]` (which must match, after
+      leaving off the first dimension if enqueue_many is `True`).
     name: A name for the operations (optional).
 
   Returns:
diff --git a/tensorflow/python/training/moving_averages.py b/tensorflow/python/training/moving_averages.py
index becc71d..49fadb8 100644
--- a/tensorflow/python/training/moving_averages.py
+++ b/tensorflow/python/training/moving_averages.py
@@ -9,7 +9,7 @@
 from tensorflow.python.ops import variables
 
 
-# TODO(mdevin): switch to variables.Variable.
+# TODO(touts): switch to variables.Variable.
 def assign_moving_average(variable, value, decay, name=None):
   """Compute the moving average of a variable.
 
@@ -182,7 +182,7 @@
       ValueError: If the moving average of one of the variables is already
         being computed.
     """
-    # TODO(mdevin): op_scope
+    # TODO(touts): op_scope
     if var_list is None:
       var_list = variables.trainable_variables()
     for var in var_list:
diff --git a/tensorflow/python/training/saver.py b/tensorflow/python/training/saver.py
index 505bbad..8d78615 100644
--- a/tensorflow/python/training/saver.py
+++ b/tensorflow/python/training/saver.py
@@ -159,7 +159,7 @@
       restore_control_inputs = assign_ops[-1:] if restore_sequentially else []
       # Load and optionally reshape on the CPU, as string tensors are not
       # available on the GPU.
-      # TODO(mdevin): Re-enable restore on GPU when we can support annotating
+      # TODO(touts): Re-enable restore on GPU when we can support annotating
       # string tensors as "HostMemory" inputs.
       with ops.device(graph_util.set_cpu0(v.device) if v.device else None):
         with ops.control_dependencies(restore_control_inputs):
@@ -214,7 +214,7 @@
   def _GroupByDevices(self, vars_to_save):
     """Group Variable tensor slices per device.
 
-    TODO(mdevin): Make sure that all the devices found are on different
+    TODO(touts): Make sure that all the devices found are on different
     job/replica/task/cpu|gpu.  It would be bad if 2 were on the same device.
     It can happen if the devices as unspecified.
 
diff --git a/tensorflow/python/training/training.py b/tensorflow/python/training/training.py
index a400e9f..84c8156 100644
--- a/tensorflow/python/training/training.py
+++ b/tensorflow/python/training/training.py
@@ -1,7 +1,7 @@
 # pylint: disable=wildcard-import,unused-import,g-bad-import-order,line-too-long
 """This library provides a set of classes and functions that helps train models.
 
-## Optimizers.
+## Optimizers
 
 The Optimizer base class provides methods to compute gradients for a loss and
 apply gradients to variables.  A collection of subclasses implement classic
@@ -19,7 +19,7 @@
 @@FtrlOptimizer
 @@RMSPropOptimizer
 
-## Gradient Computation.
+## Gradient Computation
 
 TensorFlow provides functions to compute the derivatives for a given
 TensorFlow computation graph, adding operations to the graph. The
@@ -46,10 +46,10 @@
 @@clip_by_global_norm
 @@global_norm
 
-## Decaying the learning rate.
+## Decaying the learning rate
 @@exponential_decay
 
-## Moving Averages.
+## Moving Averages
 
 Some training algorithms, such as GradientDescent and Momentum often benefit
 from maintaining a moving average of variables during optimization.  Using the
@@ -57,7 +57,7 @@
 
 @@ExponentialMovingAverage
 
-## Coordinator and QueueRunner.
+## Coordinator and QueueRunner
 
 See [Threading and Queues](../../how_tos/threading_and_queues/index.md)
 for how to use threads and queues.  For documentation on the Queue API,
@@ -68,17 +68,21 @@
 @@add_queue_runner
 @@start_queue_runners
 
-## Summary Operations.
+## Summary Operations
 
 The following ops output
 [`Summary`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/framework/summary.proto)
 protocol buffers as serialized string tensors.
 
-You can fetch the output of a summary op in a session, and pass it to a
-[SummaryWriter](train.md#SummaryWriter) to append it to an event file.  You can
-then use TensorBoard to visualize the contents of the event files.  See
-[TensorBoard and Summaries](../../how_tos/summaries_and_tensorboard/index.md)
-for more details.
+You can fetch the output of a summary op in a session, and pass it to
+a [SummaryWriter](train.md#SummaryWriter) to append it to an event
+file.  Event files contain
+[`Event`](https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/core/util/event.proto)
+protos that can contain `Summary` protos along with the timestamp and
+step.  You can then use TensorBoard to visualize the contents of the
+event files.  See [TensorBoard and
+Summaries](../../how_tos/summaries_and_tensorboard/index.md) for more
+details.
 
 @@scalar_summary
 @@image_summary
@@ -88,7 +92,7 @@
 @@merge_summary
 @@merge_all_summaries
 
-## Adding Summaries to Event Files.
+## Adding Summaries to Event Files
 
 See [Summaries and
 TensorBoard](../../how_tos/summaries_and_tensorboard/index.md) for an
@@ -97,10 +101,11 @@
 @@SummaryWriter
 @@summary_iterator
 
-## Training utilities.
+## Training utilities
 
 @@global_step
 @@write_graph
+
 """
 
 # Optimizers.
@@ -134,5 +139,5 @@
 from tensorflow.core.example.example_pb2 import *
 from tensorflow.core.example.feature_pb2 import *
 
-# Utility op.  Open Source. TODO(mdevin): move to nn?
+# Utility op.  Open Source. TODO(touts): move to nn?
 from tensorflow.python.training.learning_rate_decay import exponential_decay
diff --git a/third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/Patch3d.h b/third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/Patch3d.h
index df60fe1..89190eb 100644
--- a/third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/Patch3d.h
+++ b/third_party/eigen3/unsupported/Eigen/CXX11/src/NeuralNetworks/Patch3d.h
@@ -194,7 +194,7 @@
       return Extract3DPatches(input, patchPlanes, patchRows, patchCols,
                               stridePlanes, strideRows, strideCols,
                               0, 0, 0, 0, 0, 0, padding_value);
-    case PADDING_SAME:
+    case PADDING_SAME: {
       // The side of the tensor before striding should be just the expected
       // output times the stride.
       const TensorIndex size_z = ceil(inputPlanes / static_cast<float>(stridePlanes)) * stridePlanes;
@@ -214,6 +214,13 @@
                               dy - dy / 2, dy / 2,
                               dx - dx / 2, dx / 2,
                               padding_value);
+    }
+    default:
+      eigen_assert(false && "unexpected padding");
+      // unreachable code to avoid missing return warning.
+      return Extract3DPatches(input, patchPlanes, patchRows, patchCols,
+                              stridePlanes, strideRows, strideCols,
+                              0, 0, 0, 0, 0, 0, padding_value);
   }
 }