<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 Copyright 2019 The TensorFlow Authors.
Step1:  将 tf.summary 用法迁移到 TF 2.0
<table class="tfo-notebook-buttons" align="left">
  <td><a target="_blank" href="https
Step2:  TensorFlow 2.0 包含对 tf.summary API（用于写入摘要数据以在 TensorBoard 中进行可视化）的重大变更。
变更
将 tf.summary API 视为两个子 API 非常实用：
一组用于记录各个摘要（summary.scalar()、summary.histogram()、summary.image()、summary.audio() 和 summary.text()）的运算，从您的模型代码内嵌调用。
写入逻辑，用于收集各个摘要并将其写入到特殊格式化的日志文件中（TensorBoard 随后会读取该文件以生成可视化效果）。
在 TF 1.x 中
上述二者必须手动关联在一起，方法是通过 Session.run() 获取摘要运算输出，并调用 FileWriter.add_summary(output, step)。v1.summary.merge_all() 运算通过使用计算图集合汇总所有摘要运算输出使这个操作更轻松，但是这种方式对 Eager Execution 和控制流的效果仍不尽人意，因此特别不适用于 TF 2.0。
在 TF 2.X 中
上述二者紧密集成。现在，单独的 tf.summary 运算在执行时可立即写入其数据。在您的模型代码中使用 API 的方式与以往类似，但是现在对 Eager Execution 更加友好，同时也保留了与计算图模式的兼容性。两个子 API 的集成意味着 summary.FileWriter 现已成为 TensorFlow 执行上下文的一部分，可直接通过 tf.summary 运算访问，因此配置写入器将是主要的差异。
Eager Execution 的示例用法（TF 2.0 中默认）：
Step3:  tf.function 计算图执行的示例用法：
Step4:  旧 TF 1.x 计算图执行的示例用法：
<ASSISTANT_TASK:>
Python Code:
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
Explanation: Copyright 2019 The TensorFlow Authors.
End of explanation
import tensorflow as tf
Explanation: 将 tf.summary 用法迁移到 TF 2.0
<table class="tfo-notebook-buttons" align="left">
  <td><a target="_blank" href="https://tensorflow.google.cn/tensorboard/migrate"><img src="https://tensorflow.google.cn/images/tf_logo_32px.png">在 TensorFlow.org 上查看 </a></td>
  <td><a target="_blank" href="https://colab.research.google.com/github/tensorflow/docs-l10n/blob/master/site/zh-cn/tensorboard/migrate.ipynb"><img src="https://tensorflow.google.cn/images/colab_logo_32px.png">在 Google Colab 中运行 </a></td>
  <td><a target="_blank" href="https://github.com/tensorflow/docs-l10n/blob/master/site/zh-cn/tensorboard/migrate.ipynb"><img src="https://tensorflow.google.cn/images/GitHub-Mark-32px.png">在 GitHub 中查看源代码</a></td>
</table>
注：本文档面向已经熟悉 TensorFlow 1.x TensorBoard 并希望将大型 TensorFlow 代码库从 TensorFlow 1.x 迁移至 2.0 的用户。如果您是 TensorBoard 的新用户，另请参阅入门文档。如果您使用 tf.keras，那么可能无需执行任何操作即可升级到 TensorFlow 2.0。
End of explanation
writer = tf.summary.create_file_writer("/tmp/mylogs/eager")
with writer.as_default():
  for step in range(100):
    # other model code would go here
    tf.summary.scalar("my_metric", 0.5, step=step)
    writer.flush()
ls /tmp/mylogs/eager
Explanation: TensorFlow 2.0 包含对 tf.summary API（用于写入摘要数据以在 TensorBoard 中进行可视化）的重大变更。
变更
将 tf.summary API 视为两个子 API 非常实用：
一组用于记录各个摘要（summary.scalar()、summary.histogram()、summary.image()、summary.audio() 和 summary.text()）的运算，从您的模型代码内嵌调用。
写入逻辑，用于收集各个摘要并将其写入到特殊格式化的日志文件中（TensorBoard 随后会读取该文件以生成可视化效果）。
在 TF 1.x 中
上述二者必须手动关联在一起，方法是通过 Session.run() 获取摘要运算输出，并调用 FileWriter.add_summary(output, step)。v1.summary.merge_all() 运算通过使用计算图集合汇总所有摘要运算输出使这个操作更轻松，但是这种方式对 Eager Execution 和控制流的效果仍不尽人意，因此特别不适用于 TF 2.0。
在 TF 2.X 中
上述二者紧密集成。现在，单独的 tf.summary 运算在执行时可立即写入其数据。在您的模型代码中使用 API 的方式与以往类似，但是现在对 Eager Execution 更加友好，同时也保留了与计算图模式的兼容性。两个子 API 的集成意味着 summary.FileWriter 现已成为 TensorFlow 执行上下文的一部分，可直接通过 tf.summary 运算访问，因此配置写入器将是主要的差异。
Eager Execution 的示例用法（TF 2.0 中默认）：
End of explanation
writer = tf.summary.create_file_writer("/tmp/mylogs/tf_function")
@tf.function
def my_func(step):
  with writer.as_default():
    # other model code would go here
    tf.summary.scalar("my_metric", 0.5, step=step)
for step in tf.range(100, dtype=tf.int64):
  my_func(step)
  writer.flush()
ls /tmp/mylogs/tf_function
Explanation: tf.function 计算图执行的示例用法：
End of explanation
g = tf.compat.v1.Graph()
with g.as_default():
  step = tf.Variable(0, dtype=tf.int64)
  step_update = step.assign_add(1)
  writer = tf.summary.create_file_writer("/tmp/mylogs/session")
  with writer.as_default():
    tf.summary.scalar("my_metric", 0.5, step=step)
  all_summary_ops = tf.compat.v1.summary.all_v2_summary_ops()
  writer_flush = writer.flush()
with tf.compat.v1.Session(graph=g) as sess:
  sess.run([writer.init(), step.initializer])
  for i in range(100):
    sess.run(all_summary_ops)
    sess.run(step_update)
    sess.run(writer_flush) 
ls /tmp/mylogs/session
Explanation: 旧 TF 1.x 计算图执行的示例用法：
End of explanation
<END_TASK>