{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "5rmpybwysXGV" }, "source": [ "##### Copyright 2020 The TensorFlow Authors." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "cellView": "form", "execution": { "iopub.execute_input": "2022-12-14T20:11:28.286738Z", "iopub.status.busy": "2022-12-14T20:11:28.286212Z", "iopub.status.idle": "2022-12-14T20:11:28.290010Z", "shell.execute_reply": "2022-12-14T20:11:28.289509Z" }, "id": "m8y3rGtQsYP2" }, "outputs": [], "source": [ "#@title Licensed under the Apache License, Version 2.0 (the \"License\");\n", "# you may not use this file except in compliance with the License.\n", "# You may obtain a copy of the License at\n", "#\n", "# https://www.apache.org/licenses/LICENSE-2.0\n", "#\n", "# Unless required by applicable law or agreed to in writing, software\n", "# distributed under the License is distributed on an \"AS IS\" BASIS,\n", "# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n", "# See the License for the specific language governing permissions and\n", "# limitations under the License." ] }, { "cell_type": "markdown", "metadata": { "id": "hrXv0rU9sIma" }, "source": [ "# 基本训练循环" ] }, { "cell_type": "markdown", "metadata": { "id": "7S0BwJ_8sLu7" }, "source": [ "\n", " \n", " \n", " \n", " \n", "
在 TensorFlow.org 上查看 在 Google Colab 中运行 在 GitHub 上查看源代码 下载笔记本
" ] }, { "cell_type": "markdown", "metadata": { "id": "k2o3TTG4TFpt" }, "source": [ "在前面的教程里,您已经了解了[tensors](./tensor.ipynb), [variables](./variable.ipynb), [gradient tape](autodiff.ipynb), 和[modules](./intro_to_modules.ipynb)。在这篇教程,您将把它们放在一起训练模型。\n", "\n", "此外,TensorFlow 还包括 [tf.Keras API](https://tensorflow.google.cn/guide/keras/overview),这是一种高级神经网络 API,可提供有用的抽象来减少样板。但是,在本指南中,您将使用基本类。" ] }, { "cell_type": "markdown", "metadata": { "id": "3LXMVuV0VhDr" }, "source": [ "## 创建" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:28.293799Z", "iopub.status.busy": "2022-12-14T20:11:28.293233Z", "iopub.status.idle": "2022-12-14T20:11:30.806885Z", "shell.execute_reply": "2022-12-14T20:11:30.805954Z" }, "id": "NiolgWMPgpwI" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2022-12-14 20:11:29.211963: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer.so.7'; dlerror: libnvinfer.so.7: cannot open shared object file: No such file or directory\n", "2022-12-14 20:11:29.212049: W tensorflow/compiler/xla/stream_executor/platform/default/dso_loader.cc:64] Could not load dynamic library 'libnvinfer_plugin.so.7'; dlerror: libnvinfer_plugin.so.7: cannot open shared object file: No such file or directory\n", "2022-12-14 20:11:29.212057: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Cannot dlopen some TensorRT libraries. If you would like to use Nvidia GPU with TensorRT, please make sure the missing libraries mentioned above are installed properly.\n" ] } ], "source": [ "import tensorflow as tf\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "colors = plt.rcParams['axes.prop_cycle'].by_key()['color']" ] }, { "cell_type": "markdown", "metadata": { "id": "iKD__8kFCKNt" }, "source": [ "## 解决机器学习问题\n", "\n", "解决一个机器学习问题通常包含以下步骤:\n", "\n", "- 获得训练数据。\n", "- 定义模型。\n", "- 定义损失函数。\n", "- 遍历训练数据,从目标值计算损失。\n", "- 计算该损失的梯度,并使用*optimizer*调整变量以适合数据。\n", "- 计算结果。\n", "\n", "为了便于说明,在本指南中,您将开发一个简单的线性模型, $f(x) = x * W + b$, 其中包含两个变量: $W$ (权重) 和 $b$ (偏差)。\n", "\n", "这是最基本的机器学习问题:给定 $x$ 和 $y$,尝试通过[简单的线性回归](https://en.wikipedia.org/wiki/Linear_regression#Simple_and_multiple_linear_regression)来找到直线的斜率和偏移量。" ] }, { "cell_type": "markdown", "metadata": { "id": "qutT_fkl_CBc" }, "source": [ "## 数据\n", "\n", "监督学习使用*输入*(通常表示为 *x*)和*输出*(表示为 *y*,通常称为*标签*)。目标是从成对的输入和输出中学习,以便您可以根据输入预测输出的值。\n", "\n", "TensorFlow中几乎每个输入数据都是由张量表示,并且通常是向量。监督学习中,输出(即想到预测值)同样是个张量。\n", "\n", "下面是通过将高斯(正态)噪声添加到直线上的点而合成的一些数据。" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:30.811439Z", "iopub.status.busy": "2022-12-14T20:11:30.810821Z", "iopub.status.idle": "2022-12-14T20:11:34.221155Z", "shell.execute_reply": "2022-12-14T20:11:34.220490Z" }, "id": "NzivK2ATByOz" }, "outputs": [], "source": [ "# The actual line\n", "TRUE_W = 3.0\n", "TRUE_B = 2.0\n", "\n", "NUM_EXAMPLES = 201\n", "\n", "# A vector of random x values\n", "x = tf.linspace(-2,2, NUM_EXAMPLES)\n", "x = tf.cast(x, tf.float32)\n", "\n", "def f(x):\n", " return x * TRUE_W + TRUE_B\n", "\n", "# Generate some noise\n", "noise = tf.random.normal(shape=[NUM_EXAMPLES])\n", "\n", "# Calculate y\n", "y = f(x) + noise" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.224836Z", "iopub.status.busy": "2022-12-14T20:11:34.224195Z", "iopub.status.idle": "2022-12-14T20:11:34.420061Z", "shell.execute_reply": "2022-12-14T20:11:34.419321Z" }, "id": "IlFd_HVBFGIF" }, "outputs": [ { "data": { "image/png": "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HOiU3j3ppJPUr1+/tGOdM2eOhg4dqsGDB+utt97S7bffrl27dmnNmjVODzmtQ4cO6fjx40l/9zt37kz6mgMHDuTEeyVldn8jR47UE088ofPOO0+RSEQrV67U5MmTtWPHDscP93RDqvcvGo2qublZRUVFHo3MPoMGDdIjjzyiCRMmqKWlRb/+9a81depUbdmyReeff77Xw0urra1NixcvVkVFhc4999yUz/Pi7zCnMyJVVVVJC4fafyX+R2Hfvn2aMWOGfvjDH2rhwoUejdy8TO7Riquuuko/+MEPNHr0aM2cOVPPP/+8GhoatHHjRvtuIg2n789rTt/ftddeq+nTp2v06NGaO3eu/uM//kNr167Vnj17bLwL2KG8vFz/8A//oLFjx+qiiy7SmjVrVFJSokcffdTrocGkkSNH6rrrrtP48eM1efJkPfHEE5o8ebLuu+8+r4fWpUWLFuntt9/WM8884/VQOsnpjMgtt9yi+fPnp33O8OHD4/97//79qqys1OTJk/XYY4+lfd3AgQPV2tqqw4cPd8iKHDx4UAMHDsxm2JZYvcdsDR8+XKeeeqp2796tiy++2Lafm4qT9xd7nw4ePKhBgwbFHz948KDGjh2b0c+0yuz9DRw4sFOR49dff63PP//c0v/fJk2aJOlE1m/EiBGWx2uXU089Vd26deu0yyzd38/AgQMtPd9LmdxfopNPPlnjxo3T7t27nRii61K9f8XFxYHIhqRywQUXqL6+3uthpHXTTTfFC+C7yr558XeY04FISUmJSkpKTD133759qqys1Pjx47Vq1SoVFKRPBo0fP14nn3yyNmzYoCuvvFLSiUrpxsZGlZeXZz12s6zcox0+/vhjffbZZx0mbic5eX9lZWUaOHCgNmzYEA88otGotmzZYnlnUabM3l95ebkOHz6srVu3avz48ZKkuro6tbW1xYMLM9544w1Jcu39S6V79+4aP368NmzYoJkzZ0o6kRresGGDbrrppqSvKS8v14YNG7R48eL4Yy+99JKrf29mZXJ/iY4fP67t27fre9/7noMjdU95eXmnbZ5+ff/s9MYbb3j+95aKYRj66U9/qrVr12rjxo0qKyvr8jWe/B06VgbrIx9//LFx5plnGhdffLHx8ccfG01NTfGv9s8ZOXKksWXLlvhj119/vTFkyBCjrq7OeO2114zy8nKjvLzci1sw5cMPPzS2bdtm3HXXXcYpp5xibNu2zdi2bZtx5MiR+HNGjhxprFmzxjAMwzhy5IjxT//0T8bmzZuNvXv3Gn/4wx+M888/3zjrrLOMr776yqvbSMnq/RmGYdTU1Bh9+vQxfve73xlvvfWWcfnllxtlZWVGc3OzF7eQ1owZM4xx48YZW7ZsMerr642zzjrLuPrqq+PfT/z/6O7du41/+Zd/MV577TVj7969xu9+9ztj+PDhxpQpU7y6hQ6eeeYZo7Cw0HjyySeNd955x7j22muNPn36GAcOHDAMwzB+/OMfG1VVVfHn/+lPfzJOOukkY+XKlca7775rLF++3Dj55JON7du3e3ULaVm9v7vuust48cUXjT179hhbt241rrrqKqNHjx7Gjh07vLqFtI4cORL/G5Nk3Hvvvca2bduMDz/80DAMw6iqqjJ+/OMfx5//l7/8xejZs6dx6623Gu+++67x4IMPGt26dTNeeOEFr26hS1bv8b777jPWrVtnvP/++8b27duNn/3sZ0ZBQYHxhz/8watbSOuGG24wwuGwsXHjxg7z3rFjx+LP8cPfYV4EIqtWrTIkJf2K2bt3ryHJ+OMf/xh/rLm52bjxxhuNvn37Gj179jRmzZrVIXjxm3nz5iW9x/b3JMlYtWqVYRiGcezYMeOSSy4xSkpKjJNPPtkYOnSosXDhwvh/SP3G6v0ZxoktvHfccYcxYMAAo7Cw0Lj44ouNXbt2uT94Ez777DPj6quvNk455RSjuLjYWLBgQYcgK/H/o42NjcaUKVOMfv36GYWFhcaZZ55p3HrrrUYkEvHoDjp74IEHjCFDhhjdu3c3LrjgAuPPf/5z/HsXXXSRMW/evA7P/+1vf2ucffbZRvfu3Y1zzjnH+P3vf+/yiK2xcn+LFy+OP3fAgAHG9773PeP111/3YNTmxLaqJn7F7mnevHnGRRdd1Ok1Y8eONbp3724MHz68w9+iH1m9xxUrVhgjRowwevToYfTr18+YOnWqUVdX583gTUg177V/X/zwdxj6ZrAAAACuy+ldMwAAILcRiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM8QiAAAAM/8P008a/lEYlAUAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot all the data\n", "plt.plot(x, y, '.')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "UH95XUzhL99d" }, "source": [ "张量通常以 *batches* 的形式聚集在一起,或者是成组的输入和输出堆叠在一起。批处理能够对训练过程带来一些好处,并且可以与加速器和矢量化计算很好地配合使用。给定此数据集的大小,您可以将整个数据集视为一个批次。" ] }, { "cell_type": "markdown", "metadata": { "id": "gFzH64Jn9PIm" }, "source": [ "## 定义模型\n", "\n", "使用 `tf.Variable` 代表模型中的所有权重。`tf.Variable` 能够存储值,并根据需要以张量形式提供它。详情请见 [variable guide](./variable.ipynb)。\n", "\n", "使用 `tf.Module` 封装变量和计算。您可以使用任何Python对象,但是通过这种方式可以轻松保存它。\n", "\n", "这里,您可以定义 *w* 和 *b* 为变量。" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.423573Z", "iopub.status.busy": "2022-12-14T20:11:34.423095Z", "iopub.status.idle": "2022-12-14T20:11:34.437108Z", "shell.execute_reply": "2022-12-14T20:11:34.436551Z" }, "id": "_WRu7Pze7wk8" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Variables: (, )\n" ] } ], "source": [ "class MyModel(tf.Module):\n", " def __init__(self, **kwargs):\n", " super().__init__(**kwargs)\n", " # Initialize the weights to `5.0` and the bias to `0.0`\n", " # In practice, these should be randomly initialized\n", " self.w = tf.Variable(5.0)\n", " self.b = tf.Variable(0.0)\n", "\n", " def __call__(self, x):\n", " return self.w * x + self.b\n", "\n", "model = MyModel()\n", "\n", "# List the variables tf.modules's built-in variable aggregation.\n", "print(\"Variables:\", model.variables)\n", "\n", "# Verify the model works\n", "assert model(3.0).numpy() == 15.0" ] }, { "cell_type": "markdown", "metadata": { "id": "rdpN_3ssG9D5" }, "source": [ "初始变量在此处以固定方式设置,但 Keras 提供了您可以与或不与 Keras 其他部分一起使用的许多[初始值设定项](https://tensorflow.google.cn/api_docs/python/tf/keras/initializers)。" ] }, { "cell_type": "markdown", "metadata": { "id": "xa6j_yXa-j79" }, "source": [ "### 定义损失函数\n", "\n", "损失函数衡量给定输入的模型输出与目标输出的匹配程度。目的是在训练过程中尽量减少这种差异。定义标准的L2损失,也称为“均方误差”:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.440342Z", "iopub.status.busy": "2022-12-14T20:11:34.439885Z", "iopub.status.idle": "2022-12-14T20:11:34.442903Z", "shell.execute_reply": "2022-12-14T20:11:34.442381Z" }, "id": "Y0ysUFGY924U" }, "outputs": [], "source": [ "# This computes a single loss value for an entire batch\n", "def loss(target_y, predicted_y):\n", " return tf.reduce_mean(tf.square(target_y - predicted_y))" ] }, { "cell_type": "markdown", "metadata": { "id": "-50nq-wPBsAW" }, "source": [ "在训练模型之前,您可以可视化损失值。使用红色绘制模型的预测值,使用蓝色绘制训练数据。" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.445883Z", "iopub.status.busy": "2022-12-14T20:11:34.445438Z", "iopub.status.idle": "2022-12-14T20:11:34.606764Z", "shell.execute_reply": "2022-12-14T20:11:34.606059Z" }, "id": "_eb83LtrB4nt" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Current loss: 10.730574\n" ] } ], "source": [ "plt.plot(x, y, '.', label=\"Data\")\n", "plt.plot(x, f(x), label=\"Ground truth\")\n", "plt.plot(x, model(x), label=\"Predictions\")\n", "plt.legend()\n", "plt.show()\n", "\n", "print(\"Current loss: %1.6f\" % loss(y, model(x)).numpy())" ] }, { "cell_type": "markdown", "metadata": { "id": "sSDP-yeq_4jE" }, "source": [ "### 定义训练循环\n", "\n", "训练循环按顺序重复执行以下任务:\n", "\n", "- 发送一批输入值,通过模型生成输出值\n", "- 通过比较输出值与输出(标签),来计算损失值\n", "- 使用梯度带(GradientTape)找到梯度值\n", "- 使用这些梯度优化变量\n", "\n", "这个例子中,您可以使用 [gradient descent](https://en.wikipedia.org/wiki/Gradient_descent)训练数据。\n", "\n", "`tf.keras.optimizers`中有许多梯度下降的变量。但是本着搭建的第一原则,您将在这里 借助`tf.GradientTape`的自动微分和`tf.assign_sub`的递减值(结合了`tf.assign`和`tf.sub`)自己实现基本数学:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.610626Z", "iopub.status.busy": "2022-12-14T20:11:34.609983Z", "iopub.status.idle": "2022-12-14T20:11:34.614512Z", "shell.execute_reply": "2022-12-14T20:11:34.613857Z" }, "id": "MBIACgdnA55X" }, "outputs": [], "source": [ "# Given a callable model, inputs, outputs, and a learning rate...\n", "def train(model, x, y, learning_rate):\n", "\n", " with tf.GradientTape() as t:\n", " # Trainable variables are automatically tracked by GradientTape\n", " current_loss = loss(y, model(x))\n", "\n", " # Use GradientTape to calculate the gradients with respect to W and b\n", " dw, db = t.gradient(current_loss, [model.w, model.b])\n", "\n", " # Subtract the gradient scaled by the learning rate\n", " model.w.assign_sub(learning_rate * dw)\n", " model.b.assign_sub(learning_rate * db)" ] }, { "cell_type": "markdown", "metadata": { "id": "RwWPaJryD2aN" }, "source": [ "要查看训练,您可以通过训练循环发送同一批次的 *x* 和 *y*,并观察 `W` 和 `b` 如何变化。" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.617993Z", "iopub.status.busy": "2022-12-14T20:11:34.617461Z", "iopub.status.idle": "2022-12-14T20:11:34.623593Z", "shell.execute_reply": "2022-12-14T20:11:34.622983Z" }, "id": "XdfkR223D9dW" }, "outputs": [], "source": [ "model = MyModel()\n", "\n", "# Collect the history of W-values and b-values to plot later\n", "weights = []\n", "biases = []\n", "epochs = range(10)\n", "\n", "# Define a training loop\n", "def report(model, loss):\n", " return f\"W = {model.w.numpy():1.2f}, b = {model.b.numpy():1.2f}, loss={loss:2.5f}\"\n", "\n", "\n", "def training_loop(model, x, y):\n", "\n", " for epoch in epochs:\n", " # Update the model with the single giant batch\n", " train(model, x, y, learning_rate=0.1)\n", "\n", " # Track this before I update\n", " weights.append(model.w.numpy())\n", " biases.append(model.b.numpy())\n", " current_loss = loss(y, model(x))\n", "\n", " print(f\"Epoch {epoch:2d}:\")\n", " print(\" \", report(model, current_loss))" ] }, { "cell_type": "markdown", "metadata": { "id": "8dKKLU4KkQEq" }, "source": [ "进行训练" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.626918Z", "iopub.status.busy": "2022-12-14T20:11:34.626358Z", "iopub.status.idle": "2022-12-14T20:11:34.686235Z", "shell.execute_reply": "2022-12-14T20:11:34.685647Z" }, "id": "iRuNUghs1lHY" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting:\n", " W = 5.00, b = 0.00, loss=10.73057\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0:\n", " W = 4.45, b = 0.41, loss=6.58578\n", "Epoch 1:\n", " W = 4.05, b = 0.74, loss=4.21202\n", "Epoch 2:\n", " W = 3.75, b = 1.00, loss=2.84173\n", "Epoch 3:\n", " W = 3.54, b = 1.21, loss=2.04423\n", "Epoch 4:\n", " W = 3.38, b = 1.38, loss=1.57628\n", "Epoch 5:\n", " W = 3.27, b = 1.51, loss=1.29945\n", "Epoch 6:\n", " W = 3.18, b = 1.62, loss=1.13437\n", "Epoch 7:\n", " W = 3.12, b = 1.71, loss=1.03518\n", "Epoch 8:\n", " W = 3.08, b = 1.78, loss=0.97515\n", "Epoch 9:\n", " W = 3.04, b = 1.83, loss=0.93857\n" ] } ], "source": [ "current_loss = loss(y, model(x))\n", "\n", "print(f\"Starting:\")\n", "print(\" \", report(model, current_loss))\n", "\n", "training_loop(model, x, y)" ] }, { "cell_type": "markdown", "metadata": { "id": "JPJgimg8kSA4" }, "source": [ "下面是权重随时间的演变:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.689560Z", "iopub.status.busy": "2022-12-14T20:11:34.689088Z", "iopub.status.idle": "2022-12-14T20:11:34.823880Z", "shell.execute_reply": "2022-12-14T20:11:34.823247Z" }, "id": "ND1fQw8sbTNr" }, "outputs": [ { "data": { "image/png": "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RoiIiEhQDCNEREQkKIYRIiIiEhTDCBEREQmKYYSIiIgExTBCREREgmIYISIiIkExjBAREZGgGEaIiIhIUAwjREREJCiGESIiIhIUwwgREREJimGEiIiIBMUwQkRERIJiGCEiIiJBmRVGYmNj0atXL8hkMri4uCAmJgapqak1brN27VqIRCKjm7W19SM1TURERC2HWWEkISEBEydOxJEjR7B7926UlJTgySefREFBQY3byeVyZGZmGm7p6emP1DQRERG1HJbmFP/6669Gy2vXroWLiwtOnjyJAQMGmNxOJBLBzc2tbh0SERFRi/ZIc0Zyc3MBAI6OjjXW5efno127dvD29sawYcNw7ty5R3lZIiIiakHqHEa0Wi2mTJmCfv36ITQ01GRdx44d8c0332Dbtm3YsGEDtFotIiIicP36dZPbqFQqKJVKoxsRERG1TCKdTqery4ZvvPEGdu7cicTERHh5edV6u5KSEgQFBWHkyJFYsGBBtTVz587FvHnzqqzPzc2FXC6vS7tERETUyJRKJRQKxUP/ftdpZGTSpEnYvn079u/fb1YQAQArKyt0794dly5dMlkza9Ys5ObmGm7Xrl2rS5tERETUDJg1gVWn0+Gtt97Cli1bEB8fDz8/P7NfUKPRICUlBU8//bTJGqlUCqlUavZzExERUfNjVhiZOHEiNm7ciG3btkEmkyErKwsAoFAoYGNjAwAYPXo0PD09ERsbCwCYP38++vbti4CAANy/fx+LFi1Ceno6xo8fX8+fChERETVHZoWRlStXAgAGDhxotP7bb7/Fq6++CgDIyMiAhUXF3p979+5hwoQJyMrKgoODA3r27ImkpCQEBwc/WudERETUItR5Amtjqu0EGCIiImo6GnQCKxEREVF9YRghIiIiQTGMEBERkaAYRoiIiEhQDCNEREQkKIYRIiIiEhTDCBEREQmKYYSIiIgExTBCREREgmIYISIiIkExjBAREZGgGEaIiIhIUAwjREREJCiGESIiIhIUwwgREREJimGEiIiIBMUwQkRERIJiGCEiIiJBMYwQERGRoBhGiIiISFAMI0RERCQohhEiIiISFMMIERERCYphhIiIiATFMEJERESCYhghIiIiQTGMEBERkaAYRoiIiEhQDCNEREQkKIYRIiIiEhTDCBEREQnKrDASGxuLXr16QSaTwcXFBTExMUhNTX3odps3b0anTp1gbW2Nzp0745dffqlzw0RERNSymBVGEhISMHHiRBw5cgS7d+9GSUkJnnzySRQUFJjcJikpCSNHjsRrr72G06dPIyYmBjExMTh79uwjN09ERETNn0in0+nquvGtW7fg4uKChIQEDBgwoNqal156CQUFBdi+fbthXd++fdGtWzfExcXV6nWUSiUUCgVyc3Mhl8vr2m711KaDFERiwMq6lrUWgJVNHWsLAZj6NogAiW3dakuKAJ3WdB8SuzrWFgM6Tf3UWtkCIpH+fqkK0JbWT62lDWBRlrVL1YC2pJ5qrQELsfm1mhJAozZdK5YCYss61JYCGlUNtRJAbGV+rVYDlBabrrWwAiwldajVAqVF9VRrCVhK9fd1OqCksH5qzfq953tE9bV8jzC7tim8RzSA2v79tnyUF8nNzQUAODo6mqw5fPgwpk2bZrQuOjoaW7duNbmNSqWCSlXxxVMqlY/SZs0+9jD9WOCTwKjNFcuLAky/ibXrD4zdUbG8rDNQeKf6Wo/uwN/jK5a/7APkZlRf69wJmHi0YnlNFHDrQvW1Ch9gakrF8rdDgJunq6+1bQvMuFKxvOEFID2x+lorW+DdzIrln/4GXPyt+loAmJtbcX/L34Hz20zXzr5Z8cb0vynAmY2ma6dfBuyc9Pd3zQaOf226dvLvgEM7/f1984GkFaZr3zwCuATp7x9cDCQsNF07YR/g2VN//+hKYPf7pmvHbAf8HtPfP7kW+OUd07Uv/wR0iNbf//0nYNubpmtHrAVCntPfv/A/YPOrpmuHfQV0H6W/f3kvsPFF07VPfwb0nqC/n54ErHvGdO3g+UC/yfr7mcnAmsdN10bOBKJm6e/fTgW+6mu6NuIt4MkP9fdzrwHLu5iu7TUeGLpYf7/wDrCovenari8Dz63U3y8prPn3PngY8OL6imW+R+jxPUJ/vyW/RwiozhNYtVotpkyZgn79+iE0NNRkXVZWFlxdXY3Wubq6Iisry+Q2sbGxUCgUhpu3t3dd2yQiIqImrs67ad544w3s3LkTiYmJ8PLyMlknkUiwbt06jBw50rDuq6++wrx585CdnV3tNtWNjHh7e3M3jbm1HIItq+UQrNm13E1Tscz3iDrU8j3C7Nqm8B7RABp0N82kSZOwfft2HDhwoMYgAgBubm5VQkd2djbc3NxMbiOVSiGVSuvSmvkq/1IIVmv78Jq61FZ+M6vXWuuH19Sl1lIKoJbfd7NqJQAkwtaKrWr/C29WrWXFm0591lqIa/8zbFatRcPUikQNUws0kVq+RwDge0Sdas34vReQWbtpdDodJk2ahC1btmDfvn3w8/N76Dbh4eHYu3ev0brdu3cjPDzcvE6JiIioRTIrLk2cOBEbN27Etm3bIJPJDPM+FAoFbGz0qXn06NHw9PREbGwsAGDy5MmIjIzE4sWLMXToUGzatAknTpzA6tWr6/lTISIioubIrJGRlStXIjc3FwMHDoS7u7vh9uOPPxpqMjIykJlZMas6IiICGzduxOrVq9G1a1f8/PPP2Lp1a42TXomIiKj1eKTzjDSWBj3PCBERETWI2v795rVpiIiISFAMI0RERCQohhEiIiISFMMIERERCYphhIiIiATFMEJERESCavrniCUiIqK60emA4lyg4BaQnwPkZ5fdz9YvG+7fAkZvBZwCBWmTYYSIiKg50ekAVZ5xqMjPAQpyqr9f04XyKsvLYhghIiJq1VT5lUYuHhzFKPtYkKO/X9MVrasjlQN2zoC9K2Bf9tHOxfi+c8eG+bxqgWGEiIiooagLHtgdUsMoRkmhec8tsQfsXaqGCvvym2tZAHEx76rLAmAYISIiModWqw8Xyuv6XRvVjVyUj2qo8817bivbSgHDper9ygFDYtcwn58AGEaIiIjKlU/4zL0OKG8Yf8y9oQ8gypuARl3757S0rhQqKu8mKd9t4lJxX2rfcJ9bE8YwQkRErUdJUUWoqBwwcisFj1qNZogAmRsgc68IFKZGMaQyQCRq8E+tOWMYISKilkFTCuRlPjCa8cAIR+Gd2j2XjSOg8ATkXvqPCi/j+zJ3QGzVsJ9PK8IwQkRETZ9Op5+DYSpo5N4A8rMAnfbhz2Vlpw8UCk9AXhYuFF4V9+WegMS24T8nMmAYISIi4ZXP06hut0n5x9rM07CwAuQeDwSM8hGOsgBi3Ya7TZoYhhEiImp4qjzg7hXgzmX9x/sZxqMa6rxaPEnZPI3qAkb5LhQ7F8CCVzppbhhGiIiofpQHjsqho/x+Qc7Dt7dxeCBgPLALReYOWEoa/vOgRscwQkREtVclcKQBdy/XLnDYOgGO/kDb9kCbdlVHNVrQeTPIPAwjRERkzFTguHtFfzKvmlQOHI7+Ffcd/ACbNo3SPjU/DCNERK2RKr8scFyuQ+BoCzi2rxo6HP0ZOKhOGEaIiFqqyoHj7hXgzpWKZQYOakIYRoiImjND4Cgf5TA3cPhXHzoYOKgRMYwQETV1Wi1wLw3IPgfcuVhplKOugcOvLHA4NE7/RA/BMEJE1JQU3tWHjpzzQPbZsvt/1Hx5eRvHSqMa7Rk4qNlhGCEiEkKpWj/KkX2uLHSc19/Pu1l9vaU14NwJcO5YaZTDn4GDWgSGESKihqTT6S/ell1ppCP7HHD7T0BbUv02bXwA11DANUR/cwnRhw4x37KpZeJPNhFRfVEXADkX9KEj53zFqEfRverrpfKysBFcFjxCAZcgwFreuH0TCYxhhIjIXFotcP9qxShH+W6Wu1cA6KrWiyyAtoEVIx3lN4U3L9hGBIYRIqKaFd4tG+V4cEJpQfX1di5VQ4dTR8DKunH7JmpGGEaIiABAUwLcrjShtHw3i/JG9fViKeDSqWJuR/muFnuXxu2bqAUwO4wcOHAAixYtwsmTJ5GZmYktW7YgJibGZH18fDyioqKqrM/MzISbm5u5L09E9Gh0OiAvC8g5V2k3yzngVmrNE0pdHhjtcGzPCaVE9cTs36SCggJ07doV48aNw/PPP1/r7VJTUyGXV0zKcnHhfw9E1MC0Wv3hs9ePA1lnK3azFN2tvl4iqxQ4gitNKFU0bt9ErYzZYWTIkCEYMmSI2S/k4uKCNm3amL0dEVGtFSuBGyeBa8eA68f0IaQ4t2qdyAJoG1ApeITqd7O08eGEUiIBNNoYY7du3aBSqRAaGoq5c+eiX79+JmtVKhVUKpVhWalUNkaLRNSc6HT6q81ePwZcOwpcO66f5/Hg0SyWNoBnD8C9W0X4cO4IWNkI0TURVaPBw4i7uzvi4uIQFhYGlUqFr7/+GgMHDsTRo0fRo0ePareJjY3FvHnzGro1ImpOVPnAzVMVweP68ep3t7TxAbx6A95lN9dQQGzV+P0SUa2JdDpdNQfF13JjkeihE1irExkZCR8fH3z33XfVPl7dyIi3tzdyc3ON5p0QUQul0+nP2XH9eMUul+xzgE5rXCeWAh7dK4KHV29A5ipMz0RUhVKphEKheOjfb0Gmgvfu3RuJiYkmH5dKpZBKpY3YEREJSl1YNupxrCKAFN6uWif3Mg4ebp0BS0nj90tE9UqQMJKcnAx3d3chXpqIhKbTAffTy3a1HNMHj6wUQKcxrhNL9PM8vHsDXr30H+UegrRMRA3L7DCSn5+PS5cuGZbT0tKQnJwMR0dH+Pj4YNasWbhx4wbWr18PAFi2bBn8/PwQEhKC4uJifP3119i3bx9+++23+vssiKjpKikCbiZXBI9rx4CCnKp1Mg/Au1fFfA/3roAlR0iJWgOzw8iJEyeMTmI2bdo0AMCYMWOwdu1aZGZmIiMjw/C4Wq3G22+/jRs3bsDW1hZdunTBnj17qj0RGhE1czodkHvdOHhkpVQ9mZiFFeDepSx49AK8+wAKL2F6JiLBPdIE1sZS2wkwRNTISlVA5pmyI1zK5nvkZVats3et2NXi3Uc/6sFDa4lavCY9gZWImqncG2WjHmXzPTLPABq1cY1IrJ9Y6t2nYr4HTyZGRDVgGCGi6mk1QGYykHG0IoAor1ets3UqCx5l8z08ugMS20Zvl4iaL4YRIqqgzAQu7wUu7QEu7weK7xs/LrLQn0Ss/NBa716Agx9HPYjokTCMELVmpSog47A+fFzap7+SbWXWCsAnvGK+h0cPQGovTK9E1GIxjBC1JuXXcykf/biaCJQUVioQAZ49gYAngPZP6O+L+TZBRA2L7zJELZ0qD0g7UDb6sVd/wrHK7N304SPgCcA/CrB1FKZPImq1GEaIWhqtFshOqdj1cu0IoC2teFwsAXz6AgGD9KMfriGc80FEgmIYIWoJCm4Dl/fpRz4u7wUKbhk/7uhfET58+3PeBxE1KQwjRM2RpkR/grHyXS+ZZwBUOn+hlR3gHwm0f1y/+8XRX7BWiYgehmGEqLm4l1428XSvfg6ISmn8uFtn/chHwCD9eT94NVsiaiYYRoiaKnUhkH5IHz4u7QHuXDR+3MaxbORjkP6jzFWYPomIHhHDCFFTodMBty5UhI/0JECjqnhcJNaf66P9E0DA44B7N8BCLFi7RET1hWGESEhF94Ar8WUTT/cByhvGjyu8K0Y//AYANm2E6JKIqEExjBA1Jq0GuHm6YvTjxglAp6143NIaaNdPHz4CngCcOvCwWyJq8RhGiBpaXlZF+LiyXz8aUplTx7Lw8bg+iFjZCNMnEZFAGEaI6pumtGzi6R79rpfss8aPSxX6w27LT7nexluYPomImgiGEaL6oNMB144BKZuB81sfOOmYCPDoXnbK9UGAZxiv90JEVAnfEYnqSqfTj3qk/Ayc/Q+Qm1HxmG1bIPBJffjwjwLs2grXJxFRE8cwQmSuu1eAlH8DZ3/WH4pbTmIPBD0LhL6g3w0jthKuRyKiZoRhhKg28rL0ox9nfwZunKxYL5boR0A6jwA6RHPyKRFRHTCMEJlSdA84/199AEk7CMO1X0QWgF+kPoAEPQNYKwRtk4iouWMYIapMXQj8uVM/D+TibkBbUvGYV299AAmJAexdBGuRiKilYRghKlXrz/+Rshm48AtQUlDxmEsI0Hk4EDoccPAVrEUiopaMYYRaJ60WyEgqOxR3m/GJyNq0Azq/oJ+I6hosXI9ERK0Ewwi1HjodkJlccShu3s2Kx+xcgNDn9bthPHvyFOxERI2IYYRavlt/6iehpvwM3L1csV6qAILLDsX1G8Ar4BIRCYRhhFqm3Ov60Y+UzUDW7xXrLW2Ajk/pA0jgYMBSKlyPREQEgGGEWpKCO/pTsaf8rJ8PUs7CEmj/uD6AdHoakMoEa5GIiKpiGKHmTZWnPwImZbP+iBhtacVj7frpj4IJjuHp2ImImjCGEWp+SlX6c4CkbAb+3AWUFlU85t5VPwIS+jyg8BKuRyIiqjULczc4cOAAnn32WXh4eEAkEmHr1q0P3SY+Ph49evSAVCpFQEAA1q5dW4dWqVXTaoDL+4GtE4FFgcCPo/S7ZEqLgLYBQORMYNIJ4P8OAP3+wSBCRNSMmD0yUlBQgK5du2LcuHF4/vnnH1qflpaGoUOH4vXXX8f333+PvXv3Yvz48XB3d0d0dHSdmqZWQqcDrp/QHwlz9j9AQU7FYzKPskNxXwDcu/FQXCKiZszsMDJkyBAMGTKk1vVxcXHw8/PD4sWLAQBBQUFITEzE0qVLGUaoetnnKw7FvZ9esd7GQT//o/MLgE8EYGH2wB4RETVBDT5n5PDhwxg0aJDRuujoaEyZMsXkNiqVCiqVyrCsVCobqj1qKlT5QPJG4ORaIOdcxXorO6DTUH0A8Y8CLCWCtUhERA2jwcNIVlYWXF1djda5urpCqVSiqKgINjZVL7keGxuLefPmNXRr1BTcuwocWwOc+g5Q5erXWVgBgU/qrwnT4SlAYidoi0RE1LCa5NE0s2bNwrRp0wzLSqUS3t7eAnZE9UqnAzIOA0e+Ai7sAHRa/XrH9kCf14EuI/S7ZIiIqFVo8DDi5uaG7Oxso3XZ2dmQy+XVjooAgFQqhVTKM2O2OKUq/UTUI18ZnxXVPwro+yYQMIjzQIiIWqEGDyPh4eH45ZdfjNbt3r0b4eHhDf3S1FTk5wAnvgGO/6viiBhLa6DrX/UjIS5BwvZHRESCMjuM5Ofn49KlS4bltLQ0JCcnw9HRET4+Ppg1axZu3LiB9evXAwBef/11fPHFF5gxYwbGjRuHffv24aeffsKOHTvq77Ogpinzd+BonP7kZBq1fp3MA+g9Aej5KmDrKGh7RETUNJgdRk6cOIGoqCjDcvncjjFjxmDt2rXIzMxERkaG4XE/Pz/s2LEDU6dOxfLly+Hl5YWvv/6ah/W2VFoNkLoTOLISSE+sWO/VSz8KEjwMEFsJ1x8RETU5Ip1OpxO6iYdRKpVQKBTIzc2FXC4Xuh2qTnEucHoDcHRVxblBRGIgJAbo8wbg3UvQ9oiIqPHV9u93kzyahpqRO5eBY6v1QUSdr19n4wD0HAv0Gg8oPIXtj4iImjyGETKfTgekHdDvivnzVwBlg2vOncoOzX0JkNgK2iIRETUfDCNUeyVF+smoR+KMz5Ia+CTQ9w39Ibq8RgwREZmJYYQeTpkJHP8aOPktUHhHv87KFug2Cujzf4BToLD9ERFRs8YwQqbdOKkfBTn3H0Bbql+n8NEfmtvjbzxLKhER1QuGETKmKQUu/E8/H+Ta0Yr1PuH6XTEdhwJi/tgQEVH94V8V0iu6B5xcp79onfK6fp2FFRA6HOj7OuDRXdj+iIioxWIYae1u/ak/S+qZH4CSQv06Wyeg12tA2DhA5iZsf0RE1OIxjLRGOh1wea9+V8ylPRXrXUP1u2JCXwCsrIXrj4iIWhWGkdZEXQCc2aQfCbn9Z9lKEdDxaX0I8e3PQ3OJiKjRMYy0BrnX9XNBTq4Fiu/r10lk+iNiek8AHP2F7I6IiFo5hpGWSqcDrh8HjnwFnP8voNPo1zv46c+S2u1lwJrX+SEiIuExjLQ0pWrg/DZ9CLl5qmK972NA3zeBDtGAhVi4/oiIiB7AMNJSFNzRnyH1+NdAXqZ+nVgKdBmhv2quW6iw/REREZnAMNLcFdwBDizSB5HSYv06e1eg1wQgbCxg5yRsf0RERA/BMNJcqQuBoyuBxGWASqlf595Nvysm5DnAUiJkd0RERLXGMNLcaDX6E5Tt+wjIu6lf59YZGDyfV80lIqJmiWGkudDpgIu7gT0fADnn9esUPsATc/QnKbOwELY/IiKiOmIYaQ5unAJ2vw9cPahftm4DDHhHPy+EZ0olIqJmjmGkKbubBuxbAJz9t35ZLAX6/B/w2DTAxkHY3oiIiOoJw0hTVH6EzPGvAW0JABHQ9a9A1LtAG2+huyMiIqpXDCNNSXVHyLR/Ahg8Tz9JlYiIqAViGGkKajpCpv3jwvZGRETUwBhGhMQjZIiIiBhGBFPtETLTgV7jeYQMERG1KgwjjY1HyBARERlhGGksPEKGiIioWgwjDY1HyBAREdWIYaShaDVA8kZg/8eVjpDpUnaETJSwvRERETUhDCP1jUfIEBERmYVhpD7dOAns/oBHyBAREZmhTv+mf/nll/D19YW1tTX69OmDY8eOmaxdu3YtRCKR0c3auoX9Yb57Bdg8FljzuD6IiKVAxD+AyclAxCQGESIiohqYPTLy448/Ytq0aYiLi0OfPn2wbNkyREdHIzU1FS4uLtVuI5fLkZqaalgWiUR177gpKbgDHPgUOP4vHiFDRERUR2aHkSVLlmDChAkYO3YsACAuLg47duzAN998g5kzZ1a7jUgkgpub26N12pTwCBkiIqJ6Y1YYUavVOHnyJGbNmmVYZ2FhgUGDBuHw4cMmt8vPz0e7du2g1WrRo0cPfPzxxwgJCTFZr1KpoFKpDMtKpdKcNhsOj5AhIiKqd2bNGbl9+zY0Gg1cXV2N1ru6uiIrK6vabTp27IhvvvkG27Ztw4YNG6DVahEREYHr16+bfJ3Y2FgoFArDzdtb4F0eOh3w5y4grj/w30n6IKLwAZ5fA/w9gUGEiIjoETT40TTh4eEIDw83LEdERCAoKAirVq3CggULqt1m1qxZmDZtmmFZqVQKF0hMHSHTewJgKRWmJyIiohbErDDi5OQEsViM7Oxso/XZ2dm1nhNiZWWF7t2749KlSyZrpFIppFKB/9DfvQLsXQCc+49+WSwF+r4O9J/Ka8gQERHVI7N200gkEvTs2RN79+41rNNqtdi7d6/R6EdNNBoNUlJS4O7ubl6njaXgDrDzn8AXvcuCiAjo+jLw1kn93BAGESIionpl9m6aadOmYcyYMQgLC0Pv3r2xbNkyFBQUGI6uGT16NDw9PREbGwsAmD9/Pvr27YuAgADcv38fixYtQnp6OsaPH1+/n8mj4hEyREREgjA7jLz00ku4desW3n//fWRlZaFbt2749ddfDZNaMzIyYFHplOf37t3DhAkTkJWVBQcHB/Ts2RNJSUkIDg6uv8/iUfAIGSIiIkGJdDqdTugmHkapVEKhUCA3Nxdyubx+nlSnAy7+pp+ceusP/TqFD/DE+0DocF5DhoiI6BHV9u936702jUYN7HgbyL3GI2SIiIgE1HrDiKUUGDQXyPqdR8gQEREJqPWGEQDo/IL+RkRERILhxAgiIiISFMMIERERCYphhIiIiATFMEJERESCYhghIiIiQTGMEBERkaAYRoiIiEhQDCNEREQkKIYRIiIiEhTDCBEREQmKYYSIiIgExTBCREREgmIYISIiIkE1i6v26nQ6AIBSqRS4EyIiIqqt8r/b5X/HTWkWYSQvLw8A4O3tLXAnREREZK68vDwoFAqTj4t0D4srTYBWq8XNmzchk8kgEonq7XmVSiW8vb1x7do1yOXyenteqht+P5oefk+aFn4/mhZ+Px5Op9MhLy8PHh4esLAwPTOkWYyMWFhYwMvLq8GeXy6X8wepCeH3o+nh96Rp4fejaeH3o2Y1jYiU4wRWIiIiEhTDCBEREQmqVYcRqVSKDz74AFKpVOhWCPx+NEX8njQt/H40Lfx+1J9mMYGViIiIWq5WPTJCREREwmMYISIiIkExjBAREZGgGEaIiIhIUK06jHz55Zfw9fWFtbU1+vTpg2PHjgndUqsUGxuLXr16QSaTwcXFBTExMUhNTRW6LSqzcOFCiEQiTJkyRehWWq0bN27glVdeQdu2bWFjY4POnTvjxIkTQrfVamk0GsyZMwd+fn6wsbFB+/btsWDBgodef4VMa7Vh5Mcff8S0adPwwQcf4NSpU+jatSuio6ORk5MjdGutTkJCAiZOnIgjR45g9+7dKCkpwZNPPomCggKhW2v1jh8/jlWrVqFLly5Ct9Jq3bt3D/369YOVlRV27tyJ8+fPY/HixXBwcBC6tVbrk08+wcqVK/HFF1/gjz/+wCeffIJPP/0UK1asELq1ZqvVHtrbp08f9OrVC1988QUA/fVvvL298dZbb2HmzJkCd9e63bp1Cy4uLkhISMCAAQOEbqfVys/PR48ePfDVV1/hww8/RLdu3bBs2TKh22p1Zs6ciUOHDuHgwYNCt0JlnnnmGbi6uuJf//qXYd3w4cNhY2ODDRs2CNhZ89UqR0bUajVOnjyJQYMGGdZZWFhg0KBBOHz4sICdEQDk5uYCABwdHQXupHWbOHEihg4davR7Qo3vv//9L8LCwjBixAi4uLige/fuWLNmjdBttWoRERHYu3cv/vzzTwDAmTNnkJiYiCFDhgjcWfPVLC6UV99u374NjUYDV1dXo/Wurq64cOGCQF0RoB+hmjJlCvr164fQ0FCh22m1Nm3ahFOnTuH48eNCt9LqXblyBStXrsS0adMwe/ZsHD9+HP/4xz8gkUgwZswYodtrlWbOnAmlUolOnTpBLBZDo9Hgo48+wqhRo4RurdlqlWGEmq6JEyfi7NmzSExMFLqVVuvatWuYPHkydu/eDWtra6HbafW0Wi3CwsLw8ccfAwC6d++Os2fPIi4ujmFEID/99BO+//57bNy4ESEhIUhOTsaUKVPg4eHB70kdtcow4uTkBLFYjOzsbKP12dnZcHNzE6grmjRpErZv344DBw7Ay8tL6HZarZMnTyInJwc9evQwrNNoNDhw4AC++OILqFQqiMViATtsXdzd3REcHGy0LigoCP/+978F6oimT5+OmTNn4q9//SsAoHPnzkhPT0dsbCzDSB21yjkjEokEPXv2xN69ew3rtFot9u7di/DwcAE7a510Oh0mTZqELVu2YN++ffDz8xO6pVbtiSeeQEpKCpKTkw23sLAwjBo1CsnJyQwijaxfv35VDnX/888/0a5dO4E6osLCQlhYGP/5FIvF0Gq1AnXU/LXKkREAmDZtGsaMGYOwsDD07t0by5YtQ0FBAcaOHSt0a63OxIkTsXHjRmzbtg0ymQxZWVkAAIVCARsbG4G7a31kMlmV+Tp2dnZo27Yt5/EIYOrUqYiIiMDHH3+MF198EceOHcPq1auxevVqoVtrtZ599ll89NFH8PHxQUhICE6fPo0lS5Zg3LhxQrfWfOlasRUrVuh8fHx0EolE17t3b92RI0eEbqlVAlDt7dtvvxW6NSoTGRmpmzx5stBttFr/+9//dKGhoTqpVKrr1KmTbvXq1UK31KoplUrd5MmTdT4+Pjpra2udv7+/7t1339WpVCqhW2u2Wu15RoiIiKhpaJVzRoiIiKjpYBghIiIiQTGMEBERkaAYRoiIiEhQDCNEREQkKIYRIiIiEhTDCBEREQmKYYSIiIgExTBCREREgmIYISIiIkExjBAREZGgGEaIiIhIUP8PIMQZZEBMqO4AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(epochs, weights, label='Weights', color=colors[0])\n", "plt.plot(epochs, [TRUE_W] * len(epochs), '--',\n", " label = \"True weight\", color=colors[0])\n", "\n", "plt.plot(epochs, biases, label='bias', color=colors[1])\n", "plt.plot(epochs, [TRUE_B] * len(epochs), \"--\",\n", " label=\"True bias\", color=colors[1])\n", "\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "zhlwj1ojkcUP" }, "source": [ "呈现训练的模型的性能" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.827343Z", "iopub.status.busy": "2022-12-14T20:11:34.826734Z", "iopub.status.idle": "2022-12-14T20:11:34.973307Z", "shell.execute_reply": "2022-12-14T20:11:34.972678Z" }, "id": "tpTEjWWex568" }, "outputs": [ { "data": { "image/png": "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P3CMe3ToZFUhhBBClG3ltkdECCGEEPYngYgQQggh7EYCESGEEELYjQQiQgghhLCbchGInD9/nmHDhhESEoK7uzt16tRhxowZpKenF3hcamoqo0ePxt/fHy8vLx599FGuXbtmo1abLyIigo4dO+Lh4YGfn1+Rjhk6dCiKomT76dWrl3UbWkzFuT9VVZk+fTpBQUG4u7vTo0cPTp8+bd2GFtOtW7d4+umn8fHxwc/Pj2HDhnHnzp0Cj+natWuu399LL71koxYX7qOPPqJWrVq4ubnRvn179u7dW+D+P/74Iw0bNsTNzY1mzZrxyy+/2KilxWPO/a1cuTLX78rNzc2GrTXPzp07eeSRR6hatSqKorBu3bpCj9mxYwetW7fG1dWVunXrsnLlSqu3syTMvccdO3bk+h0qikJsbKxtGmym+fPn07ZtW7y9valcuTL9+/fn1KlThR5n67/DchGInDx5EqPRyMcff8zx48d59913Wb58OZMnTy7wuPHjx/PTTz/x448/8scff3D16lUGDhxoo1abLz09nccff5yRI0eadVyvXr2IiYnJ+vnuu++s1MKSKc79LVq0iCVLlrB8+XKioqLw9PSkZ8+epKamWrGlxfP0009z/PhxtmzZwsaNG9m5cycjRowo9Ljhw4dn+/0tWrTIBq0t3KpVq3j11VeZMWMGf//9Ny1atKBnz55cv349z/13797NU089xbBhwzh48CD9+/enf//+HDt2zMYtLxpz7w9M1Svv/V1duHDBhi02T1JSEi1atOCjjz4q0v7R0dH07t2bbt26cejQIcaNG8d//vMffvvtNyu3tPjMvcdMp06dyvZ7rFy5spVaWDJ//PEHo0eP5q+//mLLli1kZGTw4IMPkpSUlO8xdvk7VMupRYsWqSEhIfm+Hx8frzo7O6s//vhj1msnTpxQAXXPnj22aGKxrVixQvX19S3SvkOGDFH79etn1fZYWlHvz2g0qoGBgepbb72V9Vp8fLzq6uqqfvfdd1Zsofn++ecfFVD37duX9dqmTZtURVHUK1eu5Htcly5d1LFjx9qgheZr166dOnr06Kxtg8GgVq1aVZ0/f36e+z/xxBNq7969s73Wvn179cUXX7RqO4vL3Psz5+/S0QDq2rVrC9znzTffVJs0aZLttUGDBqk9e/a0Yssspyj3+Pvvv6uAevv2bZu0ydKuX7+u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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Current loss: 0.938567\n" ] } ], "source": [ "plt.plot(x, y, '.', label=\"Data\")\n", "plt.plot(x, f(x), label=\"Ground truth\")\n", "plt.plot(x, model(x), label=\"Predictions\")\n", "plt.legend()\n", "plt.show()\n", "\n", "print(\"Current loss: %1.6f\" % loss(model(x), y).numpy())" ] }, { "cell_type": "markdown", "metadata": { "id": "DODMMmfLIiOC" }, "source": [ "## 使用Keras完成相同的解决方案\n", "\n", "将上面的代码与Keras中的等效代码进行对比很有用。\n", "\n", "如果您将`tf.keras.Model`子类化,则定义模型与其看起来完全相同。请记住,Keras模型最终从模块继承。" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:34.976908Z", "iopub.status.busy": "2022-12-14T20:11:34.976404Z", "iopub.status.idle": "2022-12-14T20:11:35.046344Z", "shell.execute_reply": "2022-12-14T20:11:35.045760Z" }, "id": "Z86hCI0x1YX3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0:\n", " W = 4.45, b = 0.41, loss=6.58578\n", "Epoch 1:\n", " W = 4.05, b = 0.74, loss=4.21202\n", "Epoch 2:\n", " W = 3.75, b = 1.00, loss=2.84173\n", "Epoch 3:\n", " W = 3.54, b = 1.21, loss=2.04423\n", "Epoch 4:\n", " W = 3.38, b = 1.38, loss=1.57628\n", "Epoch 5:\n", " W = 3.27, b = 1.51, loss=1.29945\n", "Epoch 6:\n", " W = 3.18, b = 1.62, loss=1.13437\n", "Epoch 7:\n", " W = 3.12, b = 1.71, loss=1.03518\n", "Epoch 8:\n", " W = 3.08, b = 1.78, loss=0.97515\n", "Epoch 9:\n", " W = 3.04, b = 1.83, loss=0.93857\n" ] } ], "source": [ "class MyModelKeras(tf.keras.Model):\n", " def __init__(self, **kwargs):\n", " super().__init__(**kwargs)\n", " # Initialize the weights to `5.0` and the bias to `0.0`\n", " # In practice, these should be randomly initialized\n", " self.w = tf.Variable(5.0)\n", " self.b = tf.Variable(0.0)\n", "\n", " def call(self, x):\n", " return self.w * x + self.b\n", "\n", "keras_model = MyModelKeras()\n", "\n", "# Reuse the training loop with a Keras model\n", "training_loop(keras_model, x, y)\n", "\n", "# You can also save a checkpoint using Keras's built-in support\n", "keras_model.save_weights(\"my_checkpoint\")" ] }, { "cell_type": "markdown", "metadata": { "id": "6kw5P4jt2Az8" }, "source": [ "您可以使用Keras的内置功能作为捷径,而不必在每次创建模型时都编写新的训练循环。当您不想编写或调试Python训练循环时,这很有用。\n", "\n", "如果您使用Keras,您将会需要使用 `model.compile()` 去设置参数, 使用`model.fit()` 进行训练。借助Keras实现L2损失和梯度下降需要的代码量更少,就像一个捷径。Keras损失和优化器也可以在这些便利功能之外使用,而前面的示例也可以使用它们。" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:35.049759Z", "iopub.status.busy": "2022-12-14T20:11:35.049288Z", "iopub.status.idle": "2022-12-14T20:11:35.063421Z", "shell.execute_reply": "2022-12-14T20:11:35.062863Z" }, "id": "-nbLLfPE2pEl" }, "outputs": [], "source": [ "keras_model = MyModelKeras()\n", "\n", "# compile sets the training parameters\n", "keras_model.compile(\n", " # By default, fit() uses tf.function(). You can\n", " # turn that off for debugging, but it is on now.\n", " run_eagerly=False,\n", "\n", " # Using a built-in optimizer, configuring as an object\n", " optimizer=tf.keras.optimizers.SGD(learning_rate=0.1),\n", "\n", " # Keras comes with built-in MSE error\n", " # However, you could use the loss function\n", " # defined above\n", " loss=tf.keras.losses.mean_squared_error,\n", ")" ] }, { "cell_type": "markdown", "metadata": { "id": "lrlHODiZccu2" }, "source": [ "Keras`fit`期望批处理数据或完整的数据集作为NumPy数组。 NumPy数组分为多个批次,默认批次大小为32。\n", "\n", "这一案例中,为了匹配手写训练循环,您应该以大小为1000的单批次传递x。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:11:35.066821Z", "iopub.status.busy": "2022-12-14T20:11:35.066320Z", "iopub.status.idle": "2022-12-14T20:11:35.656569Z", "shell.execute_reply": "2022-12-14T20:11:35.655850Z" }, "id": "zfAYqtu136PO" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "201\n", "Epoch 1/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 10.7306" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 469ms/step - loss: 10.7306\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 6.5858" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 5ms/step - loss: 6.5858\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 4.2120" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 4.2120\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 2.8417" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 2.8417\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 2.0442" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 2.0442\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.5763" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 1.5763\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.2994" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 1.2994\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.1344" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 1.1344\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.0352" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 1.0352\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 0.9751" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\r", "1/1 [==============================] - 0s 4ms/step - loss: 0.9751\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(x.shape[0])\n", "keras_model.fit(x, y, epochs=10, batch_size=1000)" ] }, { "cell_type": "markdown", "metadata": { "id": "8zKZIO9P5s1G" }, "source": [ "请注意,Keras会在训练后而不是之前打印出损失,因此第一次损失会显得较低。否则,这表明本质上相同的训练效果。" ] }, { "cell_type": "markdown", "metadata": { "id": "vPnIVuaSJwWz" }, "source": [ "## 下一步\n", "\n", "在这篇引导中,您已经看到怎样使用tensors, variables, modules, 和gradient tape去构建并训练模型,也进一步了解到这些是如何与Keras对应的。\n", "\n", "但是,这是一个极其简单的问题。有关更实用的介绍,请参阅[自定义训练演示](../tutorials/customization/custom_training_walkthrough.ipynb)。\n", "\n", "有关使用内置 Keras 训练循环的更多信息,请参阅[本指南](https://tensorflow.google.cn/guide/keras/train_and_evaluate)。有关训练循环和 Keras 的更多信息,请参阅[本指南](https://tensorflow.google.cn/guide/keras/writing_a_training_loop_from_scratch)。有关编写自定义分布式训练循环的信息,请参阅[本指南](distributed_training.ipynb#using_tfdistributestrategy_with_basic_training_loops_loops)。" ] } ], "metadata": { "colab": { "collapsed_sections": [ "5rmpybwysXGV", "iKD__8kFCKNt" ], "name": "basic_training_loops.ipynb", "toc_visible": true }, "kernelspec": { "display_name": "Python 3", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.16" } }, "nbformat": 4, "nbformat_minor": 0 }