{ "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:41:01.575195Z", "iopub.status.busy": "2022-12-14T20:41:01.574527Z", "iopub.status.idle": "2022-12-14T20:41:01.578234Z", "shell.execute_reply": "2022-12-14T20:41:01.577671Z" }, "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": [ "以前のガイドでは、[テンソル](./tensor.ipynb)、[変数](./variable.ipynb)、[勾配テープ](autodiff.ipynb)、[モジュール](./intro_to_modules.ipynb)について学習しました。このガイドでは、これらをすべて組み合わせてモデルをトレーニングします。\n", "\n", "TensorFlow には、[tf.Keras API](https://www.tensorflow.org/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:41:01.581996Z", "iopub.status.busy": "2022-12-14T20:41:01.581454Z", "iopub.status.idle": "2022-12-14T20:41:03.812413Z", "shell.execute_reply": "2022-12-14T20:41:03.811746Z" }, "id": "NiolgWMPgpwI" }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2022-12-14 20:41:02.508484: 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:41:02.508574: 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:41:02.508583: 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", "- その損失の勾配を計算し、*オプティマイザ*を使用してデータに適合するように変数を調整します。\n", "- 結果を評価する。\n", "\n", "説明のため、このガイドでは $W$(重み)と $b$(バイアス)の 2 つの変数を持つ単純な線形モデルである $f(x) = x * 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:41:03.816900Z", "iopub.status.busy": "2022-12-14T20:41:03.816128Z", "iopub.status.idle": "2022-12-14T20:41:07.224154Z", "shell.execute_reply": "2022-12-14T20:41:07.223479Z" }, "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:41:07.227660Z", "iopub.status.busy": "2022-12-14T20:41:07.227429Z", "iopub.status.idle": "2022-12-14T20:41:07.359983Z", "shell.execute_reply": "2022-12-14T20:41:07.359406Z" }, "id": "IlFd_HVBFGIF" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA9VElEQVR4nO3de3RU9bn/8c8EJYCSASTcfgQIaLX1AhgQAxZJ5QgWW6kuRWV5kFq8QdXSU008VWqPGiosdUmtt1a061SlLkVP9aiLQlEjiJFLBRUqCAYhoKjMIMSgZP/+4MyYTOay98y+zrxfa2WtMtkz+7tnGvcz3+/zPN+QYRiGAAAAPFDk9QAAAEDhIhABAACeIRABAACeIRABAACeIRABAACeIRABAACeIRABAACeIRABAACeOcLrAaTT0tKinTt3qmvXrgqFQl4PBwAAmGAYhvbt26d+/fqpqCj9nIevA5GdO3eqrKzM62EAAIAsbN++Xf379097TNaByGuvvaZ58+Zp9erVamxs1OLFizV58uT47w3D0Jw5c/TII49o7969GjNmjB544AEdd9xxps/RtWtXSYcvpKSkJNuhAgAAF0WjUZWVlcXv4+lkHYjs379fQ4cO1U9/+lOdf/757X5/11136b777tPjjz+u8vJy3XLLLZowYYLee+89derUydQ5YssxJSUlBCIAAASMmbSKrAORc845R+ecc07S3xmGoXvvvVe//vWvdd5550mS/vznP6t379567rnndPHFF2d7WgAAkEccqZrZunWrdu3apfHjx8cfC4fDGjVqlFauXJnyec3NzYpGo21+AABA/nIkENm1a5ckqXfv3m0e7927d/x3ydTW1iocDsd/SFQFACC/+aqPSE1NjSKRSPxn+/btXg8JAAA4yJFApE+fPpKk3bt3t3l89+7d8d8lU1xcHE9MJUEVAID850ggUl5erj59+mjp0qXxx6LRqFatWqXKykonTgkAAAIo66qZL7/8Ups3b47/e+vWrVq3bp169OihAQMG6IYbbtDtt9+u4447Ll6+269fvza9RgAAQGHLOhB5++23VVVVFf/37NmzJUnTpk3TY489phtvvFH79+/XlVdeqb179+qMM87Qyy+/bLqHCAAAyH8hwzAMrweRSjQaVTgcViQSIV8EAICAsHL/9lXVDAAAKCwEIgAA5InGSJNWbNmj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IAIAADxDIAIAADxDIAIAADzjWIt3O8SavkajUY9HAgAAzIrdt800b/d1ILJv3z5JUllZmccjAQAAVu3bt0/hcDjtMb7ea6alpUU7d+5U165dFQqFbH3taDSqsrIybd++PS/3seH6gi/frzHfr0/K/2vk+oLPqWs0DEP79u1Tv379VFSUPgvE1zMiRUVF6t+/v6PnKCkpydv/g0lcXz7I92vM9+uT8v8aub7gc+IaM82ExJCsCgAAPEMgAgAAPFOwgUhxcbHmzJmj4uJir4fiCK4v+PL9GvP9+qT8v0auL/j8cI2+TlYFAAD5rWBnRAAAgPcIRAAAgGcIRAAAgGcIRAAAgGcIRAAAgGcKIhDZtm2brrjiCpWXl6tz584aMmSI5syZo4MHD6Z93ldffaWZM2fqmGOO0dFHH60LLrhAu3fvdmnU1t1xxx0aPXq0unTpom7dupl6zuWXX65QKNTmZ+LEic4ONEvZXJ9hGLr11lvVt29fde7cWePHj9cHH3zg7EBz8Pnnn2vq1KkqKSlRt27ddMUVV+jLL79M+5xx48a1+wyvvvpql0ac3v33369BgwapU6dOGjVqlN566620xz/99NM64YQT1KlTJ5188sn63//9X5dGmj0r1/jYY4+1+6w6derk4mitee211/SjH/1I/fr1UygU0nPPPZfxOcuXL9epp56q4uJiHXvssXrsscccH2e2rF7f8uXL231+oVBIu3btcmfAFtXW1mrkyJHq2rWrevXqpcmTJ2vTpk0Zn+f232FBBCIbN25US0uLHnroIb377ru655579OCDD+rmm29O+7xf/OIX+tvf/qann35ar776qnbu3Knzzz/fpVFbd/DgQV144YW65pprLD1v4sSJamxsjP88+eSTDo0wN9lc31133aX77rtPDz74oFatWqWjjjpKEyZM0FdffeXgSLM3depUvfvuu1qyZIleeOEFvfbaa7ryyiszPm/GjBltPsO77rrLhdGmt2jRIs2ePVtz5szRmjVrNHToUE2YMEGffPJJ0uNXrFihSy65RFdccYXWrl2ryZMna/LkydqwYYPLIzfP6jVKh1tpt/6sPvroIxdHbM3+/fs1dOhQ3X///aaO37p1qyZNmqSqqiqtW7dON9xwg372s5/plVdecXik2bF6fTGbNm1q8xn26tXLoRHm5tVXX9XMmTP15ptvasmSJfr666919tlna//+/Smf48nfoVGg7rrrLqO8vDzl7/fu3WsceeSRxtNPPx1/7P333zckGStXrnRjiFlbuHChEQ6HTR07bdo047zzznN0PHYze30tLS1Gnz59jHnz5sUf27t3r1FcXGw8+eSTDo4wO++9954hyaivr48/9tJLLxmhUMjYsWNHyuedeeaZxvXXX+/CCK057bTTjJkzZ8b/fejQIaNfv35GbW1t0uMvuugiY9KkSW0eGzVqlHHVVVc5Os5cWL1GK3+bfiPJWLx4cdpjbrzxRuPEE09s89iUKVOMCRMmODgye5i5vn/84x+GJOOLL75wZUx2++STTwxJxquvvpryGC/+DgtiRiSZSCSiHj16pPz96tWr9fXXX2v8+PHxx0444QQNGDBAK1eudGOIrlm+fLl69eql448/Xtdcc40+++wzr4dki61bt2rXrl1tPsNwOKxRo0b58jNcuXKlunXrphEjRsQfGz9+vIqKirRq1aq0z/3LX/6inj176qSTTlJNTY0OHDjg9HDTOnjwoFavXt3mvS8qKtL48eNTvvcrV65sc7wkTZgwwZeflZTdNUrSl19+qYEDB6qsrEznnXee3n33XTeG64qgfYbZGjZsmPr27at/+7d/0xtvvOH1cEyLRCKSlPbe58Vn6Ovdd52yefNmLViwQPPnz095zK5du9SxY8d2uQi9e/f27XpgNiZOnKjzzz9f5eXl2rJli26++Wadc845WrlypTp06OD18HIS+5x69+7d5nG/foa7du1qN8V7xBFHqEePHmnHe+mll2rgwIHq16+f3nnnHd10003atGmTnn32WaeHnNKePXt06NChpO/9xo0bkz5n165dgfmspOyu8fjjj9ejjz6qU045RZFIRPPnz9fo0aP17rvvOr7TuBtSfYbRaFRNTU3q3LmzRyOzR9++ffXggw9qxIgRam5u1h//+EeNGzdOq1at0qmnnur18NJqaWnRDTfcoDFjxuikk05KeZwXf4eBnhGprq5OmjjU+ifxPwg7duzQxIkTdeGFF2rGjBkejdy8bK7Riosvvlg//vGPdfLJJ2vy5Ml64YUXVF9fr+XLl9t3EWk4fX1+4PQ1XnnllZowYYJOPvlkTZ06VX/+85+1ePFibdmyxcargB0qKyv17//+7xo2bJjOPPNMPfvssyotLdVDDz3k9dBgwvHHH6+rrrpKFRUVGj16tB599FGNHj1a99xzj9dDy2jmzJnasGGDnnrqKa+H0k6gZ0R++ctf6vLLL097zODBg+P/e+fOnaqqqtLo0aP18MMPp31enz59dPDgQe3du7fNrMju3bvVp0+fXIZtidVrzNXgwYPVs2dPbd68WWeddZZtr5uKk9cX+5x2796tvn37xh/fvXu3hg0bltVrZsPsNfbp06ddkuM333yjzz//3NL/50aNGiXp8MzfkCFDLI/XDj179lSHDh3aVZml+/vp06ePpeO9ls01JjryyCM1fPhwbd682Ykhui7VZ1hSUhL42ZBUTjvtNNXV1Xk9jLRmzZoVT37PNPPmxd9hoAOR0tJSlZaWmjp2x44dqqqqUkVFhRYuXKiiovSTQRUVFTryyCO1dOlSXXDBBZIOZ0o3NDSosrIy57GbZeUa7fDxxx/rs88+a3PjdpKT11deXq4+ffpo6dKl8cAjGo1q1apVliuLcmH2GisrK7V3716tXr1aFRUVkqRly5appaUlHlyYsW7dOkly7TNMpmPHjqqoqNDSpUs1efJkSYenhpcuXapZs2YlfU5lZaWWLl2qG264If7YkiVLXP17syKba0x06NAhrV+/Xj/84Q8dHKl7Kisr25V6+vkztMO6des8/VtLxzAM/fznP9fixYu1fPlylZeXZ3yOJ3+HjqXB+sjHH39sHHvsscZZZ51lfPzxx0ZjY2P8p/Uxxx9/vLFq1ar4Y1dffbUxYMAAY9myZcbbb79tVFZWGpWVlV5cgikfffSRsXbtWuO2224zjj76aGPt2rXG2rVrjX379sWPOf74441nn33WMAzD2Ldvn/Ef//EfxsqVK42tW7caf//7341TTz3VOO6444yvvvrKq8tIyer1GYZhzJ071+jWrZvx/PPPG++8845x3nnnGeXl5UZTU5MXl5DRxIkTjeHDhxurVq0y6urqjOOOO8645JJL4r9P/P/p5s2bjd/+9rfG22+/bWzdutV4/vnnjcGDBxtjx4716hLinnrqKaO4uNh47LHHjPfee8+48sorjW7duhm7du0yDMMwLrvsMqO6ujp+/BtvvGEcccQRxvz5843333/fmDNnjnHkkUca69ev9+oSMrJ6jbfddpvxyiuvGFu2bDFWr15tXHzxxUanTp2Md99916tLSGvfvn3xvzNJxt13322sXbvW+OijjwzDMIzq6mrjsssuix//4YcfGl26dDF+9atfGe+//75x//33Gx06dDBefvllry4hLavXd8899xjPPfec8cEHHxjr1683rr/+eqOoqMj4+9//7tUlpHXNNdcY4XDYWL58eZv73oEDB+LH+OHvsCACkYULFxqSkv7EbN261ZBk/OMf/4g/1tTUZFx77bVG9+7djS5duhg/+clP2gQvfjNt2rSk19j6miQZCxcuNAzDMA4cOGCcffbZRmlpqXHkkUcaAwcONGbMmBH/j6jfWL0+wzhcwnvLLbcYvXv3NoqLi42zzjrL2LRpk/uDN+mzzz4zLrnkEuPoo482SkpKjOnTp7cJtBL/f9rQ0GCMHTvW6NGjh1FcXGwce+yxxq9+9SsjEol4dAVtLViwwBgwYIDRsWNH47TTTjPefPPN+O/OPPNMY9q0aW2O/+tf/2p85zvfMTp27GiceOKJxosvvujyiK2zco033HBD/NjevXsbP/zhD401a9Z4MGpzYuWqiT+xa5o2bZpx5plntnvOsGHDjI4dOxqDBw9u8/foN1av73e/+50xZMgQo1OnTkaPHj2McePGGcuWLfNm8Cakuu+1/kz88HcY+r/BAgAAuC7QVTMAACDYCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBnCEQAAIBn/j8jdz+UvYDFJAAAAABJRU5ErkJggg==\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": [ "テンソルは一般的に*バッチ*か、入力と出力のグループにまとめられます。バッチにはいくつかのトレーニング上のメリットがあり、アクセラレーターやベクトル化計算でうまく機能します。このデータセットの小ささを考慮すると、データセット全体を単一のバッチとして扱うことができます。" ] }, { "cell_type": "markdown", "metadata": { "id": "gFzH64Jn9PIm" }, "source": [ "## モデルを定義する\n", "\n", "モデル内のすべての重みを表現するには `tf.Variable` を使用します。`tf.Variable` は値を格納し、必要に応じてこれをテンソル形式で提供します。詳細については、[変数ガイド](./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:41:07.363917Z", "iopub.status.busy": "2022-12-14T20:41:07.363437Z", "iopub.status.idle": "2022-12-14T20:41:07.376774Z", "shell.execute_reply": "2022-12-14T20:41:07.376151Z" }, "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://www.tensorflow.org/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:41:07.380167Z", "iopub.status.busy": "2022-12-14T20:41:07.379658Z", "iopub.status.idle": "2022-12-14T20:41:07.382918Z", "shell.execute_reply": "2022-12-14T20:41:07.382297Z" }, "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:41:07.386270Z", "iopub.status.busy": "2022-12-14T20:41:07.385684Z", "iopub.status.idle": "2022-12-14T20:41:07.540418Z", "shell.execute_reply": "2022-12-14T20:41:07.539795Z" }, "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.299762\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", "トレーニングループは、次の 3 つを順番に繰り返し実行するタスクで構成されます。\n", "\n", "- モデル経由で入力のバッチを送信して出力を生成する\n", "- 出力を出力(またはラベル)と比較して損失を計算する\n", "- 勾配テープを使用して勾配を検出する\n", "- これらの勾配を使用して変数を最適化する\n", "\n", "この例では、[最急降下法](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:41:07.543992Z", "iopub.status.busy": "2022-12-14T20:41:07.543534Z", "iopub.status.idle": "2022-12-14T20:41:07.547673Z", "shell.execute_reply": "2022-12-14T20:41:07.547100Z" }, "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:41:07.550838Z", "iopub.status.busy": "2022-12-14T20:41:07.550409Z", "iopub.status.idle": "2022-12-14T20:41:07.555978Z", "shell.execute_reply": "2022-12-14T20:41:07.555394Z" }, "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": [ "Do the training。" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:41:07.558953Z", "iopub.status.busy": "2022-12-14T20:41:07.558544Z", "iopub.status.idle": "2022-12-14T20:41:07.618565Z", "shell.execute_reply": "2022-12-14T20:41:07.617911Z" }, "id": "iRuNUghs1lHY" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Starting:\n", " W = 5.00, b = 0.00, loss=10.29976\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0:\n", " W = 4.48, b = 0.40, loss=6.46287\n", "Epoch 1:\n", " W = 4.09, b = 0.72, loss=4.26008\n", "Epoch 2:\n", " W = 3.81, b = 0.98, loss=2.98527\n", "Epoch 3:\n", " W = 3.61, b = 1.19, loss=2.24146\n", "Epoch 4:\n", " W = 3.46, b = 1.35, loss=1.80388\n", "Epoch 5:\n", " W = 3.35, b = 1.48, loss=1.54438\n", "Epoch 6:\n", " W = 3.27, b = 1.59, loss=1.38926\n", "Epoch 7:\n", " W = 3.21, b = 1.67, loss=1.29584\n", "Epoch 8:\n", " W = 3.17, b = 1.74, loss=1.23917\n", "Epoch 9:\n", " W = 3.14, b = 1.79, loss=1.20457\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:41:07.622018Z", "iopub.status.busy": "2022-12-14T20:41:07.621514Z", "iopub.status.idle": "2022-12-14T20:41:07.752791Z", "shell.execute_reply": "2022-12-14T20:41:07.752163Z" }, "id": "ND1fQw8sbTNr" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYWElEQVR4nO3dd3hUVf7H8fekTfqQQBoQIDSpoXelKIgsumJfy2LF1UV/FBXBFRVYjQ37KqCriMpiWYUVRASEIE0ICNKVGsAUSkjPJJmZ3x+TTAgkkIQkN+Xzep55MvfOuTPfJGTmw7nnnmNyOBwORERERAziZnQBIiIiUr8pjIiIiIihFEZERETEUAojIiIiYiiFERERETGUwoiIiIgYSmFEREREDKUwIiIiIobyMLqAsrDb7fzxxx8EBARgMpmMLkdERETKwOFwkJ6eTuPGjXFzK73/o1aEkT/++IPIyEijyxAREZEKOHr0KE2bNi318VoRRgICAgDnNxMYGGhwNSIiIlIWaWlpREZGuj7HS1MrwkjhqZnAwECFERERkVrmYkMsNIBVREREDKUwIiIiIoZSGBERERFD1YoxIyIiUjM5HA7y8/Ox2WxGlyIGcHd3x8PD45Kn3VAYERGRCsnNzSUhIYGsrCyjSxED+fr6EhERgZeXV4WfQ2FERETKzW63c+jQIdzd3WncuDFeXl6alLKecTgc5ObmcuLECQ4dOkSbNm0uOLHZhSiMiIhIueXm5mK324mMjMTX19focsQgPj4+eHp6cuTIEXJzc/H29q7Q81zSANYXX3wRk8nE+PHjS20zd+5cTCZTsVtFixURkZqlov8TlrqjMv4NVLhnZPPmzcyePZvo6OiLtg0MDGTfvn2ubXXliYiISKEKxZmMjAzuvPNO3n//fYKCgi7a3mQyER4e7rqFhYVV5GVFRERqnNWrV2MymThz5kyZj3nuuefo2rVrldVU21QojIwdO5aRI0cydOjQMrXPyMigefPmREZGcv3117Nr164LtrdaraSlpRW7iYiIXKpZs2YREBBAfn6+a19GRgaenp4MHjy4WNvCkHHgwIELPmf//v1JSEjAYrFUaq2DBw++4DCIuqTcYWTBggVs3bqVmJiYMrW/7LLL+PDDD1m0aBGffvopdrud/v37c+zYsVKPiYmJwWKxuG5asVdERCrDkCFDyMjIIC4uzrXvp59+Ijw8nJ9//pmcnBzX/lWrVtGsWTNatWp1wef08vIiPDxcQxAuQbnCyNGjRxk3bhyfffZZmQeh9uvXj9GjR9O1a1cGDRrE119/TUhICLNnzy71mClTppCamuq6HT16tDxlltmibcd58qtfOZOVWyXPLyIiNctll11GREQEq1evdu1bvXo1119/PVFRUWzcuLHY/iFDhmC324mJiSEqKgofHx+6dOnCV199Vazduadp3n//fdeVRjfccAOvvfYaDRo0OK+eTz75hBYtWmCxWPjLX/5Ceno6APfccw+xsbG8+eabros/Dh8+TEpKCnfeeSchISH4+PjQpk0bPvroo0r/OVW3cg1g3bJlC8nJyXTv3t21z2azsWbNGt555x2sVivu7u4XfA5PT0+6devG/v37S21jNpsxm83lKa3ccvJszFi8h5MZVlbuTWLqtR34c5fGSrYiIhXkcDjIzqv+mVh9PN3L9d49ZMgQVq1axeTJkwFnD8ikSZOw2WysWrWKwYMHk52dzc8//8x9991HTEwMn376KbNmzaJNmzasWbOGu+66i5CQEAYNGnTe869bt46HHnqIl156iT//+c+sWLGCqVOnntfuwIEDLFy4kMWLF5OSksKtt97Kiy++yPPPP8+bb77Jb7/9RqdOnZg+fToAISEhjBs3jt27d7N06VIaNWrE/v37yc7OruBPruYoVxi56qqr2LFjR7F99957L+3atePJJ5+8aBABZ3jZsWMHf/rTn8pXaSXz9nTnvbu689TXO/g9OYNxC7bx9dbj/HNUJyKDdc28iEh5ZefZ6PDMsmp/3d3Th+PrVfaPsyFDhjB+/Hjy8/PJzs7ml19+YdCgQeTl5TFr1iwANmzYgNVqZfDgwXTo0IEVK1bQr18/AFq2bMnatWuZPXt2iWHk7bffZsSIETz++OMAtG3blvXr17N48eJi7ex2O3PnziUgIACAv/71r6xcuZLnn38ei8WCl5cXvr6+hIeHu46Jj4+nW7du9OzZE4AWLVqU/QdVg5XrNE1AQACdOnUqdvPz86Nhw4Z06tQJgNGjRzNlyhTXMdOnT+eHH37g4MGDbN26lbvuuosjR47wwAMPVO53UgG9WgSz5P+u4LFhbfFydyP2txMMez2WOWsOkG+zG12eiIhUgcGDB5OZmcnmzZv56aefaNu2rauXo3DcyOrVq2nZsiUZ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gt4jalJbvUeUv215/u6NdMkV2u32Yr0YZ+vXrx8rV64stm/58uWljjERERGR+qdcPSNTpkxhxIgRNGvWjPT0dObPn8/q1atZtsw5wGv06NE0adKEmJgYAMaNG8egQYOYOXMmI0eOZMGCBcTFxTFnzpzK/05ERESkVipXGElOTmb06NEkJCRgsViIjo5m2bJlDBvmHHEdHx+Pm1tRZ0v//v2ZP38+Tz/9NE899RRt2rRh4cKFdOrUqXK/CxEREam1LnmekepQlfOMiIiISNUo6+d3zR/VIiIiInWawoiIiIgYSmFEREREDKUwIiIiIoZSGBERERFDKYyIiIiIoRRGRERExFAKIyIiImIohRERERExlMKIiIiIGEphRERERAylMCIiIiKGUhgRERERQymMiIiIiKEURkRERMRQCiMiIiJiKIURERERMZTCiIiIiBhKYUREREQMpTAiIiIihlIYEREREUMpjIiIiIihFEZERETEUAojIiIiYiiFERERETGUwoiIiIgYSmFEREREDKUwIiIiIoZSGBERERFDKYyIiIiIocoVRmJiYujVqxcBAQGEhoYyatQo9u3bd8Fj5s6di8lkKnbz9va+pKJFRESk7ihXGImNjWXs2LFs3LiR5cuXk5eXx9VXX01mZuYFjwsMDCQhIcF1O3LkyCUVLSIiInWHR3kaf//998W2586dS2hoKFu2bGHgwIGlHmcymQgPD69YhSIiIlKnXdKYkdTUVACCg4Mv2C4jI4PmzZsTGRnJ9ddfz65duy7Y3mq1kpaWVuwmIiIidVOFw4jdbmf8+PEMGDCATp06ldrusssu48MPP2TRokV8+umn2O12+vfvz7Fjx0o9JiYmBovF4rpFRkZWtEwRERGp4UwOh8NRkQMffvhhli5dytq1a2natGmZj8vLy6N9+/bcfvvtzJgxo8Q2VqsVq9Xq2k5LSyMyMpLU1FQCAwMrUq6IiIhUs7S0NCwWy0U/v8s1ZqTQI488wuLFi1mzZk25ggiAp6cn3bp1Y//+/aW2MZvNmM3mipQmIiIitUy5TtM4HA4eeeQRvvnmG3788UeioqLK/YI2m40dO3YQERFR7mNFRESk7ilXz8jYsWOZP38+ixYtIiAggMTERAAsFgs+Pj4AjB49miZNmhATEwPA9OnT6du3L61bt+bMmTO88sorHDlyhAceeKCSvxUR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hg8fTnJystGl1TuxsbGMHTuWjRs3snz5cvLy8rj66qvJzMw0urR6b/PmzcyePZvo6GijS6m3UlJSGDBgAJ6enixdupTdu3czc+ZMgoKCjC6t3nrppZd47733eOedd9izZw8vvfQSL7/8Mm+//bbRpdVa9fbS3j59+tCrVy/eeecdwLn+TWRkJI8++iiTJ082uLr67cSJE4SGhhIbG8vAgQONLqfeysjIoHv37rz77rv885//pGvXrrzxxhtGl1XvTJ48mXXr1vHTTz8ZXYoUuPbaawkLC+Pf//63a99NN92Ej48Pn376qYGV1V71smckNzeXLVu2MHToUNc+Nzc3hg4dyoYNGwysTABSU1MBCA4ONriS+m3s2LGMHDmy2N+JVL///e9/9OzZk1tuuYXQ0FC6devG+++/b3RZ9Vr//v1ZuXIlv/32GwDbt29n7dq1jBgxwuDKaq9asVBeZTt58iQ2m42wsLBi+8PCwti7d69BVQk4e6jGjx/PgAED6NSpk9Hl1FsLFixg69atbN682ehS6r2DBw/y3nvvMXHiRJ566ik2b97M//3f/+Hl5cXdd99tdHn10uTJk0lLS6Ndu3a4u7tjs9l4/vnnufPOO40urdaql2FEaq6xY8eyc+dO1q5da3Qp9dbRo0cZN24cy5cvx9vb2+hy6j273U7Pnj154YUXAOjWrRs7d+5k1qxZCiMG+eKLL/jss8+YP38+HTt2ZNu2bYwfP57GjRvrd1JB9TKMNGrUCHd3d5KSkortT0pKIjw83KCq5JFHHmHx4sWsWbOGpk2bGl1OvbVlyxaSk5Pp3r27a5/NZmPNmjW88847WK1W3N3dDaywfomIiKBDhw7F9rVv357//ve/BlUkTzzxBJMnT+Yvf/kLAJ07d+bIkSPExMQojFRQvRwz4uXlRY8ePVi5cqVrn91uZ+XKlfTr18/Ayuonh8PBI488wjfffMOPP/5IVFSU0SXVa1dddRU7duxg27ZtrlvPnj2588472bZtm4JINRswYMB5l7r/9ttvNG/e3KCKJCsrCze34h+f7u7u2O12gyqq/eplzwjAxIkTufvuu+nZsye9e/fmjTfeIDMzk3vvvdfo0uqdsWPHMn/+fBYtWkRAQACJiYkAWCwWfHx8DK6u/gkICDhvvI6fnx8NGzbUOB4DTJgwgf79+/PCCy9w6623smnTJubMmcOcOXOMLq3euu6663j++edp1qwZHTt25JdffuG1117jvvvuM7q02stRj7399tuOZs2aOby8vBy9e/d2bNy40eiS6iWgxNtHH31kdGlSYNCgQY5x48YZXUa99e233zo6derkMJvNjnbt2jnmzJljdEn1WlpammPcuHGOZs2aOby9vR0tW7Z0/OMf/3BYrVajS6u16u08IyIiIlIz1MsxIyIiIlJzKIyIiIiIoRRGRERExFAKIyIiImIohRERERExlMKIiIiIGEphRERERAylMCIiIiKGUhgRERERQymMiIiIiKEURkRERMRQCiMiIiJiqP8Hg63B3ymtgHAAAAAASUVORK5CYII=\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:41:07.756271Z", "iopub.status.busy": "2022-12-14T20:41:07.755779Z", "iopub.status.idle": "2022-12-14T20:41:07.904042Z", "shell.execute_reply": "2022-12-14T20:41:07.903418Z" }, "id": "tpTEjWWex568" }, "outputs": [ { "data": { "image/png": "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frBiCyvm77//VgAlPj6+8L2VK1cqKpVKOX/+fKn7de/eXRkzZowNWmieTp06KaNGjSp8rdPplNDQUCUuLs7o9g8//LBy3333FXkvKipKee6556zazsow9xrN+dt0NICybNmyMrcZP3680rJlyyLvDRo0SOndu7cVW2YZplzfn3/+qQDKtWvXbNImS7t06ZICKH/99Vep29jj77Ba9IgYk5qaSkBAQKmf7969m7y8PHr16lX4XvPmzalXrx7btm2zRRNtZsOGDdSuXZtmzZrx/PPPc+XKFXs3ySISEhJITk4u8jv09fUlKirKIX+H27Ztw8/Pj8jIyML3evXqhVqtZseOHWXu+91331GrVi1atWpFTEwMmZmZ1m5umXJzc9m9e3eR716tVtOrV69Sv/tt27YV2R6gd+/eDvm7gopdI0B6ejr169cnLCyM/v37c/jwYVs01yac7XdYUe3atSMkJIS77rqLLVu22Ls5JktNTQUo895nj9+hQ6++ay0nT55k/vz5zJ49u9RtkpOTcXV1LZGLEBQU5LDjgRXRp08fBg4cSHh4OKdOnWLixIncc889bNu2DY1GY+/mVUrB7ykoKKjI+476O0xOTi7RxavVagkICCizvY899hj169cnNDSUAwcOMGHCBI4dO8bSpUut3eRSpaSkoNPpjH73R48eNbpPcnKy0/yuoGLX2KxZM7788kvatGlDamoqs2fPpmvXrhw+fNjqK43bQmm/w7S0NLKysvDw8LBTyywjJCSEjz/+mMjISHJycvj888/p0aMHO3bsoEOHDvZuXpn0ej1jx46lW7dutGrVqtTt7PF36NQ9ItHR0UYTh27+Kf4/hPPnz9OnTx8eeughhg8fbqeWm64i12iORx55hH79+tG6dWsGDBjAihUriI+PZ8OGDZa7iDJY+/ocgbWv8dlnn6V37960bt2awYMH8/XXX7Ns2TJOnTplwasQltClSxeefPJJ2rVrR/fu3Vm6dCmBgYF88skn9m6aMEGzZs147rnniIiIoGvXrnz55Zd07dqVd999195NK9eoUaM4dOgQixYtsndTSnDqHpGXX36ZoUOHlrlNw4YNC//7woUL9OzZk65du/Lpp5+WuV9wcDC5ublcv369SK/IxYsXCQ4OrkyzzWLuNVZWw4YNqVWrFidPnuTOO++02HFLY83rK/g9Xbx4kZCQkML3L168SLt27Sp0zIow9RqDg4NLJDnm5+dz9epVs/7NRUVFAYaev0aNGpndXkuoVasWGo2mxCyzsv5+goODzdre3ipyjcW5uLjQvn17Tp48aY0m2lxpv0MfHx+n7w0pTadOndi8ebO9m1Gm0aNHFya/l9fzZo+/Q6cORAIDAwkMDDRp2/Pnz9OzZ08iIiJYsGABanXZnUERERG4uLiwbt06HnzwQcCQKX3mzBm6dOlS6babypxrtIRz585x5cqVIjdua7Lm9YWHhxMcHMy6desKA4+0tDR27Nhh9syiyjD1Grt06cL169fZvXs3ERERAKxfvx69Xl8YXJhi3759ADb7HRrj6upKREQE69atY8CAAYCha3jdunWMHj3a6D5dunRh3bp1jB07tvC9NWvW2PTvzRwVucbidDodBw8e5N5777ViS22nS5cuJaZ6OvLv0BL27dtn17+1siiKwgsvvMCyZcvYsGED4eHh5e5jl79Dq6XBOpBz584pjRs3Vu68807l3LlzSlJSUuHPzds0a9ZM2bFjR+F7I0aMUOrVq6esX79e2bVrl9KlSxelS5cu9rgEk5w+fVrZu3ev8sYbbyg1atRQ9u7dq+zdu1e5ceNG4TbNmjVTli5dqiiKoty4cUN55ZVXlG3btikJCQnK2rVrlQ4dOihNmjRRsrOz7XUZpTL3+hRFUWbMmKH4+fkpP//8s3LgwAGlf//+Snh4uJKVlWWPSyhXnz59lPbt2ys7duxQNm/erDRp0kR59NFHCz8v/u/05MmTyptvvqns2rVLSUhIUH7++WelYcOGyu23326vSyi0aNEixc3NTVm4cKHy999/K88++6zi5+enJCcnK4qiKE888YQSHR1duP2WLVsUrVarzJ49Wzly5IgyZcoUxcXFRTl48KC9LqFc5l7jG2+8oaxevVo5deqUsnv3buWRRx5R3N3dlcOHD9vrEsp048aNwr8zQJkzZ46yd+9e5fTp04qiKEp0dLTyxBNPFG7/zz//KJ6ensqrr76qHDlyRPnggw8UjUajrFq1yl6XUCZzr+/dd99Vli9frpw4cUI5ePCgMmbMGEWtVitr16611yWU6fnnn1d8fX2VDRs2FLnvZWZmFm7jCH+H1SIQWbBggQIY/SmQkJCgAMqff/5Z+F5WVpYycuRIxd/fX/H09FQeeOCBIsGLoxkyZIjRa7z5mgBlwYIFiqIoSmZmpnL33XcrgYGBiouLi1K/fn1l+PDhhf8TdTTmXp+iGKbwvvbaa0pQUJDi5uam3HnnncqxY8ds33gTXblyRXn00UeVGjVqKD4+PsqwYcOKBFrF/52eOXNGuf3225WAgADFzc1Nady4sfLqq68qqampdrqCoubPn6/Uq1dPcXV1VTp16qRs37698LPu3bsrQ4YMKbL9jz/+qDRt2lRxdXVVWrZsqfz22282brH5zLnGsWPHFm4bFBSk3HvvvcqePXvs0GrTFExXLf5TcE1DhgxRunfvXmKfdu3aKa6urkrDhg2L/D06GnOvb+bMmUqjRo0Ud3d3JSAgQOnRo4eyfv16+zTeBKXd927+nTjC36Hq38YKIYQQQticU8+aEUIIIYRzk0BECCGEEHYjgYgQQggh7EYCESGEEELYjQQiQgghhLAbCUSEEEIIYTcSiAghhBDCbiQQEUIIIYTdSCAihBBCCLuRQEQIIYQQdiOBiBBCCCHs5v8B4GgWs5qAkS8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Current loss: 1.204573\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:41:07.907496Z", "iopub.status.busy": "2022-12-14T20:41:07.907164Z", "iopub.status.idle": "2022-12-14T20:41:07.978876Z", "shell.execute_reply": "2022-12-14T20:41:07.978274Z" }, "id": "Z86hCI0x1YX3" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 0:\n", " W = 4.48, b = 0.40, loss=6.46287\n", "Epoch 1:\n", " W = 4.09, b = 0.72, loss=4.26008\n", "Epoch 2:\n", " W = 3.81, b = 0.98, loss=2.98527\n", "Epoch 3:\n", " W = 3.61, b = 1.19, loss=2.24146\n", "Epoch 4:\n", " W = 3.46, b = 1.35, loss=1.80388\n", "Epoch 5:\n", " W = 3.35, b = 1.48, loss=1.54438\n", "Epoch 6:\n", " W = 3.27, b = 1.59, loss=1.38926\n", "Epoch 7:\n", " W = 3.21, b = 1.67, loss=1.29584\n", "Epoch 8:\n", " W = 3.17, b = 1.74, loss=1.23917\n", "Epoch 9:\n", " W = 3.14, b = 1.79, loss=1.20457\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", "その場合は `model.compile()` を使用してパラメーターを設定し、`model.fit()` でトレーニングする必要があります。L2 損失と最急降下法の Keras 実装を再びショートカットとして使用するとコード量を少なくすることができます。Keras の損失とオプティマイザーはこれらの便利な関数の外でも使用できます。また、前の例ではこれらを使用できた可能性があります。" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:41:07.982258Z", "iopub.status.busy": "2022-12-14T20:41:07.981754Z", "iopub.status.idle": "2022-12-14T20:41:07.996617Z", "shell.execute_reply": "2022-12-14T20:41:07.995978Z" }, "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", "この場合は手書きループの動作に一致させるため、`x` をサイズ 1000 の単一バッチとして渡す必要があります。" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2022-12-14T20:41:08.000023Z", "iopub.status.busy": "2022-12-14T20:41:07.999590Z", "iopub.status.idle": "2022-12-14T20:41:08.493201Z", "shell.execute_reply": "2022-12-14T20:41:08.492545Z" }, "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.2998" ] }, { "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 369ms/step - loss: 10.2998\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 2/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 6.4629" ] }, { "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.4629\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 3/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 4.2601" ] }, { "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.2601\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 2.9853" ] }, { "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.9853\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 5/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 2.2415" ] }, { "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.2415\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 6/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.8039" ] }, { "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.8039\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 7/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.5444" ] }, { "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.5444\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 8/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.3893" ] }, { "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.3893\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 9/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.2958" ] }, { "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.2958\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Epoch 10/10\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\r", "1/1 [==============================] - ETA: 0s - loss: 1.2392" ] }, { "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.2392\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", "このガイドでは、テンソル、変数、モジュール、勾配テープの基本的なクラスを使用してモデルを構築およびトレーニングする方法と、それらの概念を Keras にマッピングする方法について説明しました。\n", "\n", "ただし、これはごく単純な問題です。より実践的な説明については、[カスタムトレーニングのウォークスルー](../tutorials/customization/custom_training_walkthrough.ipynb)をご覧ください。\n", "\n", "組み込みの Keras トレーニングループを使用する方法の詳細は、[こちらのガイド](https://www.tensorflow.org/guide/keras/train_and_evaluate)を参照してください。トレーニングループと Keras の詳細は、[こちらのガイド](https://www.tensorflow.org/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 }