message: dynamic_rnn: put all ops in the same scope
  This clarifies the graph visualization a bit.
diff: @@ -565,6 +565,14 @@ def dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None,
  if not _like_rnncell(cell):
  raise TypeError("cell must be an instance of RNNCell")
  + with vs.variable_scope(scope or "rnn") as varscope:
  + # Create a new scope in which the caching device is either
  + # determined by the parent scope, or is set to place the cached
  + # Variable using the same placement as for the rest of the RNN.
  + if context.in_graph_mode():
  + if varscope.caching_device is None:
  + varscope.set_caching_device(lambda op: op.device)
  +
  # By default, time_major==False and inputs are batch-major: shaped
  # [batch, time, depth]
  # For internal calculations, we transpose to [time, batch, depth]
  @@ -585,13 +593,6 @@ def dynamic_rnn(cell, inputs, sequence_length=None, initial_state=None,
  sequence_length = array_ops.identity( # Just to find it in the graph.
  sequence_length, name="sequence_length")
  - # Create a new scope in which the caching device is either
  - # determined by the parent scope, or is set to place the cached
  - # Variable using the same placement as for the rest of the RNN.
  - with vs.variable_scope(scope or "rnn") as varscope:
  - if context.in_graph_mode():
  - if varscope.caching_device is None:
  - varscope.set_caching_device(lambda op: op.device)
  batch_size = _best_effort_input_batch_size(flat_input)
  if initial_state is not None:
  