{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "7BO--Svs_K4W" }, "source": [ "Updated 19/Nov/2021 by Yoshihisa Nitta   \n", "\n", "# Variational Auto Encoder Training for MNIST dataset with Tensorflow 2 on Google Colab\n", "\n", "Train Variational Auto Encoder on MNIST dataset.\n", "Variational Auto Encoder is a modification of the encoder and loss function for Auto Encoder.\n", "\n", "## MNIST データセットに対して Variational Auto Encoder をGoogle Colab 上の Tensorflow 2 で学習する\n", "\n", "MNIST データセットに対して変分オートエンコーダを学習させる。\n", "Variational Auto Encoder とは、AutoEncoder に対して encoder と losss function (損失関数) に変更を加えたものである。" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "executionInfo": { "elapsed": 362, "status": "ok", "timestamp": 1637563720376, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "lTI3emtaTY_g" }, "outputs": [], "source": [ "#! pip install tensorflow==2.7.0" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 2353, "status": "ok", "timestamp": 1637563722727, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "7q6c9ybETW0b", "outputId": "f6c02aec-5fcd-41c3-9860-3dccb614d76a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.7.0\n" ] } ], "source": [ "%tensorflow_version 2.x\n", "\n", "import tensorflow as tf\n", "print(tf.__version__)" ] }, { "cell_type": "markdown", "metadata": { "id": "MIUEAGSC_wzR" }, "source": [ "# About Encoder of VariationalAutoEncoder\n", "\n", "\n", "\n", "With AutoEncoder, eath image is directly mapped to one point in the latent space.\n", "With VariationalAutoEncoder, each image is mapped to a multivariate normal distribution around a point in latent space.\n", "\n", "The covariance matrix is a diagonal matrix because VariationalAutoEncoder considers that there is no correlation between any dimensions of the latent space.\n", "As a result, the encoder only needs to map each input to the mean vector and the variance vector, and does not have to worry about the correlation between the dimensions.\n", "Furthermore, when mapped to the logarithm of the variance, any real number in the range($-\\infty$, $\\infty$) can be assigned.\n", "\n", "\n", "## VariationalAutoEncoder の Encoder について\n", "\n", "AutoEncoder では、各画像は潜在空間の1点に直接写像される。\n", "VariationalAutoEncoder では、各画像は潜在空間のある点の周りの多変量正規分布に写像される。\n", "\n", "変分オートエンコーダでは、潜在空間のどの次元間にも相関がないとみなすので、共分散行列は対角行列になる。 これにより、エンコーダは各入力を平均ベクトルと分散ベクトルに写像すればよく、次元間の相関を気にする必要はない。 さらに、分散の対数に写像すると (−∞,∞) の範囲のどのような実数でもとれる。" ] }, { "cell_type": "markdown", "metadata": { "id": "ytJO1E7Tc1K4" }, "source": [ "# Covariance Matrix\n", "\n", "The variance-covariance matrix is a matrix obtained by extending the concept of variance (an index showing the degree of distribution) to multidimensional random varaible.\n", "\n", "## Difinition for 2 random variables\n", "\n", "For the random variables $X_1$ and $X_2$, the variance-covariance matrix is define as follows. \n", "\n", "$\\Sigma = \n", "\\left( \\begin{array}{cc}\n", " \\sigma_1^2 & \\sigma_{12} \\\\\n", " \\sigma_{12} & \\sigma_2^2 \\\\\n", "\\end{array} \\right )$\n", "\n", "where
\n", "$\\sigma_1^2 = \\mbox{variance of } X_1 $,
\n", "$\\sigma_2^2 = \\mbox{variance of } X_2 $,
\n", "$\\sigma_{12} = \\mbox{covariance of } X_1 \\mbox{ and } X_2$
\n", "\n", "$\\Sigma$ is called a variance-covariance matrix because the variances are lined up on the diagonal components and the covariances are lined up on the off-diagonal components.\n", "\n", "It is defined in the same way when there are $n$ random variables.\n", "\n", "For the random variables $X_1$, $\\cdots$, $X_n$, An $n\\times n$ matrix is called a variance-covariance matris where the $ii$ component is $\\sigma_i^2$, and the $ij$ component ($i\\neq j$) is $\\sigma_{ij}$.\n", "\n", "## Example: Find the variance and covariance of 5 data in 2 variables.\n", "\n", "Suppose that $(x_i, y_i) = (4,5), (5, 7), (6,6), (7,9), (8,8)$ are given as data.\n", "\n", "Mean of $x$ : $\\mu_x = \\displaystyle \\frac{1}{5} (4+5+6+7+8)=6$,
\n", "Mean of $y$ : $\\mu_y = \\displaystyle \\frac{1}{5}(5 + 7+6+9+8)=7$
\n", "\n", "Variance of $x$:
\n", "$\\sigma_x^2 = \\displaystyle\\frac{1}{5}\\sum_{k=1}^5 (x_i - \\mu_x)^2 \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} ((4-6)^2+(5-6)^2+(6-6)^2 + (7-6)^2 +(8-6)^2 ) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} (2^2 + 1^2 + 0^2 + 1^2 + 2^2) = 2$
\n", "Variance of $y$
\n", "$\\sigma_y^2 = \\displaystyle\\frac{1}{5} \\sum_{k=1}^{5} (y_i - \\mu_y)^2 \\\\ \n", "\\quad = \\displaystyle{1}{5}((5-7)^2 +(7-7)^2 +(6-7)^2 +(9-7)^2 +(8-7)^2 ) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} (2^2 + 0^2 + 1^2 + 2^2 + 1^2) = 2$
\n", "\n", "Covariance of $x$ and $y$:
\n", "$\\sigma_{xy} = \\displaystyle \\frac{1}{5} \\sum_{k=1}^5 (x_i - \\mu_x) (y_i - \\mu_y) \\\\ \n", "\\quad = \\displaystyle \\frac{1}{5} ((4-6)(5-7)+(5-6)(7-7)+(6-6)(6-7)+(7-6)(9-7)+(8-6)(8-7)) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5}((-2)(-2) + (-1)\\cdot 0 + 0 \\cdot (-1) + 1 \\cdot 2 + 2 \\cdot 1)=\\frac{8}{5}=1.6\n", "$\n", "\n", "Variance and covariance matrix of $x$ and $y$:
\n", "$\\Sigma = \\left(\n", "\\begin{array}{cc}\n", "\\sigma_x^2 & \\sigma_{xy} \\\\ \n", "\\sigma_{xy} & \\sigma_y^2 \\\\\n", "\\end{array}\n", "\\right) = \\left(\n", "\\begin{array}{cc}\n", "2 & 1.6 \\\\\n", "1.6 & 2 \\\\\n", "\\end{array}\n", "\\right)$\n" ] }, { "cell_type": "markdown", "metadata": { "id": "4ErC6J5DBSQS" }, "source": [ "## 分散共分散行列\n", "\n", "分散共分散行列とは、分散(散らばり具合を表す指標)の概念を多次元確率変数に拡張して行列としたもの。単に共分散行列と呼ぶこともある。\n", "\n", "### 確率変数が2つの場合の定義\n", "\n", "確率変数 $X_1$, $X_2$ に対して、分散共分散行列 を\n", "$\\Sigma = \n", "\\left( \\begin{array}{cc}\n", " \\sigma_1^2 & \\sigma_{12} \\\\\n", " \\sigma_{12} & \\sigma_2^2 \\\\\n", "\\end{array} \\right )$\n", "と定義する。\n", "ただし、
\n", "$\\sigma_1^2 = X_1 \\mbox{の分散}$,
\n", "$\\sigma_2^2 = X_2 \\mbox{の分散}$,
\n", "$\\sigma_{12} = X_1 \\mbox{と} X_2 \\mbox{の共分散}$
\n", "を表す。対角成分に分散が並び、非対角成分には共分散が並ぶため、分散共分散行列と呼ばれる。\n", "\n", "確率変数が $n$ 個の場合も同様に定義される。\n", "\n", "確率変数 $X_1$, $\\cdots$, $X_n$ に対して、\n", "第 $ii$ 成分が $\\sigma_i^2$,
\n", "第 $ij$ 成分 ($i \\neq j$)が $\\sigma_{ij}$
\n", "であるような $n\\times n$行列 $\\Sigma$ を\n", "分散共分散行列と呼ぶ。\n", "\n", "### 例題: 2変数の5個のデータの分散と共分散を求めよ。\n", "データとして\n", "$(x_i, y_i) = (4, 5), (5, 7), (6, 6), (7,9), (8, 8)$\n", "が与えられたとする。\n", "\n", "$x$の平均 \n", "$\\mu_x = \\displaystyle\\frac{1}{5} (4 + 5 + 6 + 7 + 8) = 6$,
\n", "$y$ の平均\n", "$\\mu_y = \\displaystyle\\frac{1}{5} (5 + 7 + 6 + 9 + 8) = 7$
\n", "\n", "$x$ の分散は
\n", "$\\sigma_x^2 = \\displaystyle\\frac{1}{5}\\sum_{k=1}^5 (x_i - \\mu_x)^2 \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} ((4-6)^2+(5-6)^2+(6-6)^2 + (7-6)^2 +(8-6)^2 ) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} (2^2 + 1^2 + 0^2 + 1^2 + 2^2) = 2$
\n", "$y$の分散は
\n", "$\\sigma_y^2 = \\displaystyle\\frac{1}{5} \\sum_{k=1}^{5} (y_i - \\mu_y)^2 \\\\ \n", "\\quad = \\displaystyle{1}{5}((5-7)^2 +(7-7)^2 +(6-7)^2 +(9-7)^2 +(8-7)^2 ) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5} (2^2 + 0^2 + 1^2 + 2^2 + 1^2) = 2$
\n", "\n", "$x$ と $y$の共分散は
\n", "$\\sigma_{xy} = \\displaystyle \\frac{1}{5} \\sum_{k=1}^5 (x_i - \\mu_x) (y_i - \\mu_y) \\\\ \n", "\\quad = \\displaystyle \\frac{1}{5} ((4-6)(5-7)+(5-6)(7-7)+(6-6)(6-7)+(7-6)(9-7)+(8-6)(8-7)) \\\\\n", "\\quad = \\displaystyle \\frac{1}{5}((-2)(-2) + (-1)\\cdot 0 + 0 \\cdot (-1) + 1 \\cdot 2 + 2 \\cdot 1)=\\frac{8}{5}=1.6\n", "$\n", "\n", "$x$ と $y$ の分散共分散行列は
\n", "$\\Sigma = \\left(\n", "\\begin{array}{cc}\n", "\\sigma_x^2 & \\sigma_{xy} \\\\ \n", "\\sigma_{xy} & \\sigma_y^2 \\\\\n", "\\end{array}\n", "\\right) = \\left(\n", "\\begin{array}{cc}\n", "2 & 1.6 \\\\\n", "1.6 & 2 \\\\\n", "\\end{array}\n", "\\right)$" ] }, { "cell_type": "markdown", "metadata": { "id": "vOo-GlgLSCYv" }, "source": [ "# Normal Distribution\n", "\n", "Probability density function of one-dimensional normal distribution
\n", "$\\displaystyle f(x | \\mu, \\sigma^2) = \\frac{1}{\\sqrt{2\\pi\\sigma^2}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}$
\n", "where mean $\\mu$, variance $\\sigma^2$, standard deviation $\\sigma$.\n", "\n", "## 正規分布\n", "\n", "平均(mean) $\\mu$, 分散(variance) $\\sigma^2$, 標準偏差(standard deviatioin) $\\sigma$ として1次元の正規分布の確率密度関数
\n", "$\\displaystyle f(x | \\mu, \\sigma^2) = \\frac{1}{\\sqrt{2\\pi\\sigma^2}} e^{-\\frac{(x-\\mu)^2}{2\\sigma^2}}$" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 374 }, "executionInfo": { "elapsed": 8, "status": "ok", "timestamp": 1637563722727, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "FGuxfvxUJ6hE", "outputId": "ec1fe04c-45f1-4bf1-9837-4c745b409214" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeMAAAFlCAYAAADYnoD9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdeVxU9f7H8ddhFxUE3NgUFXEXUFzSFsFEM5dKy8yu9ctutt6bdcv2su12u7Znu13NFi3LsnJXzDQtxS01ERVkV0RFXECW8/vj6yAqyAAzc2b5PB8PHsjMmXM+M6Vvvt/zXTRd1xFCCCGEcdyMLkAIIYRwdRLGQgghhMEkjIUQQgiDSRgLIYQQBpMwFkIIIQwmYSyEEEIYzMOoCzdv3lyPiIgw6vJCCCGETSUnJx/Wdb1Fdc8ZFsYRERFs2rTJqMsLIYQQNqVp2oGanpNuaiGEEMJgEsZCCCGEwSSMhRBCCIMZds9YCCEASktLycrKori42OhShLAIHx8fwsLC8PT0NPs1EsZCCENlZWXRtGlTIiIi0DTN6HKEaBBd1ykoKCArK4t27dqZ/TrpphZCGKq4uJigoCAJYuEUNE0jKCiozj09EsZCCMNJEAtnUp//nyWMhRCiGm+++SanTp0yuox6W7JkCZ06dSIyMpJXXnml2mNKSkoYN24ckZGR9OvXj/T0dKvXNXz4cI4dO2b165jDnPefmZlJfHw8Xbt2pVu3brz11ltWqUXCWAghqnGpMC4vL7dxNXVTXl7Offfdx+LFi9m1axdfffUVu3btuui4mTNnEhAQwN69e5kyZQpTp061Wk26rlNRUcGiRYto1qyZ1a5TF+a8fw8PD1577TV27drFhg0bmDFjRrWfZUNJGAshXNrJkye59tpriY6Opnv37sybN4+3336bnJwc4uPjiY+PB6BJkyY8/PDDREdHs379+vPOMWjQIKZMmUJcXBxdunRh48aN3HDDDXTs2JGnnnqq8rjPP/+cvn37EhMTw+TJkytD/Z577iEuLo5u3brx7LPPVh4fERHBs88+S69evejRowe7d+826z398ccfREZG0r59e7y8vLj55pv54YcfLjruhx9+4LbbbgNg7NixrFy5El3XazzvY489xowZMyp/fu6555g+fTonTpxg8ODBlXWarpWenk6nTp2YOHEi3bt3JzMzk4iICA4fPgzAddddR+/evenWrRsfffRR5XmbNGnCk08+SXR0NP379+fgwYMAHDx4kOuvv57o6Giio6P57bffLvm51sac9x8cHEyvXr0AaNq0KV26dCE7O9us89eFjKYWQtiNBx+ErVste86YGHjzzZqfX7JkCSEhIfz8888AFBYW4u/vz+uvv05SUhLNmzcHVGj369eP1157rdrzeHl5sWnTJt566y1Gjx5NcnIygYGBdOjQgSlTpnDo0CHmzZvHunXr8PT05N577+WLL75g4sSJvPTSSwQGBlJeXs7gwYPZvn07PXv2BKB58+Zs3ryZ9957j+nTp/PJJ5+QlJTElClTLqrB19eX3377jezsbMLDwysfDwsL4/fff7/o+KrHeXh44O/vT0FBQeV7vtC4ceN48MEHue+++wD4+uuvWbp0KT4+PixYsAA/Pz8OHz5M//79GTVqFACpqanMnj2b/v37X3S+Tz/9lMDAQE6fPk2fPn0YM2YMQUFBnDx5kv79+/PSSy/x6KOP8vHHH/PUU0/xj3/8g6uuuooFCxZQXl7OiRMn+Ouvv2r8XMeNG0dKSspF133ooYeYOHFind9/eno6W7ZsoV+/ftU+3xASxkK4iLIySEpS39u3h06djK7IPvTo0YOHH36YqVOnMmLECK644opqj3N3d2fMmDE1nscUPj169KBbt24EBwcD0L59ezIzM1m7di3Jycn06dMHgNOnT9OyZUtAhdpHH31EWVkZubm57Nq1qzKMb7jhBgB69+7Nd999B0B8fDxbLf1bixliY2M5dOgQOTk55OfnExAQQHh4OKWlpTzxxBOsWbMGNzc3srOzK1uzbdu2rTaIAd5++20WLFgAqHuzqampBAUF4eXlxYgRIwD1vpcvXw7AqlWr+OyzzwD138Pf3585c+bU+LnOmzfPYu/9xIkTjBkzhjfffBM/Pz+LnddEwlgIFzF5Mnz6qfqzuzts3gxn/723G5dqwVpLVFQUmzdvZtGiRTz11FMMHjyYZ5555qLjfHx8cHd3r/E83t7eALi5uVX+2fRzWVkZuq5z22238e9///u816WlpTF9+nQ2btxIQEAAt99++3nTYkzncnd3p6ysDKDWlnFoaCiZmZmVj2dlZREaGnrR8abjwsLCKCsro7CwkKCgoBrfI8CNN97I/PnzycvLY9y4cQB88cUX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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "x = np.linspace(-5, 5, 200)\n", "\n", "def f(x, m, v):\n", " d = x-m\n", " return np.exp(- d*d / (2.0 * v)) / np.sqrt(2 * np.pi * v)\n", "\n", "fig, ax = plt.subplots(1,1,figsize=(8,6))\n", "\n", "ax.plot(x, f(x, 0.0, 0.2),label='str mean=0.0, variance=0.2',color='blue')\n", "ax.plot(x, f(x, 0.0, 1.0),label='str mean=0.0, variance=1.0',color='red')\n", "ax.plot(x, f(x, 0.0, 5.0),label='str mean=0.0, variance=5.0',color='orange')\n", "ax.plot(x, f(x, -2.0, 0.5),label='str mean=-2.0, variance=0.5',color='green')\n", "\n", "plt.legend()\n", "plt.show()\n", " " ] }, { "cell_type": "markdown", "metadata": { "id": "u1sJIF4XUdRI" }, "source": [ "# VariationalAutoEncoder\n", "\n", "Sample the point $z$ as follows.\n", "\n", "$ z = \\mu + \\sigma \\epsilon$
\n", "\n", "$\\mu$ represents where to place the marker, $\\sigma$ is its certainty, and $\\epsilon$ is a randomly selected value according to the probability distribution.\n", "The point is tried to place around the $\\mu$, so it is expected that the latent space will be continuous.\n", "\n", "Since the relationship\n", "$x = \\displaystyle e^{\\log x}$ holds, the following formula holds.
\n", "$\\sigma = \\displaystyle e^{\\log \\sigma} = \\displaystyle e^{\\frac{2 \\log \\sigma}{2}} = \\displaystyle e^{\\frac{\\log \\sigma^2}{2}}$\n", "\n", "Therefore, using the calculated $\\log$ of variance $\\sigma^2$, calculate the following equation for each dimension.
\n", "$\\mbox{sigma} = \\sigma = \\mbox{exp(log_var/2)}$\n", "\n", "The features of the new variational encoder are as follows.\n", "\n", "\n", "\n", "## 変分オートエンコーダ\n", "\n", "次の式を使って点 $z$ をサンプリングする。\n", "\n", "$ z = \\mu + \\sigma \\epsilon$
\n", "\n", "$\\mu$ は目印をどこに置くか表し、$\\sigma$ はその確信度、$\\epsilon$ はどのぐらい離れておくかを確率分布に従ってランダムに選んだ値となる。\n", "$\\mu$ を目標としてその周囲に置こうとするので、\n", "潜在空間が連続となることが期待される。\n", "\n", "$x = \\displaystyle e^{\\log x}$ という関係が成り立つので \n", "$\\sigma = \\displaystyle e^{\\log \\sigma} = \\displaystyle e^{\\frac{2 \\log \\sigma}{2}} = \\displaystyle e^{\\frac{\\log \\sigma^2}{2}}$\n", "が言える。\n", "したがって、\n", "分散 $\\sigma^2$ の $\\log$ を計算したもの $\\mbox{log_var} = \\log \\sigma^2$ を使って、\n", "$\\mbox{sigma} = \\sigma = \\mbox{exp(log_var/2)}$\n", "を各次元について計算する。\n", "\n", "新しい変分エンコーダの特徴は次の通り。\n", "\n", "" ] }, { "cell_type": "markdown", "metadata": { "id": "ezFGPeDefn3c" }, "source": [ "# Check the Google Colab runtime environment\n", "\n", "## Google Colab 実行環境を調べる" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 476, "status": "ok", "timestamp": 1637563723197, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "B39m0TH6DO1q", "outputId": "48e2b2e0-c16d-4259-a801-30b880df970e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Mon Nov 22 06:48:42 2021 \n", "+-----------------------------------------------------------------------------+\n", "| NVIDIA-SMI 495.44 Driver Version: 460.32.03 CUDA Version: 11.2 |\n", "|-------------------------------+----------------------+----------------------+\n", "| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |\n", "| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |\n", "| | | MIG M. |\n", "|===============================+======================+======================|\n", "| 0 Tesla P100-PCIE... Off | 00000000:00:04.0 Off | 0 |\n", "| N/A 36C P0 28W / 250W | 0MiB / 16280MiB | 0% Default |\n", "| | | N/A |\n", "+-------------------------------+----------------------+----------------------+\n", " \n", "+-----------------------------------------------------------------------------+\n", "| Processes: |\n", "| GPU GI CI PID Type Process name GPU Memory |\n", "| ID ID Usage |\n", "|=============================================================================|\n", "| No running processes found |\n", "+-----------------------------------------------------------------------------+\n", "processor\t: 0\n", "vendor_id\t: GenuineIntel\n", "cpu family\t: 6\n", "model\t\t: 85\n", "model name\t: Intel(R) Xeon(R) CPU @ 2.00GHz\n", "stepping\t: 3\n", "microcode\t: 0x1\n", "cpu MHz\t\t: 2000.188\n", "cache size\t: 39424 KB\n", "physical id\t: 0\n", "siblings\t: 2\n", "core id\t\t: 0\n", "cpu cores\t: 1\n", "apicid\t\t: 0\n", "initial apicid\t: 0\n", "fpu\t\t: yes\n", "fpu_exception\t: yes\n", "cpuid level\t: 13\n", "wp\t\t: yes\n", "flags\t\t: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat md_clear arch_capabilities\n", "bugs\t\t: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa\n", "bogomips\t: 4000.37\n", "clflush size\t: 64\n", "cache_alignment\t: 64\n", "address sizes\t: 46 bits physical, 48 bits virtual\n", "power management:\n", "\n", "processor\t: 1\n", "vendor_id\t: GenuineIntel\n", "cpu family\t: 6\n", "model\t\t: 85\n", "model name\t: Intel(R) Xeon(R) CPU @ 2.00GHz\n", "stepping\t: 3\n", "microcode\t: 0x1\n", "cpu MHz\t\t: 2000.188\n", "cache size\t: 39424 KB\n", "physical id\t: 0\n", "siblings\t: 2\n", "core id\t\t: 0\n", "cpu cores\t: 1\n", "apicid\t\t: 1\n", "initial apicid\t: 1\n", "fpu\t\t: yes\n", "fpu_exception\t: yes\n", "cpuid level\t: 13\n", "wp\t\t: yes\n", "flags\t\t: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch invpcid_single ssbd ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx avx512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec xgetbv1 xsaves arat md_clear arch_capabilities\n", "bugs\t\t: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa\n", "bogomips\t: 4000.37\n", "clflush size\t: 64\n", "cache_alignment\t: 64\n", "address sizes\t: 46 bits physical, 48 bits virtual\n", "power management:\n", "\n", "Ubuntu 18.04.5 LTS \\n \\l\n", "\n", " total used free shared buff/cache available\n", "Mem: 12G 785M 6.6G 1.2M 5.4G 11G\n", "Swap: 0B 0B 0B\n" ] } ], "source": [ "! nvidia-smi\n", "! cat /proc/cpuinfo\n", "! cat /etc/issue\n", "! free -h" ] }, { "cell_type": "markdown", "metadata": { "id": "jBDsEv-nfutf" }, "source": [ "# Mount Google Drive from Google Colab\n", "\n", "## Google Colab から GoogleDrive をマウントする" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1637563723197, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "Emws6JKZfjAa", "outputId": "ff9475ef-3a51-4ad2-e744-8d392ac79870" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" ] } ], "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637563723197, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "F6_sJFIGgldJ", "outputId": "c345fe4e-1569-49aa-9c76-5e1f6fee323c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MyDrive Shareddrives\n" ] } ], "source": [ "! ls /content/drive" ] }, { "cell_type": "markdown", "metadata": { "id": "8r3brRqFgzTm" }, "source": [ "# Download source file from Google Drive or nw.tsuda.ac.jp\n", "Basically, gdown from Google Drive. Download from nw.tsuda.ac.jp above only if the specifications of Google Drive change and you cannot download from Google Drive.\n", "\n", "## Google Drive または nw.tsuda.ac.jp からファイルをダウンロードする\n", "基本的に Google Drive から gdown してください。 Google Drive の仕様が変わってダウンロードができない場合にのみ、nw.tsuda.ac.jp からダウンロードしてください。" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 2342, "status": "ok", "timestamp": 1637563725537, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "lq19ESx9gstQ", "outputId": "9dab4ab2-a45c-4207-fe5a-094c1ac90e6d" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading...\n", "From: https://drive.google.com/uc?id=1ZCihR7JkMOity4wCr66ZCp-3ZOlfwwo3\n", "To: /content/nw/VariationalAutoEncoder.py\n", "\r", " 0% 0.00/18.7k [00:00 BatchNorm\n", " x = tf.keras.layers.LeakyReLU()(x) ### VAE: BatchNorm -> LeakyReLU\n", " \n", " if self.use_dropout:\n", " x = tf.keras.layers.Dropout(rate = 0.25)(x)\n", " \n", " shape_before_flattening = tf.keras.backend.int_shape(x)[1:]\n", " \n", " x = tf.keras.layers.Flatten()(x)\n", " \n", " self.mu = tf.keras.layers.Dense(self.z_dim, name='mu')(x)\n", " self.log_var = tf.keras.layers.Dense(self.z_dim, name='log_var')(x) \n", " self.z = Sampling(name='encoder_output')([self.mu, self.log_var])\n", " \n", " self.encoder = tf.keras.models.Model(encoder_input, [self.mu, self.log_var, self.z], name='encoder')\n", " \n", " \n", " ### THE DECODER\n", " decoder_input = tf.keras.layers.Input(shape=(self.z_dim,), name='decoder_input')\n", " x = decoder_input\n", " x = tf.keras.layers.Dense(np.prod(shape_before_flattening))(x)\n", " x = tf.keras.layers.Reshape(shape_before_flattening)(x)\n", " \n", " for i in range(self.n_layers_decoder):\n", " x = conv_t_layer = tf.keras.layers.Conv2DTranspose(\n", " filters = self.decoder_conv_t_filters[i],\n", " kernel_size = self.decoder_conv_t_kernel_size[i],\n", " strides = self.decoder_conv_t_strides[i],\n", " padding = 'same',\n", " name = 'decoder_conv_t_' + str(i)\n", " )(x)\n", " \n", " if i < self.n_layers_decoder - 1:\n", " if self.use_batch_norm: ### The order of layers is opposite to AutoEncoder\n", " x = tf.keras.layers.BatchNormalization()(x) ### AE: LeakyReLU -> BatchNorm\n", " x = tf.keras.layers.LeakyReLU()(x) ### VAE: BatchNorm -> LeakyReLU \n", " if self.use_dropout:\n", " x = tf.keras.layers.Dropout(rate=0.25)(x)\n", " else:\n", " x = tf.keras.layers.Activation('sigmoid')(x)\n", " \n", " decoder_output = x\n", " self.decoder = tf.keras.models.Model(decoder_input, decoder_output, name='decoder') ### added (name)\n", " \n", " ### THE FULL AUTOENCODER\n", " self.model = VAEModel(self.encoder, self.decoder, self.r_loss_factor)\n", " \n", " \n", " def save(self, folder):\n", " self.save_params(os.path.join(folder, 'params.pkl'))\n", " self.save_weights(folder)\n", "\n", "\n", " @staticmethod\n", " def load(folder, epoch=None): # VariationalAutoEncoder.load(folder)\n", " params = VariationalAutoEncoder.load_params(os.path.join(folder, 'params.pkl'))\n", " VAE = VariationalAutoEncoder(*params)\n", " if epoch is None:\n", " VAE.load_weights(folder)\n", " else:\n", " VAE.load_weights(folder, epoch-1)\n", " VAE.epoch = epoch\n", " return VAE\n", "\n", " \n", " def save_params(self, filepath):\n", " dpath, fname = os.path.split(filepath)\n", " if dpath != '' and not os.path.exists(dpath):\n", " os.makedirs(dpath)\n", " with open(filepath, 'wb') as f:\n", " pickle.dump([\n", " self.input_dim,\n", " self.encoder_conv_filters,\n", " self.encoder_conv_kernel_size,\n", " self.encoder_conv_strides,\n", " self.decoder_conv_t_filters,\n", " self.decoder_conv_t_kernel_size,\n", " self.decoder_conv_t_strides,\n", " self.z_dim,\n", " self.r_loss_factor,\n", " self.use_batch_norm,\n", " self.use_dropout,\n", " self.epoch\n", " ], f)\n", "\n", "\n", " @staticmethod\n", " def load_params(filepath):\n", " with open(filepath, 'rb') as f:\n", " params = pickle.load(f)\n", " return params\n", "\n", "\n", " def save_weights(self, folder, epoch=None):\n", " if epoch is None:\n", " self.save_model_weights(self.encoder, os.path.join(folder, f'weights/encoder-weights.h5'))\n", " self.save_model_weights(self.decoder, os.path.join(folder, f'weights/decoder-weights.h5'))\n", " else:\n", " self.save_model_weights(self.encoder, os.path.join(folder, f'weights/encoder-weights_{epoch}.h5'))\n", " self.save_model_weights(self.decoder, os.path.join(folder, f'weights/decoder-weights_{epoch}.h5'))\n", "\n", "\n", " def save_model_weights(self, model, filepath):\n", " dpath, fname = os.path.split(filepath)\n", " if dpath != '' and not os.path.exists(dpath):\n", " os.makedirs(dpath)\n", " model.save_weights(filepath)\n", "\n", "\n", " def load_weights(self, folder, epoch=None):\n", " if epoch is None:\n", " self.encoder.load_weights(os.path.join(folder, f'weights/encoder-weights.h5'))\n", " self.decoder.load_weights(os.path.join(folder, f'weights/decoder-weights.h5'))\n", " else:\n", " self.encoder.load_weights(os.path.join(folder, f'weights/encoder-weights_{epoch}.h5'))\n", " self.decoder.load_weights(os.path.join(folder, f'weights/decoder-weights_{epoch}.h5'))\n", "\n", "\n", " def save_images(self, imgs, filepath):\n", " z_mean, z_log_var, z = self.encoder.predict(imgs)\n", " reconst_imgs = self.decoder.predict(z)\n", " txts = [ f'{p[0]:.3f}, {p[1]:.3f}' for p in z ]\n", " AutoEncoder.showImages(imgs, reconst_imgs, txts, 1.4, 1.4, 0.5, filepath)\n", " \n", "\n", " def compile(self, learning_rate):\n", " self.learning_rate = learning_rate\n", " optimizer = tf.keras.optimizers.Adam(lr=learning_rate)\n", " self.model.compile(optimizer=optimizer) # CAUTION!!!: loss(y_true, y_pred) function is not specified.\n", " \n", " \n", " def train_with_fit(\n", " self,\n", " x_train,\n", " batch_size,\n", " epochs,\n", " run_folder='run/'\n", " ):\n", " history = self.model.fit(\n", " x_train,\n", " x_train,\n", " batch_size = batch_size,\n", " shuffle=True,\n", " initial_epoch = self.epoch,\n", " epochs = epochs\n", " )\n", " if (self.epoch < epochs):\n", " self.epoch = epochs\n", "\n", " if run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch-1)\n", " \n", " return history\n", "\n", "\n", " def train_generator_with_fit(\n", " self,\n", " data_flow,\n", " epochs,\n", " run_folder='run/'\n", " ):\n", " history = self.model.fit(\n", " data_flow,\n", " initial_epoch = self.epoch,\n", " epochs = epochs\n", " )\n", " if (self.epoch < epochs):\n", " self.epoch = epochs\n", "\n", " if run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch-1)\n", " \n", " return history\n", "\n", "\n", " def train_tf(\n", " self,\n", " x_train,\n", " batch_size = 32,\n", " epochs = 10,\n", " shuffle = False,\n", " run_folder = 'run/',\n", " optimizer = None,\n", " save_epoch_interval = 100,\n", " validation_data = None\n", " ):\n", " start_time = datetime.datetime.now()\n", " steps = x_train.shape[0] // batch_size\n", "\n", " total_losses = []\n", " reconstruction_losses = []\n", " kl_losses = []\n", "\n", " val_total_losses = []\n", " val_reconstruction_losses = []\n", " val_kl_losses = []\n", "\n", " for epoch in range(self.epoch, epochs):\n", " epoch_loss = 0\n", " indices = tf.range(x_train.shape[0], dtype=tf.int32)\n", " if shuffle:\n", " indices = tf.random.shuffle(indices)\n", " x_ = x_train[indices]\n", "\n", " step_total_losses = []\n", " step_reconstruction_losses = []\n", " step_kl_losses = []\n", " for step in range(steps):\n", " start = batch_size * step\n", " end = start + batch_size\n", "\n", " total_loss, reconstruction_loss, kl_loss, grads = self.model.compute_loss_and_grads(x_[start:end])\n", " optimizer.apply_gradients(zip(grads, self.model.trainable_weights))\n", " \n", " step_total_losses.append(np.mean(total_loss))\n", " step_reconstruction_losses.append(np.mean(reconstruction_loss))\n", " step_kl_losses.append(np.mean(kl_loss))\n", " \n", " epoch_total_loss = np.mean(step_total_losses)\n", " epoch_reconstruction_loss = np.mean(step_reconstruction_losses)\n", " epoch_kl_loss = np.mean(step_kl_losses)\n", "\n", " total_losses.append(epoch_total_loss)\n", " reconstruction_losses.append(epoch_reconstruction_loss)\n", " kl_losses.append(epoch_kl_loss)\n", "\n", " val_str = ''\n", " if not validation_data is None:\n", " x_val = validation_data\n", " tl, rl, kl = self.model.loss_fn(x_val)\n", " val_tl = np.mean(tl)\n", " val_rl = np.mean(rl)\n", " val_kl = np.mean(kl)\n", " val_total_losses.append(val_tl)\n", " val_reconstruction_losses.append(val_rl)\n", " val_kl_losses.append(val_kl)\n", " val_str = f'val loss total {val_tl:.3f} reconstruction {val_rl:.3f} kl {val_kl:.3f} '\n", "\n", " if (epoch+1) % save_epoch_interval == 0 and run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch)\n", "\n", " elapsed_time = datetime.datetime.now() - start_time\n", " print(f'{epoch+1}/{epochs} {steps} loss: total {epoch_total_loss:.3f} reconstruction {epoch_reconstruction_loss:.3f} kl {epoch_kl_loss:.3f} {val_str}{elapsed_time}')\n", "\n", " self.epoch += 1\n", "\n", " if run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch-1)\n", "\n", " dic = { 'loss' : total_losses, 'reconstruction_loss' : reconstruction_losses, 'kl_loss' : kl_losses }\n", " if not validation_data is None:\n", " dic['val_loss'] = val_total_losses\n", " dic['val_reconstruction_loss'] = val_reconstruction_losses\n", " dic['val_kl_loss'] = val_kl_losses\n", "\n", " return dic\n", " \n", "\n", " def train_tf_generator(\n", " self,\n", " data_flow,\n", " epochs = 10,\n", " run_folder = 'run/',\n", " optimizer = None,\n", " save_epoch_interval = 100,\n", " validation_data_flow = None\n", " ):\n", " start_time = datetime.datetime.now()\n", " steps = len(data_flow)\n", "\n", " total_losses = []\n", " reconstruction_losses = []\n", " kl_losses = []\n", "\n", " val_total_losses = []\n", " val_reconstruction_losses = []\n", " val_kl_losses = []\n", "\n", " for epoch in range(self.epoch, epochs):\n", " epoch_loss = 0\n", "\n", " step_total_losses = []\n", " step_reconstruction_losses = []\n", " step_kl_losses = []\n", "\n", " for step in range(steps):\n", " x, _ = next(data_flow)\n", "\n", " total_loss, reconstruction_loss, kl_loss, grads = self.model.compute_loss_and_grads(x)\n", " optimizer.apply_gradients(zip(grads, self.model.trainable_weights))\n", " \n", " step_total_losses.append(np.mean(total_loss))\n", " step_reconstruction_losses.append(np.mean(reconstruction_loss))\n", " step_kl_losses.append(np.mean(kl_loss))\n", " \n", " epoch_total_loss = np.mean(step_total_losses)\n", " epoch_reconstruction_loss = np.mean(step_reconstruction_losses)\n", " epoch_kl_loss = np.mean(step_kl_losses)\n", "\n", " total_losses.append(epoch_total_loss)\n", " reconstruction_losses.append(epoch_reconstruction_loss)\n", " kl_losses.append(epoch_kl_loss)\n", "\n", " val_str = ''\n", " if not validation_data_flow is None:\n", " step_val_tl = []\n", " step_val_rl = []\n", " step_val_kl = []\n", " for i in range(len(validation_data_flow)):\n", " x, _ = next(validation_data_flow)\n", " tl, rl, kl = self.model.loss_fn(x)\n", " step_val_tl.append(np.mean(tl))\n", " step_val_rl.append(np.mean(rl))\n", " step_val_kl.append(np.mean(kl))\n", " val_tl = np.mean(step_val_tl)\n", " val_rl = np.mean(step_val_rl)\n", " val_kl = np.mean(step_val_kl)\n", " val_total_losses.append(val_tl)\n", " val_reconstruction_losses.append(val_rl)\n", " val_kl_losses.append(val_kl)\n", " val_str = f'val loss total {val_tl:.3f} reconstruction {val_rl:.3f} kl {val_kl:.3f} '\n", "\n", " if (epoch+1) % save_epoch_interval == 0 and run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch)\n", "\n", " elapsed_time = datetime.datetime.now() - start_time\n", " print(f'{epoch+1}/{epochs} {steps} loss: total {epoch_total_loss:.3f} reconstruction {epoch_reconstruction_loss:.3f} kl {epoch_kl_loss:.3f} {val_str}{elapsed_time}')\n", "\n", " self.epoch += 1\n", "\n", " if run_folder != None:\n", " self.save(run_folder)\n", " self.save_weights(run_folder, self.epoch-1)\n", "\n", " dic = { 'loss' : total_losses, 'reconstruction_loss' : reconstruction_losses, 'kl_loss' : kl_losses }\n", " if not validation_data_flow is None:\n", " dic['val_loss'] = val_total_losses\n", " dic['val_reconstruction_loss'] = val_reconstruction_losses\n", " dic['val_kl_loss'] = val_kl_losses\n", "\n", " return dic\n", "\n", "\n", " @staticmethod\n", " def showImages(imgs1, imgs2, txts, w, h, vskip=0.5, filepath=None):\n", " n = len(imgs1)\n", " fig, ax = plt.subplots(2, n, figsize=(w * n, (2+vskip) * h))\n", " for i in range(n):\n", " if n == 1:\n", " axis = ax[0]\n", " else:\n", " axis = ax[0][i]\n", " img = imgs1[i].squeeze()\n", " axis.imshow(img, cmap='gray_r')\n", " axis.axis('off')\n", "\n", " axis.text(0.5, -0.35, txts[i], fontsize=10, ha='center', transform=axis.transAxes)\n", "\n", " if n == 1:\n", " axis = ax[1]\n", " else:\n", " axis = ax[1][i]\n", " img2 = imgs2[i].squeeze()\n", " axis.imshow(img2, cmap='gray_r')\n", " axis.axis('off')\n", "\n", " if not filepath is None:\n", " dpath, fname = os.path.split(filepath)\n", " if dpath != '' and not os.path.exists(dpath):\n", " os.makedirs(dpath)\n", " fig.savefig(filepath, dpi=600)\n", " plt.close()\n", " else:\n", " plt.show()\n", "\n", " @staticmethod\n", " def plot_history(vals, labels):\n", " colors = ['red', 'blue', 'green', 'orange', 'black', 'pink']\n", " n = len(vals)\n", " fig, ax = plt.subplots(1, 1, figsize=(9,4))\n", " for i in range(n):\n", " ax.plot(vals[i], c=colors[i], label=labels[i])\n", " ax.legend(loc='upper right')\n", " ax.set_xlabel('epochs')\n", " # ax[0].set_ylabel('loss')\n", " \n", " plt.show()\n" ] } ], "source": [ "! cat {nw_path}/VariationalAutoEncoder.py" ] }, { "cell_type": "markdown", "metadata": { "id": "SNfyIR9QI5_4" }, "source": [ "# Preparing MNIST dataset\n", "\n", "## MNIST データセットを用意する" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 10, "status": "ok", "timestamp": 1637563725538, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "DC4vMhj2Iuyz", "outputId": "1e8a05eb-d320-4163-8dfa-e6e2ed4c1c0e" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.7.0\n" ] } ], "source": [ "%tensorflow_version 2.x\n", "\n", "import tensorflow as tf\n", "import numpy as np\n", "\n", "print(tf.__version__)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 498, "status": "ok", "timestamp": 1637563726032, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "heEbOdPrI_RR", "outputId": "b7db5f01-541e-4036-a6af-571d653e3e63" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(60000, 28, 28)\n", "(60000,)\n", "(10000, 28, 28)\n", "(10000,)\n" ] } ], "source": [ "# prepare data\n", "(x_train_raw, y_train_raw), (x_test_raw, y_test_raw) = tf.keras.datasets.mnist.load_data()\n", "print(x_train_raw.shape)\n", "print(y_train_raw.shape)\n", "print(x_test_raw.shape)\n", "print(y_test_raw.shape)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 2, "status": "ok", "timestamp": 1637563726032, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "7EVHviWiJOPd", "outputId": "045a4273-e63b-4807-ace5-e72bc45642be" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(60000, 28, 28, 1)\n", "(10000, 28, 28, 1)\n" ] } ], "source": [ "x_train = x_train_raw.reshape(x_train_raw.shape+(1,)).astype('float32') / 255.0\n", "x_test = x_test_raw.reshape(x_test_raw.shape+(1,)).astype('float32') / 255.0\n", "print(x_train.shape)\n", "print(x_test.shape)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 0 }, "executionInfo": { "elapsed": 631, "status": "ok", "timestamp": 1637563726661, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "CixL5omGJkAj", "outputId": "1ba5e3de-3dbf-4e50-d094-30424c0a17b2" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABigAAACSCAYAAADfGkI9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debiVZbk/8LUZHAgsBcT5mCMpagEqTgSSCHY8SiBUVpqUiqKCBxVQSUEglSzAHAA14ZioBQ6pqSWOxwpT0FTK9DKRxMCBMURjnz9+v3Ou6133A3ux2Ptde/h8/ru/POtdtxePa3pY666qrq4uAAAAAAAA5KlZpRsAAAAAAACaHgcUAAAAAABA7hxQAAAAAAAAuXNAAQAAAAAA5M4BBQAAAAAAkLsWm/rDqqqq6rwaoWGorq6uyuN+7D2K2XtUir1Hpdh7VIq9R6XYe1RKHnvPvqOYxzwqxd6jUja293yDAgAAAAAAyJ0DCgAAAAAAIHcOKAAAAAAAgNw5oAAAAAAAAHLngAIAAAAAAMidAwoAAAAAACB3DigAAAAAAIDcOaAAAAAAAABy16LSDQAAQH105ZVXhmzMmDEhGz16dKaeOHFinfUEAADQmPgGBQAAAAAAkDsHFAAAAAAAQO4cUAAAAAAAALlzQAEAAAAAAOSuqrq6euN/WFW18T+kSaqurq7K437sPYrZe1SKvUel2Hv5OuWUU0J2++23h2ybbbYJ2bPPPpupjznmmNprrALsPSrF3qNS8th79h3FPObVT23atAnZ0KFDM3WvXr3CmhNOOCFk69evr73GapG9R6VsbO/5BgUAAAAAAJA7BxQAAAAAAEDuHFAAAAAAAAC5c0ABAAAAAADkrkWlG2gImjdvHrJhw4aFbNKkSSHb1BDy/7VmzZqQPfLIIyH7yU9+kqmfeeaZGq9N47PbbruFbPHixTXebrvttgvZqlWraqUnGr4DDjggU6ce4773ve+FrKoqzjeaM2dOpu7fv/8WdgdQ+3beeedMPW7cuLAmNRD7L3/5S8jOO++82msMtsC2224bsm7duoUs9b6lY8eOmfq4444La/77v/97C7oDgPqlT58+IbvoootC1rNnzxqvNWHChJCNGDGivMagifENCgAAAAAAIHcOKAAAAAAAgNw5oAAAAAAAAHLngAIAAAAAAMidIdkJ++yzT6a+7bbbwpojjzwyZKmB2MXZxx9/HNaksl69eoWsS5cum6wLhULhgw8+CBmNXynD2GFTigdgDx48OKwp5TGuUCgUTj755Ew9cuTIsOaHP/zh5rYIULYWLeJL3pkzZ2bq/fbbr6RrpYYLL1iwoLzGYDOk9vFXvvKVTD158uSwZt999w3ZkiVLQnbzzTdn6vXr129ui9Rzxx9/fKb+8pe/HNb07t07ZJ07dw7Z3Xffnan/8pe/hDWpPbto0aKQ/dd//Vem3rBhQ1hD09OsWfz3tHPmzMnUzz77bFhz7bXX1llPNGzt27cP2cSJE0N2yCGH1Hit119/PWRTp04trzHANygAAAAAAID8OaAAAAAAAABy54ACAAAAAADIXZOfQbHnnnuGbP78+Zl6u+22K+laqd9inz17dqa+8sorw5rU73V27NgxZK+88kqmvuWWW8Kafv361dgn0LRNmDAhZOeee26d3d/BBx8cstRvEn/66ad11gPQtB177LEhS837Kvbwww+HbMaMGbXSE2zKDjvsELJzzjknZGPHji3r+vPmzQvZmDFjMvXq1avLujaladmyZcjatWsXsr333jtTDxw4MKx56aWXQrbzzjuHrHjm2JQpU8KaP/3pTyFLrXv11Vcz9S677BLWXHrppSE7++yzQ/aZz3wmU994441hDU3PHnvsEbITTzwxU6dmUMD/Kn5MnTVrVliTmjeRmsG0cOHCTP3II4+ENX/72982t0UaqSuuuCJTb7XVVmFN8XNfoVAofOtb3wrZTTfdlKnfeeedsOZnP/tZyP75z3/W0GX94hsUAAAAAABA7hxQAAAAAAAAuXNAAQAAAAAA5M4BBQAAAAAAkLsmNSR76623DtncuXNDVspQ7DVr1oRs9OjRIbv++utL7C7r7bffDlnxILLUEDUavyFDhpR1u9SQseLB6zQ+u+++e8j+8z//M2SpodXFUo9LqX1VbNCgQSX1ddFFF4Xsd7/7XY3Xp/a0b98+ZKX8HX//+98v6fpnnnlmyObMmZOp77333rDm6aefDpkhdGxMauBcaihisXfffTdk5b6Ogy2Vek685JJLQlY8yDr1eLnNNtuELDWE8Q9/+EOmtv/r1llnnRWy1DDq4mGYL774YliTyh599NGQjRs3bnNa3GL3339/yDp16hSy008/PYdu2BK33npryJ577rmQ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6xay1JC4UtSXv/PioWKlDnH64x//GLKrr746U9f1QGyiZcuWhaxv376ZOjUk++STTw5Zahh1XZowYULIJk2alGsPxCHPqYHYqSGGQ4cODdmIESMydSnPmxtTPETvqquuCmtSQzU/+OCDsu+zFMXD5FOD3VNDTqk93/ve90JW/D4itV/qgz59+oRs6623Dtkbb7yRRztspmuvvbakLG+px73x48dn6l122SWsST2G/uY3vwnZO++8swXdsTluu+22kC1dujRkO+20U6ZOPRcdddRRZfWQGrq+3377hSz12uCvf/1rpt5///1Lus/WrVuX2B2V9tnPfjZTlzoQu/gxqVCIj58rV64Max577LGQ9erVK2Sl7PfUQO/U8/KHH35Y47WIVq1aFbLiz9VmzpwZ1rz22mshS32uVpc++eSTkM2ePTtkqc+799xzz0ydeh5Nvb9K7e1KDMUulW9QAAAAAAAAuXNAAQAAAAAA5M4BBQAAAAAAkDsHFAAAAAAAQO6qNjUYpKqqKt+pISU699xzQzZlypQabzd27NiQjRkzpsbbLV++PGTf/va3Q/biiy/WeP1zzjknrEkNhj3ssMNq7KsSqqurq2peteXq694rV+rvMzWwpk2bNjVea8mSJSErZbB7Q9dY915q0OmMGTNKum3xcK3UAK7nn3++vMa2QPEwzrVr14Y1L7zwQsh69+4dsvowQKyx7r2moGPHjiGbP39+yBYtWhSyQw89tE562hyNZe8Vv9ZMvfa86aabQpZ6zTR37txMfdJJJ5XUQ+r13g033JCpU0Nge/bsGbLUcOG33367pD6KdevWLWTTp0/P1AceeGBYkxryeOONN4Zs1KhRZfXVWPZeKYqHcRYKhcKf//znkL333nuZOvWc++6779ZeYyXaddddM/X9998f1ixbtixkqf7rg6a095qCp59+OmTnnXdeyBYsWJBHO5uUx96z7/6fDh06hOz1118PWWr/fPWrX62TnirFY17085//PFN//etfL+l222yzTchSg9aLtWrVKmRDhgwJWfHA7VLts88+IXvzzTfLulZtaqx773Of+1zIUp/fHnHEESHbe++9M/Vuu+1W0n1OnTo1ZGvWrMnUzz33XFhT6mc1d999d6bu379/WPOLX/wiZIMGDSrp+nnb2N7zDQoAAAAAACB3DigAAAAAAIDcOaAAAAAAAABy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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "N = 10\n", "selected_indices = np.random.choice(x_train_raw.shape[0], N)\n", "\n", "fig, ax = plt.subplots(1, N, figsize=(2.8 * N, 2.8))\n", "for i in range(N):\n", " ax[i].imshow(x_train_raw[selected_indices[i]],cmap='gray')\n", " ax[i].axis('off')\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": { "id": "jUic65mHLHWy" }, "source": [ "# Definition of Neural Network Model\n", "\n", "Use the VariationalAutoEndoer class downloaded from nw.tsuda.ac.jp.\n", "\n", "## ニューラルネットワーク・モデルを定義する\n", "\n", "nw.tsuda.ac.jp からダウンロードした VariationalAutoEncoder クラスを使う。" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "executionInfo": { "elapsed": 482, "status": "ok", "timestamp": 1637563727141, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "TUbhNFJBKOAE" }, "outputs": [], "source": [ "from nw.VariationalAutoEncoder import VariationalAutoEncoder\n", "\n", "vae = VariationalAutoEncoder(\n", " input_dim = (28, 28, 1),\n", " encoder_conv_filters = [32, 64, 64, 64],\n", " encoder_conv_kernel_size = [3, 3, 3, 3],\n", " encoder_conv_strides = [1, 2, 2, 1],\n", " decoder_conv_t_filters = [64, 64, 32, 1],\n", " decoder_conv_t_kernel_size = [3, 3, 3, 3],\n", " decoder_conv_t_strides = [1, 2, 2, 1],\n", " z_dim = 2,\n", " r_loss_factor = 1000 \n", ")" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1637563727141, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "YsXYBsbYLk1L", "outputId": "0fb9d4e0-a593-485e-c0fd-2653f32ea7cf" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"encoder\"\n", "__________________________________________________________________________________________________\n", " Layer (type) Output Shape Param # Connected to \n", "==================================================================================================\n", " encoder_input (InputLayer) [(None, 28, 28, 1)] 0 [] \n", " \n", " encoder_conv_0 (Conv2D) (None, 28, 28, 32) 320 ['encoder_input[0][0]'] \n", " \n", " leaky_re_lu (LeakyReLU) (None, 28, 28, 32) 0 ['encoder_conv_0[0][0]'] \n", " \n", " encoder_conv_1 (Conv2D) (None, 14, 14, 64) 18496 ['leaky_re_lu[0][0]'] \n", " \n", " leaky_re_lu_1 (LeakyReLU) (None, 14, 14, 64) 0 ['encoder_conv_1[0][0]'] \n", " \n", " encoder_conv_2 (Conv2D) (None, 7, 7, 64) 36928 ['leaky_re_lu_1[0][0]'] \n", " \n", " leaky_re_lu_2 (LeakyReLU) (None, 7, 7, 64) 0 ['encoder_conv_2[0][0]'] \n", " \n", " encoder_conv_3 (Conv2D) (None, 7, 7, 64) 36928 ['leaky_re_lu_2[0][0]'] \n", " \n", " leaky_re_lu_3 (LeakyReLU) (None, 7, 7, 64) 0 ['encoder_conv_3[0][0]'] \n", " \n", " flatten (Flatten) (None, 3136) 0 ['leaky_re_lu_3[0][0]'] \n", " \n", " mu (Dense) (None, 2) 6274 ['flatten[0][0]'] \n", " \n", " log_var (Dense) (None, 2) 6274 ['flatten[0][0]'] \n", " \n", " encoder_output (Sampling) (None, 2) 0 ['mu[0][0]', \n", " 'log_var[0][0]'] \n", " \n", "==================================================================================================\n", "Total params: 105,220\n", "Trainable params: 105,220\n", "Non-trainable params: 0\n", "__________________________________________________________________________________________________\n" ] } ], "source": [ "vae.encoder.summary()" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637563727142, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "sy2l0mp_MPws", "outputId": "f0688d26-94f2-4d1d-ebf2-72455f921711" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Model: \"decoder\"\n", "_________________________________________________________________\n", " Layer (type) Output Shape Param # \n", "=================================================================\n", " decoder_input (InputLayer) [(None, 2)] 0 \n", " \n", " dense (Dense) (None, 3136) 9408 \n", " \n", " reshape (Reshape) (None, 7, 7, 64) 0 \n", " \n", " decoder_conv_t_0 (Conv2DTra (None, 7, 7, 64) 36928 \n", " nspose) \n", " \n", " leaky_re_lu_4 (LeakyReLU) (None, 7, 7, 64) 0 \n", " \n", " decoder_conv_t_1 (Conv2DTra (None, 14, 14, 64) 36928 \n", " nspose) \n", " \n", " leaky_re_lu_5 (LeakyReLU) (None, 14, 14, 64) 0 \n", " \n", " decoder_conv_t_2 (Conv2DTra (None, 28, 28, 32) 18464 \n", " nspose) \n", " \n", " leaky_re_lu_6 (LeakyReLU) (None, 28, 28, 32) 0 \n", " \n", " decoder_conv_t_3 (Conv2DTra (None, 28, 28, 1) 289 \n", " nspose) \n", " \n", " activation (Activation) (None, 28, 28, 1) 0 \n", " \n", "=================================================================\n", "Total params: 102,017\n", "Trainable params: 102,017\n", "Non-trainable params: 0\n", "_________________________________________________________________\n" ] } ], "source": [ "vae.decoder.summary()" ] }, { "cell_type": "markdown", "metadata": { "id": "AszctkdHNRUz" }, "source": [ "# Training\n", "\n", "Train in 3 ways.\n", "\n", "\n", "[Caution] \n", "Note that if you call the save_image() function in the Training (2), (3) below, encoder.predict() and decoder.predict() will work and the execution will be slow.\n", "\n", "\n", "\n", "## 学習する\n", "\n", "3通りで学習する。\n", "\n", "\n", "[注意] \n", "以下の学習 (2), (3) の途中で save_images()関数を呼び出すと、 encoder.predict()decoder.predict() が動作して、実行が非常に遅くなるので注意すること。" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637563727142, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "d0glYuPg4Wkw" }, "outputs": [], "source": [ "MAX_EPOCHS = 200" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1637563727142, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "rH2UJkp7NbqI" }, "outputs": [], "source": [ "learning_rate = 0.0005" ] }, { "cell_type": "markdown", "metadata": { "id": "Z8WlNJjKNhxp" }, "source": [ "# (1) Training: Use vae.model.fit()\n", "\n", "Note that the loss function is not specified at the call of vae.model.compile() function.\n", "Since it cannot be calculated simply using y_true and y_pred, the train_step() function of the VAEModel class called from fit() is used to find loss and gradients and train them.\n", "The self.optimizer of the VAEModel class referenced in the train_step() function is the optimizer given by the compile() function.\n", "\n", "\n", "## (1) 学習する: vae.model.fit() を使う\n", "\n", "vae.model.compile() 関数の呼び出しにおいて、loss関数を指定しないことに注意が必要である。\n", " y_truey_pred を使って単純に計算できないので、fit() から呼び出される\n", " VAEModel クラスの\n", " train_step() 関数でlossとgradientsを求めて、trainingする。\n", " train_step() 関数の中で参照される VAEModel クラスの self.optimizercompile() 関数で与えられた optimizer である。" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637563727143, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "qQNQF-owNJ5-" }, "outputs": [], "source": [ "import os\n", "save_path1 = '/content/drive/MyDrive/ColabRun/VAE01'" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637563727143, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "HK28lG6uN5n_" }, "outputs": [], "source": [ "optimizer = tf.keras.optimizers.Adam(learning_rate = learning_rate)\n", "vae.model.compile(optimizer=optimizer)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 44883, "status": "ok", "timestamp": 1637563772022, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "OswfPwvuON0P", "outputId": "e0768a89-1bb7-42da-e68a-b333f16f5422" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/3\n", "1875/1875 [==============================] - 12s 5ms/step - loss: 58.4073 - reconstruction_loss: 55.1287 - kl_loss: 3.2786\n", "Epoch 2/3\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 51.5705 - reconstruction_loss: 47.5608 - kl_loss: 4.0097\n", "Epoch 3/3\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 50.0829 - reconstruction_loss: 45.7901 - kl_loss: 4.2928\n" ] } ], "source": [ "# まず、少ない回数 training してみる\n", "\n", "history = vae.train_with_fit(\n", " x_train,\n", " batch_size = 32,\n", " epochs = 3,\n", " run_folder = save_path1\n", ")" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 17, "status": "ok", "timestamp": 1637563772023, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "UjdIMbS0PJ-I", "outputId": "af8039c4-0897-44ea-9d1f-02d9e3ab8d04" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'loss': [55.75687789916992, 51.232696533203125, 51.035667419433594], 'reconstruction_loss': [51.87708282470703, 46.880558013916016, 46.8510856628418], 'kl_loss': [3.879793643951416, 4.352138042449951, 4.184581756591797]}\n" ] } ], "source": [ "print(history.history)" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 14, "status": "ok", "timestamp": 1637563772023, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "h-vlig2eRU2J", "outputId": "da50bcaa-cf42-4d26-c535-ea6e36379a0c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['loss', 'reconstruction_loss', 'kl_loss'])\n" ] } ], "source": [ "print(history.history.keys())" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1637563772023, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "NorTgj_-ltan" }, "outputs": [], "source": [ "#tmp = history.history['loss']\n", "\n", "#print(len(tmp))\n", "#print(len(tmp[0]))" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637563772024, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "OnoT63VoTAIo" }, "outputs": [], "source": [ "loss1_1 = history.history['loss']\n", "rloss1_1 = history.history['reconstruction_loss']\n", "kloss1_1 = history.history['kl_loss']" ] }, { "cell_type": "markdown", "metadata": { "id": "71zArdKnVNdP" }, "source": [ "# Training in addition\n", "\n", "Load the saved parameters and model weights, and try training further.\n", "\n", "## 追加の学習\n", "\n", "保存してあるパラメータと、モデルの重みを読み込んで、さらにtraining してみる。" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637563772024, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "CTpIo8LhTA9m", "outputId": "85ce5050-82bd-40a8-9c2f-d94c7e536867" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "# Load the saved parameters and weights.\n", "# 保存してある学習結果をロードする。\n", "\n", "vae_work = VariationalAutoEncoder.load(save_path1)\n", "\n", "# Display the epoch count of the model.\n", "# training のepoch回数を表示する。\n", "\n", "print(vae_work.epoch)\n" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 1944921, "status": "ok", "timestamp": 1637565716935, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "T1WbFztcTJym", "outputId": "c5cfbaf2-98aa-4ebd-b03a-b7821d56169f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 4/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 49.8648 - reconstruction_loss: 45.5221 - kl_loss: 4.3427\n", "Epoch 5/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 48.5465 - reconstruction_loss: 43.9828 - kl_loss: 4.5637\n", "Epoch 6/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 48.0179 - reconstruction_loss: 43.3728 - kl_loss: 4.6451\n", "Epoch 7/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 47.6538 - reconstruction_loss: 42.9425 - kl_loss: 4.7113\n", "Epoch 8/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 47.3654 - reconstruction_loss: 42.6093 - kl_loss: 4.7561\n", "Epoch 9/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 47.0985 - reconstruction_loss: 42.2911 - kl_loss: 4.8074\n", "Epoch 10/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 46.9123 - reconstruction_loss: 42.0577 - kl_loss: 4.8546\n", "Epoch 11/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 46.7336 - reconstruction_loss: 41.8435 - kl_loss: 4.8901\n", "Epoch 12/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 46.5381 - reconstruction_loss: 41.6378 - kl_loss: 4.9003\n", "Epoch 13/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 46.3920 - reconstruction_loss: 41.4584 - kl_loss: 4.9336\n", "Epoch 14/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 46.2554 - reconstruction_loss: 41.2922 - kl_loss: 4.9632\n", "Epoch 15/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 46.1605 - reconstruction_loss: 41.1937 - kl_loss: 4.9669\n", "Epoch 16/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 46.0637 - reconstruction_loss: 41.0784 - kl_loss: 4.9853\n", "Epoch 17/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.9436 - reconstruction_loss: 40.9368 - kl_loss: 5.0069\n", "Epoch 18/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.8828 - reconstruction_loss: 40.8677 - kl_loss: 5.0151\n", "Epoch 19/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.8291 - reconstruction_loss: 40.8016 - kl_loss: 5.0275\n", "Epoch 20/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.7408 - reconstruction_loss: 40.6919 - kl_loss: 5.0488\n", "Epoch 21/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.6722 - reconstruction_loss: 40.6060 - kl_loss: 5.0662\n", "Epoch 22/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.6056 - reconstruction_loss: 40.5360 - kl_loss: 5.0696\n", "Epoch 23/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.5273 - reconstruction_loss: 40.4394 - kl_loss: 5.0879\n", "Epoch 24/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.4996 - reconstruction_loss: 40.4220 - kl_loss: 5.0776\n", "Epoch 25/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.4448 - reconstruction_loss: 40.3568 - kl_loss: 5.0881\n", "Epoch 26/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.3665 - reconstruction_loss: 40.2728 - kl_loss: 5.0937\n", "Epoch 27/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.3241 - reconstruction_loss: 40.2183 - kl_loss: 5.1058\n", "Epoch 28/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.2551 - reconstruction_loss: 40.1323 - kl_loss: 5.1228\n", "Epoch 29/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.2791 - reconstruction_loss: 40.1603 - kl_loss: 5.1188\n", "Epoch 30/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.2380 - reconstruction_loss: 40.1018 - kl_loss: 5.1362\n", "Epoch 31/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.1768 - reconstruction_loss: 40.0453 - kl_loss: 5.1314\n", "Epoch 32/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.1080 - reconstruction_loss: 39.9605 - kl_loss: 5.1475\n", "Epoch 33/200\n", "1875/1875 [==============================] - 9s 5ms/step - loss: 45.0962 - reconstruction_loss: 39.9452 - kl_loss: 5.1510\n", "Epoch 34/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.0500 - reconstruction_loss: 39.8972 - kl_loss: 5.1528\n", "Epoch 35/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 45.0309 - reconstruction_loss: 39.8673 - kl_loss: 5.1636\n", "Epoch 36/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.9416 - reconstruction_loss: 39.7782 - kl_loss: 5.1634\n", "Epoch 37/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.9534 - reconstruction_loss: 39.7739 - kl_loss: 5.1795\n", "Epoch 38/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.9226 - reconstruction_loss: 39.7362 - kl_loss: 5.1864\n", "Epoch 39/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.8763 - reconstruction_loss: 39.6899 - kl_loss: 5.1863\n", "Epoch 40/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.8352 - reconstruction_loss: 39.6541 - kl_loss: 5.1811\n", "Epoch 41/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.8205 - reconstruction_loss: 39.6282 - kl_loss: 5.1923\n", "Epoch 42/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.8063 - reconstruction_loss: 39.6155 - kl_loss: 5.1908\n", "Epoch 43/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.7581 - reconstruction_loss: 39.5525 - kl_loss: 5.2056\n", "Epoch 44/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.7326 - reconstruction_loss: 39.5335 - kl_loss: 5.1991\n", "Epoch 45/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.7131 - reconstruction_loss: 39.5036 - kl_loss: 5.2095\n", "Epoch 46/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.7038 - reconstruction_loss: 39.4889 - kl_loss: 5.2149\n", "Epoch 47/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.6709 - reconstruction_loss: 39.4595 - kl_loss: 5.2114\n", "Epoch 48/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.6338 - reconstruction_loss: 39.4122 - kl_loss: 5.2215\n", "Epoch 49/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.6278 - reconstruction_loss: 39.3961 - kl_loss: 5.2317\n", "Epoch 50/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.5628 - reconstruction_loss: 39.3371 - kl_loss: 5.2257\n", "Epoch 51/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.5658 - reconstruction_loss: 39.3284 - kl_loss: 5.2374\n", "Epoch 52/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.5387 - reconstruction_loss: 39.3153 - kl_loss: 5.2234\n", "Epoch 53/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.5424 - reconstruction_loss: 39.3081 - kl_loss: 5.2343\n", "Epoch 54/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.5090 - reconstruction_loss: 39.2641 - kl_loss: 5.2449\n", "Epoch 55/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.4785 - reconstruction_loss: 39.2307 - kl_loss: 5.2478\n", "Epoch 56/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.4971 - reconstruction_loss: 39.2465 - kl_loss: 5.2506\n", "Epoch 57/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.4685 - reconstruction_loss: 39.2069 - kl_loss: 5.2615\n", "Epoch 58/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.4501 - reconstruction_loss: 39.1884 - kl_loss: 5.2617\n", "Epoch 59/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.4471 - reconstruction_loss: 39.1896 - kl_loss: 5.2575\n", "Epoch 60/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3876 - reconstruction_loss: 39.1207 - kl_loss: 5.2668\n", "Epoch 61/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3903 - reconstruction_loss: 39.1179 - kl_loss: 5.2725\n", "Epoch 62/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3935 - reconstruction_loss: 39.1193 - kl_loss: 5.2742\n", "Epoch 63/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3373 - reconstruction_loss: 39.0673 - kl_loss: 5.2700\n", "Epoch 64/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3494 - reconstruction_loss: 39.0656 - kl_loss: 5.2839\n", "Epoch 65/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3091 - reconstruction_loss: 39.0228 - kl_loss: 5.2863\n", "Epoch 66/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.3122 - reconstruction_loss: 39.0293 - kl_loss: 5.2829\n", "Epoch 67/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2802 - reconstruction_loss: 38.9922 - kl_loss: 5.2880\n", "Epoch 68/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2590 - reconstruction_loss: 38.9656 - kl_loss: 5.2934\n", "Epoch 69/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2646 - reconstruction_loss: 38.9654 - kl_loss: 5.2991\n", "Epoch 70/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2537 - reconstruction_loss: 38.9552 - kl_loss: 5.2984\n", "Epoch 71/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2393 - reconstruction_loss: 38.9393 - kl_loss: 5.3000\n", "Epoch 72/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2087 - reconstruction_loss: 38.8998 - kl_loss: 5.3089\n", "Epoch 73/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.2166 - reconstruction_loss: 38.9082 - kl_loss: 5.3084\n", "Epoch 74/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1914 - reconstruction_loss: 38.8846 - kl_loss: 5.3068\n", "Epoch 75/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1735 - reconstruction_loss: 38.8549 - kl_loss: 5.3186\n", "Epoch 76/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1274 - reconstruction_loss: 38.8187 - kl_loss: 5.3087\n", "Epoch 77/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1572 - reconstruction_loss: 38.8292 - kl_loss: 5.3280\n", "Epoch 78/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1401 - reconstruction_loss: 38.8232 - kl_loss: 5.3169\n", "Epoch 79/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0833 - reconstruction_loss: 38.7594 - kl_loss: 5.3238\n", "Epoch 80/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1309 - reconstruction_loss: 38.8012 - kl_loss: 5.3298\n", "Epoch 81/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1047 - reconstruction_loss: 38.7807 - kl_loss: 5.3239\n", "Epoch 82/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.1123 - reconstruction_loss: 38.7756 - kl_loss: 5.3367\n", "Epoch 83/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0822 - reconstruction_loss: 38.7454 - kl_loss: 5.3368\n", "Epoch 84/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0395 - reconstruction_loss: 38.7090 - kl_loss: 5.3305\n", "Epoch 85/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0405 - reconstruction_loss: 38.6956 - kl_loss: 5.3449\n", "Epoch 86/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0354 - reconstruction_loss: 38.6995 - kl_loss: 5.3359\n", "Epoch 87/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 44.0608 - reconstruction_loss: 38.7157 - kl_loss: 5.3451\n", "Epoch 88/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9911 - reconstruction_loss: 38.6527 - kl_loss: 5.3384\n", "Epoch 89/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9644 - reconstruction_loss: 38.6286 - kl_loss: 5.3357\n", "Epoch 90/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9787 - reconstruction_loss: 38.6390 - kl_loss: 5.3397\n", "Epoch 91/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9799 - reconstruction_loss: 38.6322 - kl_loss: 5.3477\n", "Epoch 92/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9351 - reconstruction_loss: 38.6002 - kl_loss: 5.3349\n", "Epoch 93/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9710 - reconstruction_loss: 38.6108 - kl_loss: 5.3603\n", "Epoch 94/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9590 - reconstruction_loss: 38.6000 - kl_loss: 5.3590\n", "Epoch 95/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9179 - reconstruction_loss: 38.5682 - kl_loss: 5.3496\n", "Epoch 96/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9087 - reconstruction_loss: 38.5479 - kl_loss: 5.3607\n", "Epoch 97/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9272 - reconstruction_loss: 38.5629 - kl_loss: 5.3643\n", "Epoch 98/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.9077 - reconstruction_loss: 38.5376 - kl_loss: 5.3701\n", "Epoch 99/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8838 - reconstruction_loss: 38.5157 - kl_loss: 5.3681\n", "Epoch 100/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8887 - reconstruction_loss: 38.5192 - kl_loss: 5.3695\n", "Epoch 101/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8478 - reconstruction_loss: 38.4825 - kl_loss: 5.3653\n", "Epoch 102/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8872 - reconstruction_loss: 38.5031 - kl_loss: 5.3841\n", "Epoch 103/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8766 - reconstruction_loss: 38.5091 - kl_loss: 5.3675\n", "Epoch 104/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8377 - reconstruction_loss: 38.4672 - kl_loss: 5.3705\n", "Epoch 105/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8313 - reconstruction_loss: 38.4539 - kl_loss: 5.3774\n", "Epoch 106/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8531 - reconstruction_loss: 38.4668 - kl_loss: 5.3864\n", "Epoch 107/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7781 - reconstruction_loss: 38.4015 - kl_loss: 5.3765\n", "Epoch 108/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8223 - reconstruction_loss: 38.4458 - kl_loss: 5.3765\n", "Epoch 109/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7960 - reconstruction_loss: 38.4115 - kl_loss: 5.3844\n", "Epoch 110/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8019 - reconstruction_loss: 38.4035 - kl_loss: 5.3984\n", "Epoch 111/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8003 - reconstruction_loss: 38.4065 - kl_loss: 5.3938\n", "Epoch 112/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.8260 - reconstruction_loss: 38.4250 - kl_loss: 5.4010\n", "Epoch 113/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7902 - reconstruction_loss: 38.3985 - kl_loss: 5.3918\n", "Epoch 114/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7565 - reconstruction_loss: 38.3619 - kl_loss: 5.3946\n", "Epoch 115/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7997 - reconstruction_loss: 38.4051 - kl_loss: 5.3946\n", "Epoch 116/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7543 - reconstruction_loss: 38.3572 - kl_loss: 5.3971\n", "Epoch 117/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7634 - reconstruction_loss: 38.3714 - kl_loss: 5.3920\n", "Epoch 118/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7563 - reconstruction_loss: 38.3530 - kl_loss: 5.4033\n", "Epoch 119/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7339 - reconstruction_loss: 38.3282 - kl_loss: 5.4057\n", "Epoch 120/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7077 - reconstruction_loss: 38.3175 - kl_loss: 5.3902\n", "Epoch 121/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6943 - reconstruction_loss: 38.2902 - kl_loss: 5.4041\n", "Epoch 122/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6897 - reconstruction_loss: 38.2903 - kl_loss: 5.3994\n", "Epoch 123/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.7193 - reconstruction_loss: 38.3132 - kl_loss: 5.4060\n", "Epoch 124/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6935 - reconstruction_loss: 38.2936 - kl_loss: 5.3999\n", "Epoch 125/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6781 - reconstruction_loss: 38.2736 - kl_loss: 5.4045\n", "Epoch 126/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6816 - reconstruction_loss: 38.2680 - kl_loss: 5.4135\n", "Epoch 127/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6638 - reconstruction_loss: 38.2497 - kl_loss: 5.4141\n", "Epoch 128/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6708 - reconstruction_loss: 38.2588 - kl_loss: 5.4120\n", "Epoch 129/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6649 - reconstruction_loss: 38.2518 - kl_loss: 5.4131\n", "Epoch 130/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6477 - reconstruction_loss: 38.2364 - kl_loss: 5.4113\n", "Epoch 131/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6556 - reconstruction_loss: 38.2362 - kl_loss: 5.4194\n", "Epoch 132/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6382 - reconstruction_loss: 38.2113 - kl_loss: 5.4269\n", "Epoch 133/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6294 - reconstruction_loss: 38.2070 - kl_loss: 5.4224\n", "Epoch 134/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6449 - reconstruction_loss: 38.2194 - kl_loss: 5.4255\n", "Epoch 135/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6073 - reconstruction_loss: 38.1852 - kl_loss: 5.4221\n", "Epoch 136/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6422 - reconstruction_loss: 38.2164 - kl_loss: 5.4259\n", "Epoch 137/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5685 - reconstruction_loss: 38.1501 - kl_loss: 5.4184\n", "Epoch 138/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.6314 - reconstruction_loss: 38.1939 - kl_loss: 5.4375\n", "Epoch 139/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5616 - reconstruction_loss: 38.1262 - kl_loss: 5.4354\n", "Epoch 140/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5970 - reconstruction_loss: 38.1678 - kl_loss: 5.4292\n", "Epoch 141/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5744 - reconstruction_loss: 38.1391 - kl_loss: 5.4353\n", "Epoch 142/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5831 - reconstruction_loss: 38.1496 - kl_loss: 5.4335\n", "Epoch 143/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5867 - reconstruction_loss: 38.1375 - kl_loss: 5.4491\n", "Epoch 144/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5403 - reconstruction_loss: 38.1161 - kl_loss: 5.4242\n", "Epoch 145/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5645 - reconstruction_loss: 38.1276 - kl_loss: 5.4369\n", "Epoch 146/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5185 - reconstruction_loss: 38.0682 - kl_loss: 5.4503\n", "Epoch 147/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4965 - reconstruction_loss: 38.0613 - kl_loss: 5.4352\n", "Epoch 148/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5425 - reconstruction_loss: 38.1036 - kl_loss: 5.4389\n", "Epoch 149/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5263 - reconstruction_loss: 38.0834 - kl_loss: 5.4429\n", "Epoch 150/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5132 - reconstruction_loss: 38.0750 - kl_loss: 5.4382\n", "Epoch 151/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5202 - reconstruction_loss: 38.0786 - kl_loss: 5.4417\n", "Epoch 152/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4944 - reconstruction_loss: 38.0514 - kl_loss: 5.4430\n", "Epoch 153/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5075 - reconstruction_loss: 38.0543 - kl_loss: 5.4532\n", "Epoch 154/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5126 - reconstruction_loss: 38.0520 - kl_loss: 5.4607\n", "Epoch 155/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4627 - reconstruction_loss: 38.0185 - kl_loss: 5.4442\n", "Epoch 156/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.5065 - reconstruction_loss: 38.0551 - kl_loss: 5.4514\n", "Epoch 157/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4705 - reconstruction_loss: 38.0114 - kl_loss: 5.4592\n", "Epoch 158/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4364 - reconstruction_loss: 37.9941 - kl_loss: 5.4423\n", "Epoch 159/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4576 - reconstruction_loss: 37.9981 - kl_loss: 5.4595\n", "Epoch 160/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4462 - reconstruction_loss: 37.9900 - kl_loss: 5.4562\n", "Epoch 161/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4607 - reconstruction_loss: 37.9980 - kl_loss: 5.4627\n", "Epoch 162/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4572 - reconstruction_loss: 37.9871 - kl_loss: 5.4701\n", "Epoch 163/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3995 - reconstruction_loss: 37.9471 - kl_loss: 5.4524\n", "Epoch 164/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4320 - reconstruction_loss: 37.9754 - kl_loss: 5.4566\n", "Epoch 165/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4454 - reconstruction_loss: 37.9726 - kl_loss: 5.4728\n", "Epoch 166/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4450 - reconstruction_loss: 37.9800 - kl_loss: 5.4650\n", "Epoch 167/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4163 - reconstruction_loss: 37.9532 - kl_loss: 5.4632\n", "Epoch 168/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4117 - reconstruction_loss: 37.9390 - kl_loss: 5.4726\n", "Epoch 169/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4307 - reconstruction_loss: 37.9576 - kl_loss: 5.4731\n", "Epoch 170/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4182 - reconstruction_loss: 37.9534 - kl_loss: 5.4649\n", "Epoch 171/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3844 - reconstruction_loss: 37.9157 - kl_loss: 5.4687\n", "Epoch 172/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4400 - reconstruction_loss: 37.9656 - kl_loss: 5.4744\n", "Epoch 173/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4086 - reconstruction_loss: 37.9371 - kl_loss: 5.4715\n", "Epoch 174/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.4037 - reconstruction_loss: 37.9290 - kl_loss: 5.4747\n", "Epoch 175/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3655 - reconstruction_loss: 37.8892 - kl_loss: 5.4763\n", "Epoch 176/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3934 - reconstruction_loss: 37.9160 - kl_loss: 5.4774\n", "Epoch 177/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3601 - reconstruction_loss: 37.8833 - kl_loss: 5.4767\n", "Epoch 178/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3450 - reconstruction_loss: 37.8623 - kl_loss: 5.4826\n", "Epoch 179/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3546 - reconstruction_loss: 37.8703 - kl_loss: 5.4843\n", "Epoch 180/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3659 - reconstruction_loss: 37.8991 - kl_loss: 5.4668\n", "Epoch 181/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3438 - reconstruction_loss: 37.8470 - kl_loss: 5.4967\n", "Epoch 182/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3575 - reconstruction_loss: 37.8747 - kl_loss: 5.4829\n", "Epoch 183/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3240 - reconstruction_loss: 37.8332 - kl_loss: 5.4908\n", "Epoch 184/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3059 - reconstruction_loss: 37.8316 - kl_loss: 5.4743\n", "Epoch 185/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3094 - reconstruction_loss: 37.8254 - kl_loss: 5.4840\n", "Epoch 186/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3536 - reconstruction_loss: 37.8561 - kl_loss: 5.4975\n", "Epoch 187/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3179 - reconstruction_loss: 37.8290 - kl_loss: 5.4889\n", "Epoch 188/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2968 - reconstruction_loss: 37.8050 - kl_loss: 5.4918\n", "Epoch 189/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2858 - reconstruction_loss: 37.7874 - kl_loss: 5.4984\n", "Epoch 190/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2893 - reconstruction_loss: 37.7938 - kl_loss: 5.4955\n", "Epoch 191/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3107 - reconstruction_loss: 37.8106 - kl_loss: 5.5000\n", "Epoch 192/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2927 - reconstruction_loss: 37.8019 - kl_loss: 5.4908\n", "Epoch 193/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.3001 - reconstruction_loss: 37.7933 - kl_loss: 5.5068\n", "Epoch 194/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2894 - reconstruction_loss: 37.7958 - kl_loss: 5.4936\n", "Epoch 195/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2817 - reconstruction_loss: 37.7856 - kl_loss: 5.4961\n", "Epoch 196/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2595 - reconstruction_loss: 37.7628 - kl_loss: 5.4967\n", "Epoch 197/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2896 - reconstruction_loss: 37.7876 - kl_loss: 5.5020\n", "Epoch 198/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2766 - reconstruction_loss: 37.7708 - kl_loss: 5.5057\n", "Epoch 199/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2508 - reconstruction_loss: 37.7432 - kl_loss: 5.5076\n", "Epoch 200/200\n", "1875/1875 [==============================] - 10s 5ms/step - loss: 43.2551 - reconstruction_loss: 37.7514 - kl_loss: 5.5037\n" ] } ], "source": [ "# Training in addition\n", "# 追加で training する。\n", "\n", "vae_work.model.compile(optimizer)\n", "\n", "history2 = vae_work.train_with_fit(\n", " x_train,\n", " batch_size = 32,\n", " epochs = MAX_EPOCHS,\n", " run_folder = save_path1\n", ")" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 9, "status": "ok", "timestamp": 1637565716937, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "MXkX0G0vTMY2", "outputId": "4791c089-ec7e-45d7-fc65-eea7d1e1c33b" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "print(len(history2.history))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1637565716937, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "orCDgwNxTQey" }, "outputs": [], "source": [ "loss1_2 = history2.history['loss']\n", "rloss1_2 = history2.history['reconstruction_loss']\n", "kloss1_2 = history2.history['kl_loss']\n", "\n", "loss1 = np.concatenate([loss1_1, loss1_2], axis=0)\n", "rloss1 = np.concatenate([rloss1_1, rloss1_2], axis=0)\n", "kloss1 = np.concatenate([kloss1_1, kloss1_2], axis=0)" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1637565716938, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "T6mePLn8TpJs", "outputId": "9d058fb7-2aad-4a33-c60c-1ca3a9d58b5c" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history([loss1, rloss1, kloss1], ['total_loss', 'reconstruct_loss', 'kl_loss'])" ] }, { "cell_type": "markdown", "metadata": { "id": "5yvKYipHoMUj" }, "source": [ "# Validate Training results\n", "\n", "Since the returned value of vae.decoder() is Tensor for the use of @tf.function, it needs to be converted to an array of numpy.\n", "\n", "## 学習結果を検証する\n", "\n", "@tf.function 宣言のためvae.decoder() の返り値は Tensor になっているので、numpy の配列に変換する必要がある。 " ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1637565716938, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "VJ1s8kxOTqQS" }, "outputs": [], "source": [ "selected_indices = np.random.choice(range(len(x_test)), 10)\n", "selected_images = x_test[selected_indices]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1637565716938, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "JQctgJqpTtTJ" }, "outputs": [], "source": [ "z_mean, z_log_var, z = vae_work.encoder(selected_images)\n", "reconst_images = vae_work.decoder(z).numpy() # Convert Tensor to numpy array.\n", "\n", "txts = [f'{p[0]:.3f}, {p[1]:.3f}' for p in z ]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 0 }, "executionInfo": { "elapsed": 764, "status": "ok", "timestamp": 1637565717697, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "wsKot-wPjzAE", "outputId": "3a2a86ad-a647-4447-f81c-57a2829b800e" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "VariationalAutoEncoder.showImages(selected_images, reconst_images, txts, 1.4, 1.4)" ] }, { "cell_type": "markdown", "metadata": { "id": "Xu_VCKVNq4F5" }, "source": [ "# (2) Training with tf.GradientTape() function.\n", "Instead of using fit(), calculate the loss in your own train() function, find the gradients, and apply them to the variables.\n", "\n", "The train_tf() function is speeding up by declaring @tf.function the compute_loss_and_grads() function.\n", "\n", "## (2) tf.GradientTape() 関数を使った学習\n", "\n", "fit() 関数を使わずに、自分で記述した train() 関数内で loss を計算し、gradients を求めて、変数に適用する。\n", "\n", "train_tf() 関数では、lossとgradientsの計算を行う compute_loss_and_grads() 関数を @tf.function 宣言することで高速化を図っている。\n" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1637565717697, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "O10niDMHkBa_" }, "outputs": [], "source": [ "save_path2 = '/content/drive/MyDrive/ColabRun/VAE02/'" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637565717698, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "XK77ItvIra4P" }, "outputs": [], "source": [ "from nw.VariationalAutoEncoder import VariationalAutoEncoder\n", "\n", "vae2 = VariationalAutoEncoder(\n", " input_dim = (28, 28, 1),\n", " encoder_conv_filters = [32, 64, 64, 64],\n", " encoder_conv_kernel_size = [3, 3, 3, 3],\n", " encoder_conv_strides = [1, 2, 2, 1],\n", " decoder_conv_t_filters = [64, 64, 32, 1],\n", " decoder_conv_t_kernel_size = [3, 3, 3, 3],\n", " decoder_conv_t_strides = [1, 2, 2, 1],\n", " z_dim = 2,\n", " r_loss_factor = 1000 \n", ")" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637565717698, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "iUNKwUkskLfE" }, "outputs": [], "source": [ "optimizer2 = tf.keras.optimizers.Adam(learning_rate=learning_rate)" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 54037, "status": "ok", "timestamp": 1637565771731, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "pYVcV4t4rN_n", "outputId": "37b6f2f8-6ec6-42ea-ae47-11dcaee0ea50" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/3 1875 loss: total 58.770 reconstruction 55.546 kl 3.224 val loss total 52.817 reconstruction 49.169 kl 3.648 0:00:18.577035\n", "2/3 1875 loss: total 51.869 reconstruction 47.964 kl 3.905 val loss total 50.912 reconstruction 46.834 kl 4.078 0:00:35.127926\n", "3/3 1875 loss: total 50.510 reconstruction 46.300 kl 4.210 val loss total 49.969 reconstruction 45.687 kl 4.282 0:00:51.720397\n" ] } ], "source": [ "log2_1 = vae2.train_tf(\n", " x_train,\n", " batch_size = 32,\n", " epochs = 3,\n", " shuffle=True,\n", " run_folder = save_path2,\n", " optimizer = optimizer2,\n", " save_epoch_interval=50,\n", " validation_data=x_test\n", ")" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 14, "status": "ok", "timestamp": 1637565771732, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "GIFM5-gMVfpZ", "outputId": "64f5ef3b-5df5-4681-e92b-1d76e3016049" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['loss', 'reconstruction_loss', 'kl_loss', 'val_loss', 'val_reconstruction_loss', 'val_kl_loss'])\n" ] } ], "source": [ "print(log2_1.keys())\n", "\n", "loss2_1 = log2_1['loss']\n", "rloss2_1 = log2_1['reconstruction_loss']\n", "kloss2_1 = log2_1['kl_loss']\n", "val_loss2_1 = log2_1['val_loss']\n", "val_rloss2_1 = log2_1['val_reconstruction_loss']\n", "val_kloss2_1 = log2_1['val_kl_loss']" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 11, "status": "ok", "timestamp": 1637565771732, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "Tx-Y1SWir59_", "outputId": "ee94add7-489e-47ae-b211-a78b8a0e4d7f" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "# Load the saved parameters and weights.\n", "# 保存したパラメータと重みを読み込む\n", "\n", "vae2_work = VariationalAutoEncoder.load(save_path2)\n", "print(vae2_work.epoch)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 3315904, "status": "ok", "timestamp": 1637569087627, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "A_i805vr4xVl", "outputId": "53114ca0-55a6-438f-db7b-e5d3faa26f96" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4/200 1875 loss: total 50.162 reconstruction 45.848 kl 4.314 val loss total 49.152 reconstruction 44.580 kl 4.572 0:00:17.277455\n", "5/200 1875 loss: total 48.757 reconstruction 44.223 kl 4.534 val loss total 48.424 reconstruction 43.738 kl 4.686 0:00:33.858980\n", "6/200 1875 loss: total 48.176 reconstruction 43.538 kl 4.638 val loss total 48.115 reconstruction 43.766 kl 4.349 0:00:50.429768\n", "7/200 1875 loss: total 47.757 reconstruction 43.043 kl 4.714 val loss total 47.459 reconstruction 42.677 kl 4.781 0:01:06.866417\n", "8/200 1875 loss: total 47.441 reconstruction 42.676 kl 4.765 val loss total 47.894 reconstruction 42.884 kl 5.011 0:01:23.446778\n", "9/200 1875 loss: total 47.179 reconstruction 42.367 kl 4.813 val loss total 47.031 reconstruction 42.219 kl 4.812 0:01:40.115804\n", "10/200 1875 loss: total 46.942 reconstruction 42.089 kl 4.853 val loss total 46.790 reconstruction 42.095 kl 4.695 0:01:56.976094\n", "11/200 1875 loss: total 46.754 reconstruction 41.864 kl 4.890 val loss total 46.903 reconstruction 41.996 kl 4.907 0:02:13.604735\n", "12/200 1875 loss: total 46.624 reconstruction 41.701 kl 4.923 val loss total 46.661 reconstruction 41.812 kl 4.850 0:02:30.399161\n", "13/200 1875 loss: total 46.499 reconstruction 41.559 kl 4.940 val loss total 46.625 reconstruction 41.618 kl 5.008 0:02:47.078383\n", "14/200 1875 loss: total 46.342 reconstruction 41.383 kl 4.959 val loss total 46.390 reconstruction 41.315 kl 5.076 0:03:03.818319\n", "15/200 1875 loss: total 46.197 reconstruction 41.232 kl 4.965 val loss total 46.465 reconstruction 41.601 kl 4.864 0:03:20.633008\n", "16/200 1875 loss: total 46.073 reconstruction 41.083 kl 4.990 val loss total 46.003 reconstruction 40.929 kl 5.074 0:03:37.440654\n", "17/200 1875 loss: total 46.008 reconstruction 40.996 kl 5.012 val loss total 46.937 reconstruction 41.735 kl 5.203 0:03:54.220229\n", "18/200 1875 loss: total 45.943 reconstruction 40.904 kl 5.039 val loss total 45.829 reconstruction 40.918 kl 4.911 0:04:10.945407\n", "19/200 1875 loss: total 45.833 reconstruction 40.779 kl 5.054 val loss total 46.202 reconstruction 41.148 kl 5.054 0:04:27.852774\n", "20/200 1875 loss: total 45.762 reconstruction 40.709 kl 5.053 val loss total 46.060 reconstruction 40.935 kl 5.124 0:04:44.701887\n", "21/200 1875 loss: total 45.679 reconstruction 40.611 kl 5.069 val loss total 46.077 reconstruction 40.876 kl 5.201 0:05:01.362951\n", "22/200 1875 loss: total 45.562 reconstruction 40.497 kl 5.065 val loss total 46.065 reconstruction 40.979 kl 5.086 0:05:17.991716\n", "23/200 1875 loss: total 45.533 reconstruction 40.431 kl 5.102 val loss total 45.621 reconstruction 40.551 kl 5.070 0:05:34.591369\n", "24/200 1875 loss: total 45.472 reconstruction 40.364 kl 5.107 val loss total 45.815 reconstruction 40.818 kl 4.997 0:05:51.423349\n", "25/200 1875 loss: total 45.377 reconstruction 40.264 kl 5.114 val loss total 45.679 reconstruction 40.624 kl 5.055 0:06:08.204300\n", "26/200 1875 loss: total 45.338 reconstruction 40.203 kl 5.135 val loss total 45.798 reconstruction 40.550 kl 5.248 0:06:24.991477\n", "27/200 1875 loss: total 45.294 reconstruction 40.157 kl 5.137 val loss total 45.682 reconstruction 40.614 kl 5.068 0:06:41.724944\n", "28/200 1875 loss: total 45.259 reconstruction 40.107 kl 5.152 val loss total 45.423 reconstruction 40.295 kl 5.129 0:06:58.683955\n", "29/200 1875 loss: total 45.229 reconstruction 40.077 kl 5.153 val loss total 45.632 reconstruction 40.402 kl 5.230 0:07:15.489602\n", "30/200 1875 loss: total 45.148 reconstruction 39.993 kl 5.156 val loss total 45.333 reconstruction 40.367 kl 4.966 0:07:32.348106\n", "31/200 1875 loss: total 45.064 reconstruction 39.895 kl 5.169 val loss total 45.687 reconstruction 40.597 kl 5.091 0:07:48.960279\n", "32/200 1875 loss: total 45.056 reconstruction 39.872 kl 5.184 val loss total 45.327 reconstruction 40.105 kl 5.222 0:08:05.689345\n", "33/200 1875 loss: total 45.022 reconstruction 39.833 kl 5.188 val loss total 45.747 reconstruction 40.727 kl 5.020 0:08:22.310960\n", "34/200 1875 loss: total 44.959 reconstruction 39.769 kl 5.190 val loss total 45.642 reconstruction 40.386 kl 5.256 0:08:38.971414\n", "35/200 1875 loss: total 44.928 reconstruction 39.731 kl 5.196 val loss total 45.334 reconstruction 40.153 kl 5.182 0:08:55.833276\n", "36/200 1875 loss: total 44.873 reconstruction 39.652 kl 5.221 val loss total 45.349 reconstruction 40.222 kl 5.127 0:09:12.681772\n", "37/200 1875 loss: total 44.908 reconstruction 39.690 kl 5.218 val loss total 45.325 reconstruction 40.216 kl 5.109 0:09:29.386281\n", "38/200 1875 loss: total 44.829 reconstruction 39.609 kl 5.221 val loss total 45.356 reconstruction 40.176 kl 5.180 0:09:46.434155\n", "39/200 1875 loss: total 44.807 reconstruction 39.582 kl 5.225 val loss total 45.302 reconstruction 40.268 kl 5.034 0:10:03.115526\n", "40/200 1875 loss: total 44.733 reconstruction 39.506 kl 5.226 val loss total 45.273 reconstruction 40.016 kl 5.257 0:10:19.887071\n", "41/200 1875 loss: total 44.740 reconstruction 39.492 kl 5.248 val loss total 45.072 reconstruction 39.703 kl 5.368 0:10:36.428644\n", "42/200 1875 loss: total 44.681 reconstruction 39.445 kl 5.236 val loss total 45.187 reconstruction 40.148 kl 5.039 0:10:53.151162\n", "43/200 1875 loss: total 44.670 reconstruction 39.417 kl 5.252 val loss total 45.718 reconstruction 40.213 kl 5.505 0:11:09.690726\n", "44/200 1875 loss: total 44.639 reconstruction 39.384 kl 5.255 val loss total 44.865 reconstruction 39.639 kl 5.226 0:11:26.514591\n", "45/200 1875 loss: total 44.595 reconstruction 39.344 kl 5.252 val loss total 45.539 reconstruction 40.319 kl 5.219 0:11:43.236509\n", "46/200 1875 loss: total 44.584 reconstruction 39.322 kl 5.262 val loss total 44.822 reconstruction 39.555 kl 5.267 0:11:59.872629\n", "47/200 1875 loss: total 44.535 reconstruction 39.261 kl 5.274 val loss total 44.937 reconstruction 39.704 kl 5.233 0:12:16.490185\n", "48/200 1875 loss: total 44.543 reconstruction 39.269 kl 5.275 val loss total 45.009 reconstruction 39.745 kl 5.264 0:12:33.227318\n", "49/200 1875 loss: total 44.497 reconstruction 39.224 kl 5.273 val loss total 44.963 reconstruction 39.664 kl 5.299 0:12:50.437077\n", "50/200 1875 loss: total 44.467 reconstruction 39.183 kl 5.284 val loss total 44.915 reconstruction 39.677 kl 5.238 0:13:09.232365\n", "51/200 1875 loss: total 44.436 reconstruction 39.159 kl 5.276 val loss total 44.993 reconstruction 39.640 kl 5.353 0:13:25.996844\n", "52/200 1875 loss: total 44.412 reconstruction 39.120 kl 5.291 val loss total 44.940 reconstruction 39.749 kl 5.191 0:13:42.650136\n", "53/200 1875 loss: total 44.401 reconstruction 39.101 kl 5.299 val loss total 45.460 reconstruction 40.218 kl 5.241 0:13:59.630201\n", "54/200 1875 loss: total 44.378 reconstruction 39.074 kl 5.304 val loss total 44.902 reconstruction 39.627 kl 5.275 0:14:16.244289\n", "55/200 1875 loss: total 44.329 reconstruction 39.027 kl 5.302 val loss total 44.698 reconstruction 39.412 kl 5.286 0:14:32.927279\n", "56/200 1875 loss: total 44.328 reconstruction 39.021 kl 5.306 val loss total 44.774 reconstruction 39.458 kl 5.316 0:14:49.786937\n", "57/200 1875 loss: total 44.311 reconstruction 39.006 kl 5.305 val loss total 45.276 reconstruction 40.009 kl 5.268 0:15:06.662111\n", "58/200 1875 loss: total 44.268 reconstruction 38.944 kl 5.324 val loss total 44.543 reconstruction 39.329 kl 5.214 0:15:23.389418\n", "59/200 1875 loss: total 44.256 reconstruction 38.936 kl 5.320 val loss total 44.842 reconstruction 39.525 kl 5.318 0:15:40.071372\n", "60/200 1875 loss: total 44.224 reconstruction 38.911 kl 5.313 val loss total 45.060 reconstruction 39.890 kl 5.170 0:15:56.721918\n", "61/200 1875 loss: total 44.225 reconstruction 38.897 kl 5.328 val loss total 44.975 reconstruction 39.801 kl 5.174 0:16:13.475832\n", "62/200 1875 loss: total 44.174 reconstruction 38.834 kl 5.340 val loss total 44.882 reconstruction 39.777 kl 5.105 0:16:30.027535\n", "63/200 1875 loss: total 44.199 reconstruction 38.860 kl 5.338 val loss total 44.548 reconstruction 39.299 kl 5.248 0:16:46.791431\n", "64/200 1875 loss: total 44.167 reconstruction 38.819 kl 5.348 val loss total 44.697 reconstruction 39.299 kl 5.398 0:17:03.489724\n", "65/200 1875 loss: total 44.148 reconstruction 38.797 kl 5.352 val loss total 44.866 reconstruction 39.424 kl 5.442 0:17:20.216007\n", "66/200 1875 loss: total 44.130 reconstruction 38.771 kl 5.359 val loss total 44.923 reconstruction 39.618 kl 5.305 0:17:36.991212\n", "67/200 1875 loss: total 44.112 reconstruction 38.754 kl 5.358 val loss total 44.940 reconstruction 39.698 kl 5.242 0:17:53.629803\n", "68/200 1875 loss: total 44.103 reconstruction 38.747 kl 5.356 val loss total 44.848 reconstruction 39.356 kl 5.492 0:18:10.239933\n", "69/200 1875 loss: total 44.067 reconstruction 38.705 kl 5.362 val loss total 44.600 reconstruction 39.351 kl 5.249 0:18:26.904989\n", "70/200 1875 loss: total 44.053 reconstruction 38.696 kl 5.357 val loss total 44.939 reconstruction 39.447 kl 5.492 0:18:43.700989\n", "71/200 1875 loss: total 44.060 reconstruction 38.694 kl 5.366 val loss total 44.609 reconstruction 39.252 kl 5.356 0:19:00.706969\n", "72/200 1875 loss: total 44.042 reconstruction 38.678 kl 5.364 val loss total 44.712 reconstruction 39.334 kl 5.378 0:19:17.432070\n", "73/200 1875 loss: total 43.982 reconstruction 38.624 kl 5.358 val loss total 44.594 reconstruction 39.255 kl 5.339 0:19:34.265796\n", "74/200 1875 loss: total 44.001 reconstruction 38.636 kl 5.365 val loss total 44.569 reconstruction 39.131 kl 5.438 0:19:50.930350\n", "75/200 1875 loss: total 43.987 reconstruction 38.626 kl 5.362 val loss total 44.847 reconstruction 39.518 kl 5.329 0:20:07.967674\n", "76/200 1875 loss: total 43.970 reconstruction 38.596 kl 5.374 val loss total 44.979 reconstruction 39.569 kl 5.410 0:20:24.662119\n", "77/200 1875 loss: total 43.932 reconstruction 38.559 kl 5.373 val loss total 44.545 reconstruction 39.293 kl 5.252 0:20:41.438850\n", "78/200 1875 loss: total 43.957 reconstruction 38.573 kl 5.384 val loss total 44.696 reconstruction 39.378 kl 5.318 0:20:58.196325\n", "79/200 1875 loss: total 43.928 reconstruction 38.545 kl 5.383 val loss total 44.910 reconstruction 39.715 kl 5.195 0:21:14.862080\n", "80/200 1875 loss: total 43.938 reconstruction 38.566 kl 5.372 val loss total 44.910 reconstruction 39.632 kl 5.277 0:21:31.508570\n", "81/200 1875 loss: total 43.895 reconstruction 38.515 kl 5.380 val loss total 44.606 reconstruction 39.231 kl 5.375 0:21:48.273321\n", "82/200 1875 loss: total 43.883 reconstruction 38.490 kl 5.393 val loss total 44.540 reconstruction 39.222 kl 5.318 0:22:05.051810\n", "83/200 1875 loss: total 43.852 reconstruction 38.447 kl 5.405 val loss total 44.589 reconstruction 39.331 kl 5.258 0:22:21.884867\n", "84/200 1875 loss: total 43.878 reconstruction 38.487 kl 5.391 val loss total 44.797 reconstruction 39.560 kl 5.237 0:22:38.489883\n", "85/200 1875 loss: total 43.858 reconstruction 38.464 kl 5.394 val loss total 44.503 reconstruction 38.991 kl 5.513 0:22:55.297158\n", "86/200 1875 loss: total 43.847 reconstruction 38.444 kl 5.403 val loss total 45.060 reconstruction 39.555 kl 5.504 0:23:12.085322\n", "87/200 1875 loss: total 43.818 reconstruction 38.421 kl 5.398 val loss total 44.583 reconstruction 39.236 kl 5.347 0:23:28.936725\n", "88/200 1875 loss: total 43.811 reconstruction 38.395 kl 5.415 val loss total 44.657 reconstruction 39.300 kl 5.357 0:23:45.700052\n", "89/200 1875 loss: total 43.807 reconstruction 38.400 kl 5.407 val loss total 44.839 reconstruction 39.446 kl 5.393 0:24:02.718024\n", "90/200 1875 loss: total 43.798 reconstruction 38.382 kl 5.416 val loss total 44.587 reconstruction 39.109 kl 5.478 0:24:19.397046\n", "91/200 1875 loss: total 43.758 reconstruction 38.338 kl 5.421 val loss total 44.654 reconstruction 39.212 kl 5.442 0:24:36.273507\n", "92/200 1875 loss: total 43.762 reconstruction 38.345 kl 5.417 val loss total 44.715 reconstruction 39.360 kl 5.354 0:24:53.079947\n", "93/200 1875 loss: total 43.736 reconstruction 38.316 kl 5.420 val loss total 44.789 reconstruction 39.331 kl 5.458 0:25:10.138744\n", "94/200 1875 loss: total 43.741 reconstruction 38.318 kl 5.423 val loss total 44.553 reconstruction 39.193 kl 5.360 0:25:26.931501\n", "95/200 1875 loss: total 43.734 reconstruction 38.323 kl 5.412 val loss total 44.566 reconstruction 39.231 kl 5.334 0:25:43.715210\n", "96/200 1875 loss: total 43.698 reconstruction 38.285 kl 5.412 val loss total 44.548 reconstruction 39.247 kl 5.301 0:26:00.400480\n", "97/200 1875 loss: total 43.703 reconstruction 38.270 kl 5.433 val loss total 44.535 reconstruction 38.953 kl 5.582 0:26:17.125616\n", "98/200 1875 loss: total 43.697 reconstruction 38.281 kl 5.416 val loss total 44.915 reconstruction 39.559 kl 5.356 0:26:33.740765\n", "99/200 1875 loss: total 43.664 reconstruction 38.232 kl 5.432 val loss total 44.571 reconstruction 39.142 kl 5.430 0:26:50.462840\n", "100/200 1875 loss: total 43.717 reconstruction 38.277 kl 5.439 val loss total 44.529 reconstruction 39.154 kl 5.375 0:27:08.713689\n", "101/200 1875 loss: total 43.698 reconstruction 38.262 kl 5.436 val loss total 44.647 reconstruction 39.233 kl 5.414 0:27:25.718150\n", "102/200 1875 loss: total 43.660 reconstruction 38.225 kl 5.435 val loss total 44.906 reconstruction 39.429 kl 5.477 0:27:42.409837\n", "103/200 1875 loss: total 43.668 reconstruction 38.217 kl 5.451 val loss total 45.036 reconstruction 39.725 kl 5.311 0:27:59.141782\n", "104/200 1875 loss: total 43.621 reconstruction 38.194 kl 5.427 val loss total 44.354 reconstruction 38.913 kl 5.440 0:28:15.802837\n", "105/200 1875 loss: total 43.633 reconstruction 38.199 kl 5.435 val loss total 44.493 reconstruction 39.069 kl 5.424 0:28:32.486469\n", "106/200 1875 loss: total 43.632 reconstruction 38.187 kl 5.444 val loss total 44.539 reconstruction 39.130 kl 5.408 0:28:49.381544\n", "107/200 1875 loss: total 43.619 reconstruction 38.170 kl 5.450 val loss total 44.381 reconstruction 38.927 kl 5.453 0:29:06.229204\n", "108/200 1875 loss: total 43.597 reconstruction 38.161 kl 5.436 val loss total 44.457 reconstruction 39.116 kl 5.341 0:29:22.983122\n", "109/200 1875 loss: total 43.634 reconstruction 38.190 kl 5.444 val loss total 44.476 reconstruction 39.043 kl 5.433 0:29:39.704490\n", "110/200 1875 loss: total 43.547 reconstruction 38.111 kl 5.435 val loss total 44.423 reconstruction 38.924 kl 5.500 0:29:56.461920\n", "111/200 1875 loss: total 43.598 reconstruction 38.147 kl 5.452 val loss total 44.405 reconstruction 39.003 kl 5.402 0:30:13.250631\n", "112/200 1875 loss: total 43.567 reconstruction 38.128 kl 5.439 val loss total 44.861 reconstruction 39.518 kl 5.342 0:30:30.170810\n", "113/200 1875 loss: total 43.531 reconstruction 38.089 kl 5.442 val loss total 44.599 reconstruction 39.228 kl 5.371 0:30:46.987956\n", "114/200 1875 loss: total 43.562 reconstruction 38.102 kl 5.460 val loss total 44.872 reconstruction 39.365 kl 5.507 0:31:03.791419\n", "115/200 1875 loss: total 43.552 reconstruction 38.096 kl 5.456 val loss total 44.457 reconstruction 38.982 kl 5.476 0:31:20.504139\n", "116/200 1875 loss: total 43.574 reconstruction 38.116 kl 5.458 val loss total 44.843 reconstruction 39.337 kl 5.506 0:31:37.326019\n", "117/200 1875 loss: total 43.549 reconstruction 38.092 kl 5.456 val loss total 44.368 reconstruction 38.947 kl 5.421 0:31:54.163002\n", "118/200 1875 loss: total 43.541 reconstruction 38.086 kl 5.454 val loss total 44.516 reconstruction 39.079 kl 5.437 0:32:10.976940\n", "119/200 1875 loss: total 43.506 reconstruction 38.044 kl 5.462 val loss total 44.526 reconstruction 39.054 kl 5.472 0:32:27.707200\n", "120/200 1875 loss: total 43.530 reconstruction 38.061 kl 5.469 val loss total 44.451 reconstruction 39.100 kl 5.351 0:32:44.453930\n", "121/200 1875 loss: total 43.511 reconstruction 38.056 kl 5.456 val loss total 44.507 reconstruction 39.091 kl 5.416 0:33:01.145372\n", "122/200 1875 loss: total 43.515 reconstruction 38.042 kl 5.473 val loss total 44.273 reconstruction 38.865 kl 5.408 0:33:17.951876\n", "123/200 1875 loss: total 43.491 reconstruction 38.031 kl 5.460 val loss total 44.403 reconstruction 38.976 kl 5.427 0:33:34.690088\n", "124/200 1875 loss: total 43.510 reconstruction 38.031 kl 5.479 val loss total 44.164 reconstruction 38.672 kl 5.492 0:33:51.701289\n", "125/200 1875 loss: total 43.448 reconstruction 37.982 kl 5.466 val loss total 44.394 reconstruction 38.879 kl 5.515 0:34:08.485789\n", "126/200 1875 loss: total 43.483 reconstruction 38.014 kl 5.469 val loss total 44.424 reconstruction 38.998 kl 5.425 0:34:25.384367\n", "127/200 1875 loss: total 43.448 reconstruction 37.961 kl 5.487 val loss total 44.410 reconstruction 39.050 kl 5.360 0:34:42.121120\n", "128/200 1875 loss: total 43.471 reconstruction 37.989 kl 5.482 val loss total 44.356 reconstruction 38.798 kl 5.558 0:34:59.016617\n", "129/200 1875 loss: total 43.445 reconstruction 37.963 kl 5.482 val loss total 44.448 reconstruction 39.027 kl 5.420 0:35:15.643733\n", "130/200 1875 loss: total 43.450 reconstruction 37.971 kl 5.479 val loss total 44.686 reconstruction 39.340 kl 5.346 0:35:32.643387\n", "131/200 1875 loss: total 43.439 reconstruction 37.964 kl 5.476 val loss total 44.323 reconstruction 38.969 kl 5.355 0:35:49.531323\n", "132/200 1875 loss: total 43.422 reconstruction 37.937 kl 5.486 val loss total 44.458 reconstruction 38.916 kl 5.543 0:36:06.274550\n", "133/200 1875 loss: total 43.433 reconstruction 37.955 kl 5.478 val loss total 44.712 reconstruction 39.260 kl 5.452 0:36:23.000081\n", "134/200 1875 loss: total 43.398 reconstruction 37.916 kl 5.482 val loss total 44.731 reconstruction 39.364 kl 5.367 0:36:39.782398\n", "135/200 1875 loss: total 43.401 reconstruction 37.913 kl 5.488 val loss total 44.501 reconstruction 39.107 kl 5.394 0:36:56.623039\n", "136/200 1875 loss: total 43.420 reconstruction 37.930 kl 5.490 val loss total 44.450 reconstruction 39.059 kl 5.391 0:37:13.470758\n", "137/200 1875 loss: total 43.378 reconstruction 37.892 kl 5.486 val loss total 44.338 reconstruction 38.941 kl 5.397 0:37:30.314993\n", "138/200 1875 loss: total 43.404 reconstruction 37.908 kl 5.496 val loss total 44.687 reconstruction 39.322 kl 5.365 0:37:47.283535\n", "139/200 1875 loss: total 43.369 reconstruction 37.891 kl 5.478 val loss total 44.419 reconstruction 38.946 kl 5.473 0:38:04.040351\n", "140/200 1875 loss: total 43.353 reconstruction 37.854 kl 5.498 val loss total 44.724 reconstruction 39.315 kl 5.409 0:38:20.965275\n", "141/200 1875 loss: total 43.339 reconstruction 37.844 kl 5.494 val loss total 44.756 reconstruction 39.376 kl 5.380 0:38:37.634737\n", "142/200 1875 loss: total 43.363 reconstruction 37.858 kl 5.505 val loss total 44.629 reconstruction 39.214 kl 5.415 0:38:54.808788\n", "143/200 1875 loss: total 43.333 reconstruction 37.835 kl 5.498 val loss total 44.383 reconstruction 38.959 kl 5.423 0:39:11.579696\n", "144/200 1875 loss: total 43.363 reconstruction 37.860 kl 5.503 val loss total 44.387 reconstruction 38.886 kl 5.501 0:39:28.543206\n", "145/200 1875 loss: total 43.345 reconstruction 37.854 kl 5.491 val loss total 44.623 reconstruction 39.179 kl 5.444 0:39:45.339762\n", "146/200 1875 loss: total 43.347 reconstruction 37.857 kl 5.491 val loss total 44.545 reconstruction 39.038 kl 5.507 0:40:02.435161\n", "147/200 1875 loss: total 43.344 reconstruction 37.846 kl 5.498 val loss total 44.422 reconstruction 38.846 kl 5.576 0:40:19.238820\n", "148/200 1875 loss: total 43.311 reconstruction 37.794 kl 5.517 val loss total 44.926 reconstruction 39.431 kl 5.495 0:40:36.204852\n", "149/200 1875 loss: total 43.294 reconstruction 37.802 kl 5.493 val loss total 44.266 reconstruction 38.886 kl 5.379 0:40:53.304109\n", "150/200 1875 loss: total 43.289 reconstruction 37.787 kl 5.502 val loss total 44.467 reconstruction 39.091 kl 5.376 0:41:12.059408\n", "151/200 1875 loss: total 43.318 reconstruction 37.828 kl 5.490 val loss total 44.304 reconstruction 38.797 kl 5.507 0:41:28.942447\n", "152/200 1875 loss: total 43.319 reconstruction 37.804 kl 5.515 val loss total 44.797 reconstruction 39.314 kl 5.483 0:41:45.770619\n", "153/200 1875 loss: total 43.280 reconstruction 37.776 kl 5.504 val loss total 44.282 reconstruction 38.878 kl 5.403 0:42:02.625198\n", "154/200 1875 loss: total 43.288 reconstruction 37.778 kl 5.510 val loss total 44.405 reconstruction 38.856 kl 5.549 0:42:19.556715\n", "155/200 1875 loss: total 43.279 reconstruction 37.759 kl 5.520 val loss total 44.326 reconstruction 38.885 kl 5.441 0:42:36.327122\n", "156/200 1875 loss: total 43.279 reconstruction 37.759 kl 5.519 val loss total 44.640 reconstruction 39.144 kl 5.497 0:42:53.148910\n", "157/200 1875 loss: total 43.291 reconstruction 37.780 kl 5.511 val loss total 44.781 reconstruction 39.342 kl 5.439 0:43:09.944585\n", "158/200 1875 loss: total 43.252 reconstruction 37.731 kl 5.521 val loss total 44.255 reconstruction 38.704 kl 5.551 0:43:26.725540\n", "159/200 1875 loss: total 43.258 reconstruction 37.755 kl 5.504 val loss total 44.274 reconstruction 38.728 kl 5.547 0:43:43.660450\n", "160/200 1875 loss: total 43.246 reconstruction 37.732 kl 5.514 val loss total 44.526 reconstruction 39.149 kl 5.377 0:44:00.569521\n", "161/200 1875 loss: total 43.256 reconstruction 37.730 kl 5.526 val loss total 44.721 reconstruction 39.360 kl 5.361 0:44:17.447056\n", "162/200 1875 loss: total 43.247 reconstruction 37.739 kl 5.508 val loss total 44.347 reconstruction 38.975 kl 5.372 0:44:34.201379\n", "163/200 1875 loss: total 43.264 reconstruction 37.749 kl 5.515 val loss total 44.633 reconstruction 39.102 kl 5.531 0:44:51.069020\n", "164/200 1875 loss: total 43.232 reconstruction 37.700 kl 5.533 val loss total 44.235 reconstruction 38.727 kl 5.508 0:45:07.936432\n", "165/200 1875 loss: total 43.222 reconstruction 37.695 kl 5.527 val loss total 44.676 reconstruction 39.089 kl 5.586 0:45:24.745173\n", "166/200 1875 loss: total 43.237 reconstruction 37.694 kl 5.543 val loss total 44.603 reconstruction 39.044 kl 5.559 0:45:41.555163\n", "167/200 1875 loss: total 43.201 reconstruction 37.679 kl 5.522 val loss total 45.117 reconstruction 39.421 kl 5.696 0:45:58.754834\n", "168/200 1875 loss: total 43.179 reconstruction 37.651 kl 5.528 val loss total 44.400 reconstruction 38.888 kl 5.513 0:46:15.605216\n", "169/200 1875 loss: total 43.207 reconstruction 37.675 kl 5.532 val loss total 44.796 reconstruction 39.286 kl 5.510 0:46:32.352851\n", "170/200 1875 loss: total 43.193 reconstruction 37.669 kl 5.525 val loss total 44.349 reconstruction 38.851 kl 5.497 0:46:49.054212\n", "171/200 1875 loss: total 43.164 reconstruction 37.631 kl 5.533 val loss total 44.417 reconstruction 38.912 kl 5.504 0:47:06.073833\n", "172/200 1875 loss: total 43.193 reconstruction 37.663 kl 5.530 val loss total 44.523 reconstruction 39.029 kl 5.494 0:47:23.184783\n", "173/200 1875 loss: total 43.198 reconstruction 37.671 kl 5.528 val loss total 44.748 reconstruction 39.097 kl 5.651 0:47:40.272333\n", "174/200 1875 loss: total 43.150 reconstruction 37.617 kl 5.533 val loss total 44.320 reconstruction 38.973 kl 5.347 0:47:57.381127\n", "175/200 1875 loss: total 43.152 reconstruction 37.614 kl 5.538 val loss total 44.188 reconstruction 38.637 kl 5.551 0:48:14.305486\n", "176/200 1875 loss: total 43.169 reconstruction 37.636 kl 5.533 val loss total 44.226 reconstruction 38.675 kl 5.550 0:48:30.979480\n", "177/200 1875 loss: total 43.198 reconstruction 37.672 kl 5.527 val loss total 44.064 reconstruction 38.547 kl 5.517 0:48:47.847159\n", "178/200 1875 loss: total 43.153 reconstruction 37.620 kl 5.533 val loss total 44.566 reconstruction 39.000 kl 5.566 0:49:04.541262\n", "179/200 1875 loss: total 43.155 reconstruction 37.620 kl 5.535 val loss total 44.416 reconstruction 38.958 kl 5.458 0:49:21.438403\n", "180/200 1875 loss: total 43.150 reconstruction 37.615 kl 5.536 val loss total 44.406 reconstruction 38.900 kl 5.506 0:49:38.162147\n", "181/200 1875 loss: total 43.160 reconstruction 37.620 kl 5.540 val loss total 44.964 reconstruction 39.444 kl 5.520 0:49:55.020021\n", "182/200 1875 loss: total 43.139 reconstruction 37.600 kl 5.539 val loss total 44.641 reconstruction 39.146 kl 5.495 0:50:11.784347\n", "183/200 1875 loss: total 43.169 reconstruction 37.631 kl 5.538 val loss total 44.338 reconstruction 38.913 kl 5.425 0:50:28.659054\n", "184/200 1875 loss: total 43.115 reconstruction 37.565 kl 5.551 val loss total 44.322 reconstruction 38.887 kl 5.435 0:50:45.484843\n", "185/200 1875 loss: total 43.120 reconstruction 37.580 kl 5.539 val loss total 44.345 reconstruction 38.813 kl 5.532 0:51:02.358411\n", "186/200 1875 loss: total 43.093 reconstruction 37.539 kl 5.554 val loss total 44.605 reconstruction 38.971 kl 5.634 0:51:19.055859\n", "187/200 1875 loss: total 43.127 reconstruction 37.591 kl 5.535 val loss total 44.187 reconstruction 38.602 kl 5.584 0:51:35.771913\n", "188/200 1875 loss: total 43.126 reconstruction 37.586 kl 5.540 val loss total 44.505 reconstruction 38.993 kl 5.512 0:51:52.499624\n", "189/200 1875 loss: total 43.105 reconstruction 37.561 kl 5.544 val loss total 44.451 reconstruction 39.028 kl 5.424 0:52:09.349090\n", "190/200 1875 loss: total 43.107 reconstruction 37.575 kl 5.533 val loss total 44.518 reconstruction 38.827 kl 5.691 0:52:26.095645\n", "191/200 1875 loss: total 43.099 reconstruction 37.544 kl 5.556 val loss total 44.444 reconstruction 38.900 kl 5.543 0:52:42.889732\n", "192/200 1875 loss: total 43.106 reconstruction 37.557 kl 5.549 val loss total 44.614 reconstruction 39.069 kl 5.545 0:52:59.796363\n", "193/200 1875 loss: total 43.087 reconstruction 37.535 kl 5.551 val loss total 44.505 reconstruction 38.968 kl 5.538 0:53:16.926831\n", "194/200 1875 loss: total 43.075 reconstruction 37.527 kl 5.548 val loss total 44.447 reconstruction 38.995 kl 5.452 0:53:33.688983\n", "195/200 1875 loss: total 43.087 reconstruction 37.533 kl 5.554 val loss total 44.354 reconstruction 38.872 kl 5.482 0:53:50.606192\n", "196/200 1875 loss: total 43.090 reconstruction 37.535 kl 5.555 val loss total 44.326 reconstruction 38.884 kl 5.442 0:54:07.173908\n", "197/200 1875 loss: total 43.068 reconstruction 37.527 kl 5.542 val loss total 44.311 reconstruction 38.868 kl 5.443 0:54:23.983531\n", "198/200 1875 loss: total 43.096 reconstruction 37.554 kl 5.542 val loss total 44.420 reconstruction 38.883 kl 5.537 0:54:40.752294\n", "199/200 1875 loss: total 43.055 reconstruction 37.498 kl 5.557 val loss total 44.232 reconstruction 38.625 kl 5.607 0:54:57.443065\n", "200/200 1875 loss: total 43.043 reconstruction 37.498 kl 5.546 val loss total 44.157 reconstruction 38.579 kl 5.578 0:55:15.500341\n" ] } ], "source": [ "# Train in addition\n", "# 追加で training する。\n", "\n", "log2_2 = vae2_work.train_tf(\n", " x_train,\n", " batch_size = 32,\n", " epochs = MAX_EPOCHS,\n", " shuffle=True,\n", " run_folder = save_path2,\n", " optimizer = optimizer2,\n", " save_epoch_interval=50,\n", " validation_data=x_test\n", ")\n" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "executionInfo": { "elapsed": 13, "status": "ok", "timestamp": 1637569087628, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "XNSavN3FWB9U" }, "outputs": [], "source": [ "loss2_2 = log2_2['loss']\n", "rloss2_2 = log2_2['reconstruction_loss']\n", "kloss2_2 = log2_2['kl_loss']\n", "val_loss2_2 = log2_2['val_loss']\n", "val_rloss2_2 = log2_2['val_reconstruction_loss']\n", "val_kloss2_2 = log2_2['val_kl_loss']" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637569087628, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "7I3-J7JB5O61" }, "outputs": [], "source": [ "loss2 = np.concatenate([loss2_1, loss2_2], axis=0)\n", "rloss2 = np.concatenate([rloss2_1, rloss2_2], axis=0)\n", "kloss2 = np.concatenate([kloss2_1, kloss2_2], axis=0)\n", "\n", "val_loss2 = np.concatenate([val_loss2_1, val_loss2_2], axis=0)\n", "val_rloss2 = np.concatenate([val_rloss2_1, val_rloss2_2], axis=0)\n", "val_kloss2 = np.concatenate([val_kloss2_1, val_kloss2_2], axis=0)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637569087628, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "uQ9Kzy8U5Rc2", "outputId": "098f734a-cb54-427d-f97a-20c6f5f20507" }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhgAAAEGCAYAAAAnsOxmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXhTZfo+8PvpzlJ2KJWtICg7BQsOICgqIIqiqKAisowyM4ig/kbFffmqwyiOuyg6sigKCiK4AiqKOAIWLIKAIPtOqUApdM/z++NJTFq6pG3apOn9ua5cSU5OTt6Tk+Tced/3vEdUFURERES+FOLvAhAREVHwYcAgIiIin2PAICIiIp9jwCAiIiKfY8AgIiIinwuryBdr0KCBxsXFVeRLEhERUTlZu3btUVVtWNBjFRow4uLikJiYWJEvSUREROVERHYX9hibSIiIiMjnGDCIiIjI5xgwiIiIyOcqtA8GERFRUbKzs7Fv3z5kZGT4uyjkISoqCk2bNkV4eLjXz2HAICKigLFv3z5ER0cjLi4OIuLv4hAAVUVKSgr27duHli1bev08NpEQEVHAyMjIQP369RkuAoiIoH79+iWuVWLAICKigMJwEXhKs02CI2A8/jiwbJm/S0FEREROwREw/vUv4Kuv/F0KIiIicgqOgBEZCWRm+rsURERUyR0/fhyvvfZakfPs2rUL7733XrHL2rVrFzp27Fjo499++y0GDx5c4jJWFsERMCIigKwsf5eCiIgqOV8GjKouOA5TZQ0GEVHwufNOICnJt8uMjwdeeKHQhydPnozt27cjPj4e/fv3BwB88cUXEBE89NBDGD58OCZPnozNmzcjPj4eo0aNwjXXXIORI0fi1KlTAIBXXnkFvXr1KlGx/vjjD4wdOxY7duxA9erVMX36dHTu3BnfffcdJk2aBMA6Wq5YsQJpaWkYPnw4UlNTkZOTg2nTpqFPnz6lfEPKDwMGERGR05QpU7Bx40YkJSVhwYIFeP3117F+/XocPXoU3bt3R9++fTFlyhRMnToVn376KQDg9OnTWLZsGaKiorBt2zbceOONJT6x56OPPoquXbvi448/xjfffINbbrkFSUlJmDp1Kl599VX07t0baWlpiIqKwvTp0zFw4EA8+OCDyM3NxenTp8vjrSgzBgwiIgpMRdQ0VISVK1fixhtvRGhoKGJiYnDhhRfip59+Qq1atfLMl52djQkTJiApKQmhoaHYunVrqV5rwYIFAICLL74YKSkpSE1NRe/evXH33XdjxIgRGDp0KJo2bYru3btj7NixyM7OxtVXX434+HifrK+vsQ8GERFRGTz//POIiYnB+vXrkZiYiCwf7o8mT56Mt956C+np6ejduze2bNmCvn37YsWKFWjSpAlGjx6N2bNn++z1fMmrgCEiu0Rkg4gkiUiic1q8iKxyTRORHuVb1CKwBoOIiHwgOjoaJ0+eBAD06dMH8+bNQ25uLpKTk7FixQr06NEjzzwAcOLECcTGxiIkJATvvPMOcnNzS/y6ffr0wZw5cwDY0SUNGjRArVq1sH37dnTq1An33Xcfunfvji1btmD37t2IiYnBbbfdhltvvRXr1q3zzcr7WEmaSPqp6lGP+88AeFxVvxCRy533L/Jl4bzGgEFERD5Qv3599O7dGx07dsSgQYPQuXNndOnSBSKCZ555Bo0bN0b9+vURGhqKLl26YPTo0Rg/fjyuvfZazJ49G5dddhlq1KhR4td97LHHMHbsWHTu3BnVq1fHrFmzAAAvvPACli9fjpCQEHTo0AGDBg3C3Llz8eyzzyI8PBw1a9YM2BoMUdXiZxLZBSDBM2CIyBIAb6vqPBG5EcCVqnpTUctJSEjQknZ88Ur//sCpU8D//uf7ZRMRUYXZvHkz2rVr5+9iUAEK2jYislZVEwqa39saDAWwVEQUwBuqOh3AnQCWiMhUWFNLgcfkiMg4AOMAoHnz5l6+XAlFRAB//FE+yyYiIqIS8zZgXKCq+0WkEYBlIrIFwHUA7lLVBSIyDMB/AVya/4nOMDIdsBoMH5U7r8hIdvIkIqKAtGTJEtx33315prVs2RILFy70U4kqhlcBQ1X3O6+PiMhCAD0AjAIwyTnLhwDeKpcSeoN9MIiIKEANHDgQAwcO9HcxKlyxR5GISA0RiXbdBjAAwEYABwBc6JztYgDbyquQxWLAICIiCije1GDEAFjoPBd8GID3VPVLEUkD8KKIhAHIgLOfhV8wYBAREQWUYgOGqu4A0KWA6SsBnFcehSoxDrRFREQUUIJjJE/WYBAREQUUBgwiIqJSqlmzZqGPeXta96SkJHz++efFzvftt99i8ODBhT4+c+ZMTJgwodjlVJTgCRi5uXYhIiIKAL4OGJVNcJxNNSLCrrOygGrV/FsWIiLyiTvvBJKSfLvM+PiiT9I6efJkNGvWDLfffjsAG8I7LCwMy5cvx7Fjx5CdnY0nn3wSQ4YMKfa1Jk+ejM2bNyM+Ph6jRo3CP/7xD/zjH/9AYmIiwsLC8J///Ae9e/fGI488gvT0dKxcuRL3338/WrZsiUmTJiEjIwPVqlXDjBkzcO6555ZoPXft2oWxY8fi6NGjaNiwIWbMmIHmzZvjww8/xOOPP47Q0FDUrl0bK1aswK+//ooxY8YgKysLDocDCxYsQJs2bUr0egUJjoARGWnXmZkMGEREVGrDhw/HnXfe+WfA+OCDD7BkyRJMnDgRtWrVwtGjR/GXv/wFV111FZxHVxZqypQpmDp1Kj799FMAwHPPPQcRwYYNG7BlyxYMGDAAW7duxRNPPIHExES88sorAIDU1FR8//33CAsLw1dffYUHHnjgz1O5e+uOO+7AqFGjMGrUKLz99tuYOHEiPv74YzzxxBNYsmQJmjRpguPHjwMAXn/9dUyaNAkjRoxAVlZWqU7WVpDgCxhERBQUiqppKC9du3bFkSNHcODAASQnJ6Nu3bpo3Lgx7rrrLqxYsQIhISHYv38/Dh8+jMaNG5do2StXrsQdd9wBAGjbti1atGiBrVu3njHfiRMnMGrUKGzbtg0iguzs7BKvx48//oiPPvoIADBy5Ejce++9AIDevXtj9OjRGDZsGIYOHQoA6NmzJ5566ins27cPQ4cO9UntBRBMfTAABgwiIiqz66+/HvPnz8e8efMwfPhwzJkzB8nJyVi7di2SkpIQExODjIyMcnv9hx9+GP369cPGjRvxySef+PS1Xn/9dTz55JPYu3cvzjvvPKSkpOCmm27C4sWLUa1aNVx++eX45ptvfPJawREwXH0wGDCIiKiMhg8fjrlz52L+/Pm4/vrrceLECTRq1Ajh4eFYvnw5du/e7dVyoqOjcfLkyT/v9+nTB3PmzAEAbN26FXv27MG55557xnwnTpxAkyZNANiRIaXRq1cvzJ07FwAwZ84c9OnTBwCwfft2nH/++XjiiSfQsGFD7N27Fzt27ECrVq0wceJEDBkyBL/88kupXjO/4AgYrhoMDrZFRERl1KFDB5w8eRJNmjRBbGwsRowYgcTERHTq1AmzZ89G27ZtvVpO586dERoaii5duuD555/H+PHj4XA40KlTJwwfPhwzZ85EZGQk+vXrh02bNiE+Ph7z5s3Dvffei/vvvx9du3ZFTk5Oqdbh5ZdfxowZM9C5c2e88847ePHFFwEA99xzDzp16oSOHTuiV69e6NKlCz744AN07NgR8fHx2LhxI2655ZZSvWZ+olo+JzgtSEJCgiYmJvp+wYsWAVdfDaxdC3Tr5vvlExFRhdi8eTPatWvn72JQAQraNiKyVlUTCpo/uGow2ERCREQUEILjKBL2wSAiIj/ZsGEDRo4cmWdaZGQkVq9eXS6vN2PGjD+bPFx69+6NV199tVxer7SCI2CwDwYRUdBQ1WLHmAgknTp1QpKvRwQrwpgxYzBmzJgKez3AtklJsYmEiIgCRlRUFFJSUkq1Q6PyoapISUlBVFRUiZ4XXDUYDBhERJVa06ZNsW/fPiQnJ/u7KOQhKioKTZs2LdFzGDCIiChghIeHo2XLlv4uBvmAV00kIrJLRDaISJKIJHpMv0NEtojIryLyTPkVsxieJzsjIiIivytJDUY/VT3quiMi/QAMAdBFVTNFpJHPS+ct1mAQEREFlLJ08vwHgCmqmgkAqnrEN0UqBQYMIiKigOJtwFAAS0VkrYiMc047B0AfEVktIt+JSPeCnigi40QkUUQSy63TDgMGERFRQPG2ieQCVd3vbAZZJiJbnM+tB+AvALoD+EBEWmm+Y4tUdTqA6YANFe67onvgQFtEREQBxasaDFXd77w+AmAhgB4A9gH4SM0aAA4ADcqroEUKCwNE2MmTiIgoQBQbMESkhohEu24DGABgI4CPAfRzTj8HQASAo4Utp1yJWDMJazCIiIgCgjdNJDEAFjqHbQ0D8J6qfikiEQDeFpGNALIAjMrfPFKhGDCIiIgCRrEBQ1V3AOhSwPQsADeXR6FKJSKCAYOIiChABMe5SACrwWAfDCIiooAQXAGDNRhEREQBgQGDiIiIfI4Bg4iIiHwueAJGRAT7YBAREQWI4AkYrMEgIiIKGAwYRERE5HMMGERERORzwRMwONAWERFRwAiegMGBtoiIiAJGcAUM1mAQEREFBAYMIiIi8rngCRjsg0FERBQwgidgsA8GERFRwAiugMEaDCIiooAQXAHD4QBycvxdEiIioirPq4AhIrtEZIOIJIlIYr7H/p+IqIg0KJ8ieiky0q5Zi0FEROR3YSWYt5+qHvWcICLNAAwAsMenpSqNiAi7zsoCatTwb1mIiIiquLI2kTwP4F4A6oOylA1rMIiIiAKGtwFDASwVkbUiMg4ARGQIgP2qur6oJ4rIOBFJFJHE5OTkMha3CAwYREREAcPbJpILVHW/iDQCsExEtgB4ANY8UiRVnQ5gOgAkJCSUX00HAwYREVHA8KoGQ1X3O6+PAFgI4EIALQGsF5FdAJoCWCcijcupnMVz9cFgwCAiIvK7YgOGiNQQkWjXbVitxU+q2khV41Q1DsA+AN1U9VC5lrYorhoMDrZFRETkd940kcQAWCgirvnfU9Uvy7VUpcEmEiIiooBRbMBQ1R0AuhQzT5yvClRqDBhEREQBI3hG8mQfDCIiooARPAGDfTCIiIgCRvAFDNZgEBER+R0DBhEREflc8AQM9sEgIiIKGMETMFiDQUREFDCCL2CwkycREZHfBV/AYA0GERGR31X6gJGbCwwbBrw7P8omMGAQERH5XaUPGKGhwNKlwOqfQoCQEAYMIiKiAFDpAwYAxMYChw7BmknYB4OIiMjvgiJgNG4MHDwICxiswSAiIvK7oAgYeWowGDCIiIj8LigChqsGQ8MjGDCIiIgCQFAEjNhY4PRpIC2iHvtgEBERBYCgCBiNG9v1wZAmrMEgIiIKAF4FDBHZJSIbRCRJRBKd054VkS0i8ouILBSROuVb1MLFxtr1IYllwCAiIgoAJanB6Keq8aqa4Ly/DEBHVe0MYCuA+31eOi/9WYOhjRkwiIiIAkCpm0hUdamq5jjvrgLQ1DdFKrk/azA0hgGDiIgoAHgbMBTAUhFZKyLjCnh8LIAvCnqiiIwTkUQRSUxOTi5tOYtUrx4QHg4czG3ETp5EREQBwNuAcYGqdgMwCMDtItLX9YCIPAggB8Ccgp6oqtNVNUFVExo2bFjmAhdExJpJDuU0YA0GERFRAPAqYKjqfuf1EQALAfQAABEZDWAwgBGqquVURq80bgwcdMQAhw/7sxhEREQELwKGiNQQkWjXbQADAGwUkcsA3AvgKlU9Xb7FLF5sLHAot6GNuHXa78UhIiKq0sK8mCcGwEIRcc3/nqp+KSK/A4gEsMz52CpV/Xu5lbQYjRsDP6bXtju7dgHt2/urKERERFVesQFDVXcA6FLA9NblUqJSio0FklOjkI0whG/fzoBBRETkR0ExkifgHgvjCBoBO3b4tzBERERVXNAEDNdYGAert2bAICIi8rOgCRiuGoxDMZ2B7dv9WxgiIqIqLmgCxp81GLXbsQaDiIjIz4ImYMTE2PWhGmdbwHA4/FsgIiKiKixoAkZkpA0Z/ucp2w8e9HeRiIiIqqygCRiAc7jwXOdw5GwmISIi8pugChixscDB087BttjRk4iIyG+CKmC0agX8tjsSKiGswSAiIvKjoAoY3boBx44Jdp/VkwGDiIjIj4IqYHTtatc/17uYTSRERER+FFQBo3NnIDQUWBfagzUYREREfhRUAaNaNaBdO+Dn9LbAkSNAaqq/i0RERFQlBVXAAKyZZN3RZnbnv//1b2GIiIiqqKALGN26AQdTInGo7zDg6aeBkyf9XSQiIqIqJ+gCxp8dPYf+H3D0KPDCC/4tEBERURXkVcAQkV0iskFEkkQk0TmtnogsE5Ftzuu65VtU78TH2/W6tHOAa64Bpk4FUlL8WygiIqIqpiQ1GP1UNV5VE5z3JwP4WlXbAPjaed/vatcGWrcGfv4ZwGOPWUfPefP8XSwiIqIqpSxNJEMAzHLengXg6rIXxze6dgXWrQPQqRNQvTrHxCAiIqpg3gYMBbBURNaKyDjntBhVdZ2y9BCAmIKeKCLjRCRRRBKTk5PLWFzvdOsG7NwJHDsuQFwcx8QgIiKqYN4GjAtUtRuAQQBuF5G+ng+qqsJCyBlUdbqqJqhqQsOGDctWWi91727Xa9YAaNnS0gYRERFVGK8Chqrud14fAbAQQA8Ah0UkFgCc10fKq5Al1aMHEBIC/Pgj7AxoO3cCWmD+ISIionJQbMAQkRoiEu26DWAAgI0AFgMY5ZxtFIBF5VXIkoqOBjp2dAaMli2to+exY/4uFhERUZXhTQ1GDICVIrIewBoAn6nqlwCmAOgvItsAXOq8HzB69gRWrQIcLVraBPbDICIiqjBhxc2gqjsAdClgegqAS8qjUL7QsyfwxhvAJm2HjoA1kyQkFPc0IiIi8oGgG8nTpWdPu/5xf3O7wY6eREREFSZoA0abNkD9+sCPSdXsBgMGERFRhQnagCFitRh/dvRkHwwiIqIKE7QBA7CAsWUL8EeTjqzBICIiqkBBHzAAYFV4X2D3bsDh8G+BiIiIqoigDhg9egBhYcDKtHggKws4cMDfRSIiIqoSgjpg1Khhw4Z/u5tjYRAREVWkoA4YAHDRRcBP22ojDTXYD4OIiKiCVImAkZMj+AEXMGAQERFVkKAPGL17Wz+Mb6OvZBMJERFRBQn6gFGjhnX2/Db0EuCHH3hWVSIiogoQ9AEDcPbDSD0HaTsOAxs2+Ls4REREQa/KBIxcRwhWog/w8cf+Lg4REVHQqxIBo1cvIDwcWN7kZmDhQn8Xh4iIKOhViYBRowbQty8wO3UIUpO2A7t2+btIREREQa1KBAwAePpp4NDJmvg/PMxmEiIionLmdcAQkVAR+VlEPnXev0RE1olIkoisFJHW5VfMsuvRAxg7FngBd2LLe+v8XRwiIqKgVpIajEkANnvcnwZghKrGA3gPwEO+LFh5+Ne/gBqROZj0081sJiEiIipHXgUMEWkK4AoAb3lMVgC1nLdrAwj4M4k1agTcOykTSzEAu5+e4+/iEBERBS1vazBeAHAvAM/znd8K4HMR2QdgJIApPi5bubh6VB0AwJJ3jwBpaX4uDRERUXAqNmCIyGAAR1R1bb6H7gJwuao2BTADwH8Kef44EUkUkcTk5OQyF7is2rUDmjbKxJL0vsDs2VAFxo8HFizwd8mIiIiChzc1GL0BXCUiuwDMBXCxiHwGoIuqrnbOMw9Ar4KerKrTVTVBVRMaNmzoizKXiQgwcHAEvgodiOwXXsWaVQ5Mmwa8+aa/S0ZERBQ8ig0Yqnq/qjZV1TgANwD4BsAQALVF5BznbP2RtwNoQLtskCA1tyZWb6uLV+/fCwBYs4anKSEiIvKVsNI8SVVzROQ2AAtExAHgGICxPi1ZObrkEiAkRDGn9gTM+64xYmIUhw8Ltm8HWgf0wbZERESVQ4kG2lLVb1V1sPP2QlXtpKpdVPUiVa0050KvWxc4/3zB68duQBYi8eLFiwFYLQYRERGVXZUZyTO/yy6z64sbrMd1i29BjeoOBgwiIiIfqbIB46qrgJAQ4K6nGiI0Kx3n1djCgEFEROQjpeqDEQzi44EjR4D69c8Ckh9Fj4c+w8vHz0VWVigiIvxdOiIiosqtytZgAED9+s4b992HHuecQGZ2KDYsO+TXMhEREQWDKh0w/hQWhh5v3gYAWHPX+0Burp8LREREVLkxYDg179MCjWqlY822OsCjj/q7OERERJUaA4aTCNCjbzUsr3kl0p96DvjsM38XiYiIqNJiwPAwYQKwO60BJtV/Fxg5ErppM77/Hjh5smTLOXwYGDYMSEkpn3ISEREFOgYMDwMHAg88ALyZci3+nX03BnY9gr59geuuAxyO4p/v8tlnwIcfAsuXl19ZiYiIAhkDRj6PPw5ceCEwOe0hrMruhpurL8DSpcDTT3u/jHXr7HrTpvIpIxERUaCrsuNgFCYsDJg3z86uOvb8PYi94W/QzGw8+sgwtGktuGKwoGbNopfBgEFERFUdazAKEBMDPPQQcFb/DpD1SXj9gnfRVjfjhhsFtWopevcuvH9Fbi6QlGS3f/214spMREQUSBgwitO0KWp+sxirpnyHT8KuwcPVnkPimlyMGFHwcBm//QakpwNNmtjtnJyKLzIREZG/MWB4IyQE0feNx+D1T+Hxc+bg5Zx/YMkS4JGHFR9+CFx+OTBtms26dq1djxgBZGcD27f7r9hERET+woBREu3bA6tW4babMzAaM/D0vwTDhgFLl9rYXFlZ1v+iWjXgmmvsKeyHQUREVREDRklFRkJmz8JrDx7AI3gcn7X7JxbN+APJycCiRRYwunQBOna02RkwiIioKmLAKA0RVHvyQTw+rx0u3z0Nl93bGc1jMjB9OvDzz0C3bkDNmkCLFu6OnqtXAwsWAKr+LToREVFF8DpgiEioiPwsIp8674uIPCUiW0Vks4hMLL9iBqhhw4BVqxBasxrGHp6Cr76yUT+7dbOHO3SwGoysLOD6623ArjFjgNOn/VtsIiKi8laSGoxJADZ73B8NoBmAtqraDsBcH5ar8ujUCVi3DmNHZCIEdlhJt8TpwPbtaN8e2LIFePttYO9eyyOzZwNt2wJnnw1ERwMNGwLnngv85z9+Xg8iIiIfEvWizl5EmgKYBeApAHer6mARWQPgJlX93dsXS0hI0MTExFIXNtBdcX4yvk6sjVRHNCKQhRmtnsDYHQ+jbh0HWrcJwerVwJdfAq++CtSuDTRqBGRkAD/8AOzcCRw4YKGDiIioMhCRtaqaUNBj3o7k+QKAewF47v7OBjBcRK4BkAxgoqpuK+DFxwEYBwDNmzcvSbkrndc+aIitW4GIdtuB999H++nrAQDHjofg4d7fQNAPgwYJBg3K+7xVq4CePYE5c4C//90PBSciIvKxYptIRGQwgCOqujbfQ5EAMpzJ5U0Abxf0fFWdrqoJqprQsGHDMhc4kLVoAfTvD6BpU+Cee9Bu7bsAgPjqWzH4hUuA884Dpk8/4/Ss558PxMfbWBqqwKFDwO23A+vXu+dZtw74+GN2EiUiosrBmz4YvQFcJSK7YP0sLhaRdwHsA/CRc56FADqXSwkrsVq1gGeeAd5c3hoyY4aNvPW3vwFnnQVMmmTtIgBEgPHjgV9+sTOx9u8PvPaaBY/XXgPuuQfo3t3G1hg4ENixo/jXzj/K6IIFwNChdpSLr+3YAaxc6fvlEhFR5eVVH4w/Zxa5CMA/nX0wpgDYqqpvO6c/q6rdi3p+sPfBKJYqsGaNdcJ4/307B/zttwNPPYVTIdE46yzg1CkgNBSYNQuYMcMG8QIsl3ToADz4oIWHlSuBrl3tsR07bNFnn233N2+2QDJrFnDttTZ/mzaWZ0SAW28FXnzRBgTzhf79gcREOz9LCA98JiKqMorqgwFV9foC4CIAnzpv1wHwGYANAH4E0KW455933nlKTvv2qd5+u6qIarNmqi+8oHcO3a2hoQ5duNBmyc1VffNN1W+/dT9tzx7Vs85SbdtW9dQp1U2bVOvUUY2JUT12zOa5/npVQPWcc1Szs1U//tjuv/mm6l132e2HH/bNahw6pBoSYsvcvNk9/fBhe20iIgpeABK1sMxQ2APlcWHAKMD//qfasaMqoFkI052IU+3bV/XVV1VPnizwKUuX2pYbMUK1RQvV+vVtJ3/77ao//2yP9exp17Nmqfbrp9q8uXuHf+ONqpGRqtu3l734r7xirwOozpxp044fV61ZU3Xq1LIvPy1N9Y8/yr4cIiLyvaICBiu0/a1nT+t8ceAAwr9egrjHRgNHj1rTSatWwPPPA8eP53lK//7AXXfZUSfJyXbo6/jx1l9jzBigTh3ryxEfb/03li+3xYU5jxl69lm7fdddZS/+3Ll2ipboaButFAC++QZISwM+/7zsyx85Eujbl51biYgqmxL1wSirKt8HoyR+/BF45BHgq6/sfps2QEKCXc47Dxntu2HSQ9G4/nrg0kuBEydswK7Dh4Enn7S+GosWAVdfDVSvbgN91avnXvwzzwD33QcMGGBhICTE8kzdunaa+d9/tz4fV1wB9Olj/TvCw/MWce9eoHlze71vvrEyJCZa2Jk2DYiKsmwUGVm6tyA5GYiNtT4kv/xiY5oREVHg8MU4GFTRevYEli2zoLF8ue25V660zqEAokTwxrnnAqcTgF8TULt/f/z3v+3x8svAROeg7VddZaeSP++8vOECAO6800LBoUNA/fpATo69TEoKcM45QOfO9pKLFtn84eFAr17A/PlAgwY27YMP7Hr4cOuc+uyzQHq6Fbt2bQscq1YBF15Yurdg/nz30TDz5xceMBYsAN54A/jiC+sgS0RE/scajMrmyBFg7Vrb+7suBw7YY5ddBvzzn8DFF9vhImWkaudSWbvWTtr24ovW7PL119aKM3CgNY389JO7tuTdd4GbbwYef9wuDz8MPPZY6V6/Tx/gjz9sOPXkZPeJ4/I7/3w7OOfnn618RERUMYqqwWDACAb79wMzZwIvv2xtJPHx1sGiY0egRg0b+KtGjTK/zEcf2Unbuna1c6wA1gdj8GDg4EEb3qN9ewslmzdb/6iOMGQAACAASURBVIlq1YAVK0r+Wrt3A3Fx1vxSuzZwxx0WMNq3zzvfb7/ZuV0A4IUXbHgRT5mZ1gRUv37Jy1AZHTtmoS+MdZMUpFJSrOn2lVesxZj8q6iAwU6ewaBJE+t0sWsX8NZbtlcdNcraRtq2tT1O27Y27dNP7fSupTB0qHUkXbsWuOgi2+EPHmyPxcYCzZpZuGja1PqD9OtnTSSeZ4/99VfgqaeAefMsC3lKSwOWLLFKmrnOU+fddJO9LmBNIfm9+671H2nUCPj227yPZWZa/5TYWOC227wboKwinDxpY675Wnq6NW899JDvl11WGzbYtihoGxKVxNy51qHc2VpMgayww0vK48LDVCtIbq4d/rpokeq776o+9pjq1Ver1q1rx5PWqqV64YV2XOvcuXZcqcOhunu3amKiPb8Ihw/b7Pldd50tfswYu//553Z/2TK7uA6d9bx06KB6xx12qVXLPT0qyuZ36d1btXPnM1czLk51wADVsWNV69VzF93hUL3lFlvW0KF2WG5oqE3bsqXot+/oUdXZs1UfeMCWO2mS6o4dZ8735Zeqb79d9LI8ORw2f40aqn/7W8HzrF+vunixXQ4f9n7ZqqoLF9r6NmigmplZsueWRlqa6vffFz2Pw6H64ov2/gOql15a/uWiklu9WvWHH/xdCu/06mWfpfh4/7x+RoaNLPDmm/55/UADjoNBqmp7nU8/tb1br16q0dH2EQgLc4cPQPXcc1VfftkG1UhJKThNFODZZ+3p771n91NTbafeooVNb9lS9bnnVA8etB+0KVMsHFSrphoebuN6fPKJ6pNPql58seUjlxdesGXMneuetmKFTXvnHQsEgO2gVW3ZgOrjj9v9/fttkLFq1Wxss1mzziz/nj1WntBQe25oqGpsrGpEhL1Ft91mO1VVG5ujTh0bf2TDhuLfm4wM1RtucOe7yEjV5OS883z0kZXNtRmaN3e/njdGjHAPerZgQd7HHA4LRKmp3i+vOBMm2GsVtWN66SWb54orVEeOtPU+fdo3r3/okOp997kHmFNVfeYZ2/YuDod9ZkryPlY1Dodqq1YW1r38qvvNjh32eWrc2L4rKSkVX4ZPPrEy1Kljf0aqOgYMKlhOjurKlfYrPW6c6muv2V/sHj3yVjO0bav6/PO2B965U3XbtgJrOXbtUh0+XPXECfe0vn0tPDz8sGp6esHFyMzM+5yCpKer9uljO/vly+2LfdVVVhuQlmaVL4D9W16/3sLBsGFn/mAePmw1I40a5d3ZbtliA6rWqqX64IOqP/3kXkXPQVddtTP33mv3o6NVBw0quuyqVhsCWHhav95u//vf7scTEy38nH++vfbcuTbPAw8UvswXX1S95hp7/zIyrCyjRqk2aWI7dBeHQ/Xuu215gwcXvBNJT1f94APVa68tOHzld/Cgu1aib9+Cl7lxo81zxRX2+GefuWu0fOH//T9b3k032X3XAHRhYap799q0jz6yaU884ZvXLC85OaV7nsNh37tPP1X97bfSLeOHH9xf9aKWMWeO1QZ6E0IOH1a9807VrVtLV6bCPPmklXPOHLv+6COb/u67VraiKl9zc+13oqxGjbLfnZAQC9lVHQMGldyGDarz51u1xF/+kjdwALYXmzBB9a237O/yDz/k/SvpdPCgb77UqlZr0L69fbldO7f773c/3rKl6pAhVjnToEHh/y5Wr7bnPvKI+36DBhY61q0r/PUfesieN2WKvf4tt7hrbVzNQAMG2CCsnj90a9da4Bk71j3twgutZicnx/JabKzdP3TIPc8tt1igKuhH/5133JviX/9y/6v6/HMLSCEhVmvjcLiHh3flxpdesmU4HLbZxo1TrV3bHouIsED4v/8VsSFU9Z577DXuvNOe98UXeR/PyFDt0kW1YUP3Op08acu+996il+2N9HQbwdZV8fbGGxYQW7a0ck2ebOvXvbs9HhdXbMtfuXA4bCd45MiZjx0+bE1GjRtbmW+4oegy/vpr3tMGHDxo6+v6HISHWw1OScPK3/9uzwWs4rKw9WjXzub58ceil/fDD/bzAOT9zOf3xx/2fXF9Hguzc6eFblcZLrjAQnX16ta0mpmp2rRp8eH1b3+z93nt2qJfryiZmVZzccst9r6FhuY9RUJVxIBBZffzz7bnfPtt1enT7a9zVNSZwaNpU6s6eOkl60iwYoXt6Xxkzx4LEP/4x5lNE2PGuJsYiusbMWyY/UA9/7yFhbi44v9tZWfbj5trR7xrl+3o4uJsaHTA3ep0wQWqS5ao/v679R2Jjc2bvz780OabPNn6jtSrd+b6HDpkNSr9+lktiqrtgD75xHYIF11ktTjVqqlecomFhMxMCyyA6pVX/jkKvU6caM8dPNjKfs89qmefbY9Vr27NF8uWWShr2dI2Y0E7RVWrlq5Z03aImZlWvR4fn7fG5/LLbdmffJL3uX37qnbrVvT77I333nMHG1f+DQmxnd9111nwWLRI/+z3Aah+/XXZX7ekpk+317766rzTc3Ot5isyUvWvf7V/xZ5NevllZFgADQ9XTUqyaSNH2rZ85RULHkOH2jIuucTmz2/RIvsc/PJL3uXWrWu1QGefbZ+PgqxZ4/6K33FH4eu7dKnVILVqZc2ctWsXXJa0NHefrOhod1PHL7/Y9nP1P3I4rJ+W69xKgOq0afZY//722MyZ7oB17bUFl2vaNHf5R40qvPzF+fJLW8bixfb9qFXLtmNRtTp795buszd3rv2R8EcwLgkGDCof6elWPZGUZHuSKVNsr+P6O+F5ad9edfRo6yhw3XVWZ/39975rkFer2gesQ2hxX8pt2+yHELAddf7+EIVxnWzO82RxH39sAWLKFHtLZs7M26UFyNufRFU1K8uW43prfv+94Nd74w2bR8TdtOPqHHvsmP14ucLNLbe4n9evn03r1k11xgz3D2Bysvt1+/Wzsubvl7Fune34Gja0k+hVr26btFs31YED3Z3sXDsqV3V1q1a2+WvVstBT0D/TJ56wdXG933v2WP+Zu+8uuvYovwsvtNfLzbVtWa+e1TCpWqsfYO+LK9jVqeNuSjl82F7z5Zetb49nB95Dh0reubYwa9fa+1injpXHc/1cfYpeecXue3ZKzv9ZUXWf86dGDQusX3+tZzShORzuz0v+EJCUlPf/wMUXW6B1dQz+/HPV8eNt+QV1EJ4wwdalf3/7DBZ0IsPMTNU2bawL17FjFv4A+354ysqymouQEPs8AKqPPmrL7NpV89RMfvutOxQkJNh2dtVMPv20/tm3q1MnazILDT3z/4wr9Fx+udU6REQUv40dDlvXm2/O23/n1lstELmae597rvBtpmo/b+3b27p6fs4OHMjbLLxnj4WWtDR77f/7P/e26tHDgnOg9o9hwKCK5XDYN+ann+zb/eyz9osSG2t7hTZt3FUNIvYLMWiQ1eW/8Ybqd98VfqhKEY4etcVs2uTd/K+8Ys0JWVklWz1v5j92TPWbb6yn+bvvFjzP++9bx9Hi+p9s3Wo/wN27Wz6bOdMO/HF5/nl7Kz/7zD3t0CHbqRT0Fh48aJunKJ98YrU848bZzn/0aOtL0b271dh4HgWTm2ub7ZprbBMPGFB4YPrxRyvr7NlWC+X6ERWxILN4sf3jffdd+3Hv18+aWm67zXaGu3dbsHE1Dbl47hQ9m0ZcJ9wbP952kF98YWX0DH8iVubzz7f7jRq5a4yK4jqb8e7dZ3Yi3bHDXRO0bZuFjKuussdWrLCd3JVX5t0+p09biHMFyH/+03ZEaWkW9Pr2tfcHsHVp1qzgzquuJjFX/4Rjx6x24qyzrLz//reFx4gImx4TYzt3V43PN9/Yv/MxY6y5IzPTmqOGD3cHkvxNYqrWPOP5WFaW+3me7rvP5nvrLbs/ZIi9Pw8/7A6qdepY8B02zML6qVPubevi+iwB9k9/61bN09/mwAF3aGvb1r4zmzbZ/SefLHrbei67a1drpjx92ppSb7zRPV9Wlm2ruLiC/ytNnKh/1q7dfbdN27/fQkpYmAW9Sy5x/xzWrm3BBrDP/8yZtn0A1dat7b0rrsnZdVBgRWHAoMCTkmK/Vo8/bn974+Ptb6/nL39IiP3SnHOO7QHGj7eeiP7oOh7AHA7VVasC9x+Op+xs+xF11R5NnGitb/v32z/UkBD7EQesb0KvXlZr4mp6cl3CwiwoFebLL62ZylU7s3at+7mtWlkfkyNHrH3/kUcsDHTvbrUgNWtabVFmpjVzdepkYdBlwQKb3/OIH1cV/l132b/csDD7OLv6srj+qd9+u/3LbtWq4Fqz5GTbUV9yiVX516plwQ5wHxI8Zozdnz+/4HXPzLT3snZtCzXt21t5PI/2OXLEfVi5a8eXmmrz3X67O6BFRVmYdNVyZGTYV3LkSKtd6NZN9bLLrDo/OvrMJpa//92CoysIuTriegbUxET3ezhkiH2WAduZhoW5y5dfVpZtq2bN3KG/f38LUtddZwEqIsKaIT1r6S691PqIFPVHYfx4W/f33897+Dxw5hFarlqWBx5w1+ykp9t8rs/4DTfY9khNtdqYiAjrv9Sxo9X4PPaY/UG46SZ7zNWkqWp/QKZNs5/AsDD7XIwfb58tz5/CkyftPQsPt2BWUC1TeWDAoMohN9c6Nnz5pdUhP/SQ1fVef7394nnuZUJC7NtWp459QwcMsG/p0qV2+MKBA6Xvmk/lasQI+7HNX3Welmb/2q6+2nbsns1cmZn2Q/7mm7aZC6sVKozDYUHl8suLP7TQ1T/GVV3vCgsbNlgzR1SU1ao8/rg1D731lupTT9mONjLSdhATJuStBTl+3N1sdv31BfaHPsNvv7n7j3geqZSRYWGhqEC5fbs1I8XHW81MQe+XK5i6agdU7TmAhaCZM921Oo0bu3dYt97q7hTasqU95uoDkb8f03ff2WMvvWTbr3FjCzyer6lqwSQ62n30T9++7q96UX2j5szJ27/h44/tOQ0a2Pg1BdWkuWqBHn644KbUzExrinHVvPz+u5X/ySet1qygYDJihP5ZG+ZqEnM1f54+7Q5No0fbdVEdnYsKBrt3WzhzBXRXrUfr1lYrBbi34c03V8xPYFEBg0OFU+WRk2MnPvnuOxv20+GwYTEPHwa2brVTrnp+nqOibGzx5s1telSUneCkf387i9qOHTYMaMeONvyoD87fQsVLT7e3v2ZNf5ekcPfcA0ydCkyYANx9t53or3ZtGx02J8dGs23U6MznnTplo7TWqXPmY8uW2Tl8brjB+4+aqp2UsHNnOydPeZs61db97beBMWNsFN677wZ69ADGjrV5Vq+2r9Hf/gZMmWInQlywwM5GcNVVeZfncAAtWgD79tn9atVsdN/OnfPOl55uw9yfdZbd//RT4Mor7WzPS5aUbB02bLCBi/Of/dklNxcYMcJGE770UhvgeO1ae+yJJ+z9vvpqK8MVV3j3mqdOAXPm2GmhUlLssxEXBwwa5D45ZM+etu4xMfZzVatWydbL04EDwLp1dqqE3bvtXE3Z2e7P6lNP2Yi+V1xhZ82+4ILy+3nzyblIRCQUQCKA/ao62GP6SwDGqmqxPxcMGFSujh+3b11ysp0l7fff7dfm4EH7dh0/bueYL0jNmvbrdtZZNra45+1GjWy49bp1gZYteaKPKkDVTvHTtKnd/+47O4dgeDjw/fdA9+7+LV95yc0Ftm1zn9+nMNnZhe/A80tMBNavt/eyUyd3iCiKwwHcfz8wbJid8cDXVIH//tfOPJ2ebsEnK8uCT/36Vt79+71fR2988IGdefqtt4C//tV3yy3M1Kl2LqcTJ4AOHYDPPrOw52u+Chh3A0gAUMsVMEQkAcAkANcwYFCl8Pvvdl766tWBVq3s7+jGjfZX4MABCyMHDtglI+PM51erBnTpYn9PGjSwWpFTp2w5MTF2Xph+/exkLBRUFi2yf+mXXurvkpCv7N9vtUodOlgN03XXWa3NxIl29mhfUrX/P926VVxl6alTdu6WRYuAhQuB0FDfv0aZA4aINAUwC8BTAO5W1cHOGo2vANwEYBsDBgUVVYv+Bw/a2dfS0uyXaP16+5Vw/TJlZtpeJzTUak4cDnt+x45W27F/vzXjNGxoNSGuy7nn2qkgGzYEdu60Zp6WLYHWrW1ZaWkWZiIi/Ps+EFUhiYnWtPDyy0CbNv4uTeXgi4AxH8C/AEQD+KczYEwCEKKqz4tIWmEBQ0TGARgHAM2bNz9v9+7dpV0PosCWmwvs2WONtx99ZM00TZpY88rRoxZUjhyx264gkl9IiPuxqChr/O7Rw2pL6tWzANKhg73W9u0Wgpo0sUvdumy+IaIKVaaAISKDAVyuquNF5CIA/4QFhg8AXKSqOUUFDE+swSCCNads2WIdVo8ds6aaRo2sJmPrVqs/jY622o/vv7fOq1lZ3i27Rg3r1Nq2LdCsmTUFuS7VqrlvN2sGdO1qIYaIqJTKGjD+BWAkgBwAUQBqAch0XlyN1M0B7FDV1kUtiwGDqBRUrWH46FELIJs2WTNK69Z2aMOBAxZGjh+3y86dwObNNj093QJNQcLDLdw4HPYazZrZMqtXt6YfwAJIrVrW+61bNwswrr4p1arZY5GRdj8315qP0tOtJ1/TpgwwREHOJ508nQu6CM4mknzTWYNBFKiys22nn55uQeX0aQsqq1dbp1dXs8ru3XY/K8sdGjIyrKdYYU06IhZKzj7bGrCPHnU/FhpqfVG6dLHnnz5tDdsXX2zPOX7c+qeIWBlcR+o0auTue/LHH9YUFB/v2y79ROQTRQUMNtgSBbvwcLt4HnjfoQNwzTXePT8jww73/flnCyue4SM52Y7C2bbNDvofNMg6rh44YCHmp5+Ar7+214+KAhYvBv7976JfTwRo3NhChqvPVosWwL33Wq3Jl19ap9hOnSx4dOli6/PHH1aW1FRb17Aw6xOzf78d4XP22bbcmjXtWMQaNUr+XhKR1zjQFhFVnLQ0YOVKOzqnXj2rtVC1ZpyTJy0kHDxoweD0aQsQsbHAtGk2ShFgzS/Nm1uYSEsrfVlatwbOOcc63u7ebQHorLOsTNnZ1uG2eXNrOjp50kLTWWfZ4AwJCXZo87ZtdvRP+/YWjPbssealVq0sDBEFOZ81kZQVAwYRlYqqNcFERlrNhYg1u+zcCSQlAb/+akfadOxozSypqRYSmje3UHD4sDX/HD1qoeTAATvkeNs2q9WIi7NgcOCAPR4ebqHHVQNSvbotxxUgRPKOGhsWZn1QPKfFxFgZs7LctSYNGth1zZoWWk6dspqV+Hir+cnNten791vY6tzZhmbMzbXyOxxWY8ORZylAMGAQEZVWTo71JxGx4LJ4sXW07djRakB27LCwEh5utRkRERYG9u6154WHW2hJSbGAk5Ji96OjrZZj27aCa2IiIgo/eqhOHQtGDRu6x1g5fdr6q5w8aeOsnH22lWHzZitH48YWvkTc4SQkxMJV587WP8ZzHsDKumWLHQ6tamXu2tWuicCAQUQUuBwOCwapqVYTUr26jWsSGWk1Mz/+aEGkdWubd/16Cw2ucVWSk+06MtJCRc2a1nyzc6fVdLRrZ69z8KA7KADupqlDh/LWvISEWHNRaKiFlfxELIw4HFYDI2JhKDLSLiL2OidOWJl79LBmrvR0e06dOhZQMjJs+aGhVmZVK0tqqi2/UycLPLVr2/OOHLHA1bGjTaOAwIBBRFTVOBwWFoqTlmb9WXbtsh18Sort/LOy3GOqNGhgyzp6FFizxuYPD3d3lM3MtEtWljXn1KljoWHzZmvaSkuz4BESYo8XxrXM48eLLnOrVhZCWrSwkLNli5W7Xj2r0WnTxmpxUlOtDIcOWflCQ4HevW04/3r1rCypqfb4nj027549FmIuvNCaxXJzz7w4HNbU1ayZrfOmTTamTb9+Fg6rEAYMIiLyD4fDdsquw6FPn7aderVqFkIcDncTkat55sgRq71JTraakJAQawYKCbEanKQkq6HZtcuW066dPX7smIWF335zL7NpU/eYLKdO2VgthYUc1/gtGzdaOUujUyerYcnKshDTpo3VSv3yi5UrJ8fWsX59C3B167rHqnENhJeTY68fFZX3NAP169tyT52yx0+dstDUvLk9tmuX1YY1a2anb23evNz76jBgEBFR1aFqTULR0Wf2Fzlxwo5ISk93N8+4zqDsOpQ7K8sOyz5+3ObJfwkJsfCzZ48Fpw4dLBgsXWqHZbtON5ucbH1sMjLsSKP27a0ZyeGwx/butfJ4hq/Tp+1+tWr2vGPHSv8+VK9uAaZOHTslcP36pV9WIRgwiIiI/EE1bw1OSWVnW9NUcrI1A0VEWDNSjRoWILKz7TDro0etw26rVla78+OP1gH5+HELKXPmlMuh0xxoi4iIyB9cI9WWVni41bDExhY+T1xc3vt169rQ/n7mRQ8gIiIiopJhwCAiIiKfY8AgIiIin2PAICIiIp9jwCAiIiKfY8AgIiIin2PAICIiIp9jwCAiIiKfq9CRPEUkGcDuclp8AwBHy2nZgYLrGDyqwnpWhXUEqsZ6ch2Dh6/Xs4WqNizogQoNGOVJRBILG640WHAdg0dVWM+qsI5A1VhPrmPwqMj1ZBMJERER+RwDBhEREflcMAWM6f4uQAXgOgaPqrCeVWEdgaqxnlzH4FFh6xk0fTCIiIgocARTDQYREREFCAYMIiIi8rlKHzBE5DIR+U1EfheRyf4uj6+ISDMRWS4im0TkVxGZ5Jz+mIjsF5Ek5+Vyf5e1LERkl4hscK5LonNaPRFZJiLbnNd1/V3O0hKRcz22VZKIpIrIncGwHUXkbRE5IiIbPaYVuO3EvOT8nv4iIt38V3LvFbKOz4rIFud6LBSROs7pcSKS7rFNX/dfyUumkPUs9DMqIvc7t+VvIjLQP6UumULWcZ7H+u0SkSTn9Eq5LYvYb/jne6mqlfYCIBTAdgCtAEQAWA+gvb/L5aN1iwXQzXk7GsBWAO0BPAbgn/4unw/XcxeABvmmPQNgsvP2ZAD/9nc5fbSuoQAOAWgRDNsRQF8A3QBsLG7bAbgcwBcABMBfAKz2d/nLsI4DAIQ5b//bYx3jPOerTJdC1rPAz6jzd2g9gEgALZ2/waH+XofSrGO+x58D8Ehl3pZF7Df88r2s7DUYPQD8rqo7VDULwFwAQ/xcJp9Q1YOqus55+ySAzQCa+LdUFWYIgFnO27MAXO3HsvjSJQC2q2p5jWZboVR1BYA/8k0ubNsNATBbzSoAdUQktmJKWnoFraOqLlXVHOfdVQCaVnjBfKyQbVmYIQDmqmqmqu4E8DvstzigFbWOIiIAhgF4v0IL5WNF7Df88r2s7AGjCYC9Hvf3IQh3wiISB6ArgNXOSROc1VlvV+bmAycFsFRE1orIOOe0GFU96Lx9CECMf4rmczcg7w9YMG1Hl8K2XbB+V8fC/gG6tBSRn0XkOxHp469C+VBBn9Fg3JZ9ABxW1W0e0yr1tsy33/DL97KyB4ygJyI1ASwAcKeqpgKYBuBsAPEADsKq9SqzC1S1G4BBAG4Xkb6eD6rV41X6Y6lFJALAVQA+dE4Ktu14hmDZdoURkQcB5ACY45x0EEBzVe0K4G4A74lILX+VzweC/jPq4UbkDf+VelsWsN/4U0V+Lyt7wNgPoJnH/abOaUFBRMJhH5I5qvoRAKjqYVXNVVUHgDdRCaomi6Kq+53XRwAshK3PYVc1nfP6iP9K6DODAKxT1cNA8G1HD4Vtu6D6rorIaACDAYxw/mDD2WSQ4ry9FtY34Ry/FbKMiviMBtu2DAMwFMA817TKvC0L2m/AT9/Lyh4wfgLQRkRaOv8h3gBgsZ/L5BPONsH/Atisqv/xmO7ZPnYNgI35n1tZiEgNEYl23YZ1ntsI24ajnLONArDIPyX0qTz/kIJpO+ZT2LZbDOAWZ6/1vwA44VFlW6mIyGUA7gVwlaqe9pjeUERCnbdbAWgDYId/Sll2RXxGFwO4QUQiRaQlbD3XVHT5fOhSAFtUdZ9rQmXdloXtN+Cv76W/e72W9QLrBbsVljAf9Hd5fLheF8CqsX4BkOS8XA7gHQAbnNMXA4j1d1nLsI6tYL3R1wP41bX9ANQH8DWAbQC+AlDP32Ut43rWAJACoLbHtEq/HWGB6SCAbFjb7V8L23awXuqvOr+nGwAk+Lv8ZVjH32Ht1q7v5evOea91fo6TAKwDcKW/y1/G9Sz0MwrgQee2/A3AIH+Xv7Tr6Jw+E8Df881bKbdlEfsNv3wvOVQ4ERER+VxlbyIhIiKiAMSAQURERD7HgEFEREQ+x4BBREREPseAQURERD7HgEFEFUZELhKRT/1dDiIqfwwYRERE5HMMGER0BhG5WUTWiEiSiLwhIqEikiYiz4vIryLytYg0dM4bLyKrnCfFWug6KZaItBaRr0RkvYisE5GznYuvKSLzRWSLiMxxjj4IEZkiIpucy5nqp1UnIh9hwCCiPESkHYDhAHqrajyAXAAjYCOSJqpqBwDfAXjU+ZTZAO5T1c6w0QBd0+cAeFVVuwDoBRtFEbAzPN4JoD1sNNfeIlIfNhx1B+dynizftSSi8saAQUT5XQLgPAA/iUiS834rAA64Twj1LoALRKQ2gDqq+p1z+iwAfZ3nmGmiqgsBQFUz1H3ejjWquk/tJFpJAOIAnACQAeC/IjIUwJ/n+CCiyokBg4jyEwCzVDXeeTlXVR8rYL7Snmcg0+N2LoAwVc2Bna1zPuwspV+WctlEFCAYMIgov68BXCcijQBAROqJSAvY78V1znluArBSVU8AOCYifZzTRwL4TlVPAtgnIlc7lxEpItULe0ERqQk7GdznAO4C0KU8VoyIKk6YvwtARIFFVTeJyEMAlopICOzsk7cDOAWgh/OxI7B+GoCd/vl1Z4DYAWCMc/pIAG+IyBPOZVxfxMtGA1gkIlGwGpS7fbxaRFTBeDZVIvKKiKSpak1/l4OIKgc2kRAREZHPsQaDdj3fdwAAAC5JREFUiIiIfI41GERERORzDBhERETkcwwYRERE5HMMGERERORzDBhERETkc/8f6twPgcJLINQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [loss2, val_loss2], \n", " ['total_loss', 'val_total_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 717, "status": "ok", "timestamp": 1637569088341, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "jGDW0u2Q72Cu", "outputId": "01fe748f-2f84-4669-f556-43d3baf1c755" }, "outputs": [ { "data": { "image/png": "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A7t376Z169ZMnDiRevXqcc4553D66acza9Ystm3bxksvvUT37t35/vvvGTFiBPv37yc7O5u3336b+++/n59//pmEhATOO+88BgwYkKdMM2fOZODAgSxduhSAJ598kp07dzJu3DhWrlzJDTfcQFpaGhEREbz11luMHTuWZcuWkZCQwPDhw+ncuTNPPvkk77//Plu2bGHkyJGsWrWKGjVq8OKLL9KxY0fGjRvH2rVrWbVqFWvXruW2224rVu2JqnL33Xfz0UcfISLcd999DB06lI0bNzJ06FB27NhBZmYmEyZM4KyzzuLaa68lKSkJEWHkyJHcfvvtRS7jcMIvhHhNiHPOhdTQoUO57bbbDoaQN998k48//pgxY8ZQp04dNm/ezBlnnMGFF16Y52q2hVmwYAFLly6lZcuWvPjii8TFxfHdd9+xb98+zj77bPr06cPy5ct59913mTt3LjVq1Dh4Qbyrr76aZ599lp49e/LAAw/w0EMP8XQgRWVmZjJv3jw+/PBDHnroIT799FNeeOEFbr31Vq644gr2799PVlYW48ePZ+nSpSQHEt0XX3yRp0yrV68utOxXXHEFY8eOZfDgwezdu5fs7GzGjx9/MHQE5xf04IMP0rlzZ2bMmMHnn3/O1VdffXC5y5cvZ9asWWRkZNCmTRtuvPFGoqKiDvvevfPOOyQnJ7No0SI2b97MaaedRo8ePXjttdc4//zzuffee8nKymL37t0kJyeTkpJyMExt27atyG1TFA8hzjkXpoqqsagonTt3ZtOmTWzYsIG0tDTq1atHkyZNuP3225k9ezbVqlUjJSWF1NRUmjRpUuT8unbtSsuWLQGYOXMmixcvZtq0aQBs376dFStW8OmnnzJixAhq1KgBQP369dm+fTvbtm2jZ8+eAAwfPpxLL7304HyHDBkCwKmnnnowSJx55pk8+uijrF+/niFDhnDiiScWWabCZGRkkJKSwuDBgwGICV5o9TDmzJnD22+/DUCvXr1IT09nx44dAAwYMIDo6Giio6Np3LgxqampNGvWrMj5/fa3vyUiIoL4+Hh69uzJd999x2mnncbIkSM5cOAAF110EQkJCbRq1YpVq1Zxyy23MGDAAPr06VNkeYvifUKcc85VuksvvZRp06bxxhtvMHToUKZOnUpaWhrz588nOTmZ+Ph49haz+bxmzZoHH6sqzz77LMnJ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dx+czY4dqlu35sx2wwbVWrWspiP3zrIg2dl2pHH+0BD09deqNWvaocWpqXZr3Vr1nHPs9X//24o5Z47qs8/a4yeeKHheU6fa6x9+eOhrjz9ur/XpY+Fm40YLM+edd+jOff36nNBTlMcey1sTNGJE3nUfONDWb80am2f//qp16+Z9P3ObMsXmM3hwzrCnn7ZhL7106PiZmapbthSvrMWRmWkB7aST7CNTmB077FDvFi3sdsEF5VeGe+6xjHy45TtXEfL/iQhnHkJcxcrOtqqLMWOsquOMM6zKIbg3FVE97jg7ociNN1p1x5w5tvdR1T17yq8oX35pzTg1auQs/o037LVt26z5JXj+kwsvtJqBguzbZxU+ffrkDEtNtfORgDUT5Z42GGqee87Oj/Lxx6p9+9qwAQOK/kFat84y3Pnn21tzzz027cSJVhvzz3/a8yefzJlm4UIbdt99h87vgw9sXWNjreZo82YbnpBg08TF5T11zMqVqmeeaeMvW3bo/HbutOVt23b49cjts89ytsGUKQWPs3evbYdq1VRnz7amtjp1yic0pKWpRkfb8h980IZlZ1suLm4wrCxF1UxlZqrOn1/65rdfflGdNu1gZWWJbdpkX+H33ivd9IUpar2zs63Zs6SmTFH9zW9CFz4nTbLv8//+F5rlVzUeQlzly862Pdtrr1lj/xVXqHbtan/dc//dr1PHUsF116nOmKG6dKnqvHm2pyigz0lxfPml9SN54gnLRrn95je22CuuKHr2jz5q4954o93i4myH/n//d+hOLDPTKoFyr1rjxlabIWKtWG+/bTvc1q1V77orb9+HkSOtSeeXX3Lmd+65FgpOOMHmd9pph/6oDh1qtSPB2qGMDCt3bKxqly6qX32VE44WLbLHY8bY6wMHqv74o41fs6atX506VnOUe+fw1Vc5lV2g2rSphaOidiCjRlktV/v2qieeeGjZMzJytsezz9qw11+353PnHn7exfHkkzavc86xkPPmm1bjBrYNg55/XvX00y1ohcKUKfaZWLPm0NcyM1VffdWaBvOXO789e1Qvv1x11qycYd98Y82UwW130kn2FSupYMg+99zDj3fvvQXXHuaXlaV6xx223oH/IofIzrbPKlgTZXFt3araoIFN95//5Az/8svSBZrSCP4WtGpV+PqFEw8hruoItqn85z+qf/6z6i232N6w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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [rloss2, val_rloss2], \n", " ['reconstruction_loss', 'val_reconstruction_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637569088341, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "PoEmlwmz72jL", "outputId": "b8d865aa-d98f-48a7-e3c2-89a071a0eb41" }, "outputs": [ { "data": { "image/png": "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jB44IDJ9ushzz4n86196ZsnO1scsFp3A5I47NGB4eYncd5/IU0+JBAZKNrwFEJmGqXqGHjlSjo99RQCR9yLe0IMSzSnBtS0y+ObCZ6Dz50X8/LT1AxD59791yCIg8uGHhd+DjIzCQWHiRJ2OwRiRF18UefttfbxNGw1gUVH257ZooSffn37SbVavLv73YXvffv1Vy1b0/2psrL4NEyfa17333oUBpLSmTNH9LVggTofIXkxengYI23we+f/XRcR+rLYAlJGh79VLLxXex9df63a//CIybJj981H05+uvRVq10mYzm+Rkka5dNXA0brGPoFkAACAASURBVCxSv375hjTbvPKKvlZsrI66rVPHeSj+7TeRxMTyvUZUlP14bM6csYe2S1GasGEbIrply6XPvVKc9u3by3XXXSciIomJidKrVy9p3769PPTQQ9KmTZsyhQ0RkaNHj8qVV14pmzZtKlPY2LFjh/Ts2VM6dOggw4YNk+TkZMnJyZE+ffpI+/btpV27dvJafjvghAkTpF27dtKhQwe55557JMsxJedj2KDL6sgRezux1apj6ps1009WKf7WqxzbN2VbUAoP10oDm7Q0ffzVV/Uk+uST9udkZGhlg6+vVX5fcU6aNLHKkCGaER5+WEPK6dN6kpk+XeTJR1IKTh4rer2sSQXQDby87GeWevVEbrlFkms3kyH4XvbX6q5hxDarj4jImTMS+/YSAUQ+fja6YNC91aonCducIOfPa81M7do6v0BRI0bYX3b/fn1+06ZaIeLo8GHdZt48vf/WW/aix8Rou3N4uK77+OPCzx02TGt0pk7VzFS0n4GjxETdR8+e9pNwUQ8/rL+LU6f0/v3364m2PDVrP/ygrxMSItKkSdlrBGbNsr9/+U3xIqJBpHFj+7wRzk6yIvpe+PrqxGOAyMyZOnfKvHkayhITRa691t7fpGgQdgwc//tfmQ+/EFu/DdvPoEGXtj9nsrP1o37NNZqzc3NF3n9fX2/lykvbd2nChm2CrC1bylf7U50xbNBlk5Wl1csvvKD3z5/XT9TgwfZvo5eiMpphhg/Xb4y2Agy/KVVa1EvRFDF1qux9+lMBRL4au0Fa102UOxusk9GNlkuIX5rI9OnyTcSzetKFRergjJ4wrlog9f3PyT11V4oEBEhX751yjf82aYg46Yv1uk2Dt/UsMXOm/SyVna1V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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [kloss2, val_kloss2], \n", " ['kl_loss', 'val_kl_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637569088341, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "IzDeYX136SLd" }, "outputs": [], "source": [ "z_mean2, z_log_var2, z2 = vae2_work.encoder(selected_images)\n", "reconst_images2 = vae2_work.decoder(z2).numpy() # @tf.function 宣言のためdecoder() の返り値はTensorになっているのでnumpyの配列に変換する\n", "\n", "txts2 = [f'{p[0]:.3f}, {p[1]:.3f}' for p in z2 ]" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 201 }, "executionInfo": { "elapsed": 686, "status": "ok", "timestamp": 1637569089024, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "l28DDZcH7IU6", "outputId": "17b10491-2579-48ac-deae-84422f190a21" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "VariationalAutoEncoder.showImages(selected_images, reconst_images2, txts2, 1.4, 1.4)" ] }, { "cell_type": "markdown", "metadata": { "id": "rzuQrlkv7ZXN" }, "source": [ "# (3) Trainig with tf.GradientTape() function and Learning rate decay\n", "\n", "Calculate the loss and gradients with the tf.GradientTape() function, and apply the gradients to the variables. \n", "In addition, perform Learning rate decay in the optimizer.\n", "\n", "\n", "\n", "## (3) tf.GradientTape() 関数と学習率減数を使った学習\n", "\n", "tf.GradientTape() 関数を使って loss と gradients を計算して、gradients を変数に適用する。\n", "さらに、optimizer において Learning rate decay を行う。\n", "\n" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1637569089025, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "Hcrj3g2e7JFh" }, "outputs": [], "source": [ "save_path3 = '/content/drive/MyDrive/ColabRun/VAE03/'" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "executionInfo": { "elapsed": 458, "status": "ok", "timestamp": 1637569089480, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "cIhnJlp-8nW0" }, "outputs": [], "source": [ "from nw.VariationalAutoEncoder import VariationalAutoEncoder\n", "\n", "vae3 = VariationalAutoEncoder(\n", " input_dim = (28, 28, 1),\n", " encoder_conv_filters = [32, 64, 64, 64],\n", " encoder_conv_kernel_size = [3, 3, 3, 3],\n", " encoder_conv_strides = [1, 2, 2, 1],\n", " decoder_conv_t_filters = [64, 64, 32, 1],\n", " decoder_conv_t_kernel_size = [3, 3, 3, 3],\n", " decoder_conv_t_strides = [1, 2, 2, 1],\n", " z_dim = 2,\n", " r_loss_factor = 1000 \n", ")" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "executionInfo": { "elapsed": 2, "status": "ok", "timestamp": 1637569089481, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "dVDwOAK18o7_" }, "outputs": [], "source": [ "# initial_learning_rate * decay_rate ^ (step // decay_steps)\n", "\n", "lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(\n", " initial_learning_rate = learning_rate,\n", " decay_steps = 1000,\n", " decay_rate=0.96\n", ")\n", "\n", "optimizer3 = tf.keras.optimizers.Adam(learning_rate=lr_schedule)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 54071, "status": "ok", "timestamp": 1637569143550, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "9i7JJJ4k8tmx", "outputId": "d5b8e217-de54-468e-f550-f5e5ff3358a6" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1/3 1875 loss: total 58.493 reconstruction 55.239 kl 3.254 val loss total 53.440 reconstruction 49.923 kl 3.517 0:00:17.739827\n", "2/3 1875 loss: total 51.609 reconstruction 47.612 kl 3.997 val loss total 50.649 reconstruction 46.397 kl 4.252 0:00:34.873874\n", "3/3 1875 loss: total 50.013 reconstruction 45.694 kl 4.319 val loss total 49.614 reconstruction 44.967 kl 4.647 0:00:52.016673\n" ] } ], "source": [ "log3_1 = vae3.train_tf(\n", " x_train,\n", " batch_size = 32,\n", " epochs = 3,\n", " shuffle=True,\n", " run_folder = save_path3,\n", " optimizer = optimizer3,\n", " save_epoch_interval=50,\n", " validation_data=x_test\n", ")" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 14, "status": "ok", "timestamp": 1637569143551, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "wy6BDpwtWXo0", "outputId": "f80eb01c-2ba9-4c6c-ea28-013aeae4ecc4" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['loss', 'reconstruction_loss', 'kl_loss', 'val_loss', 'val_reconstruction_loss', 'val_kl_loss'])\n" ] } ], "source": [ "print(log3_1.keys())\n", "\n", "loss3_1 = log3_1['loss']\n", "rloss3_1 = log3_1['reconstruction_loss']\n", "kloss3_1 = log3_1['kl_loss']\n", "val_loss3_1 = log3_1['val_loss']\n", "val_rloss3_1 = log3_1['val_reconstruction_loss']\n", "val_kloss3_1 = log3_1['val_kl_loss']" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637569143551, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "afF1fLI-9FKT", "outputId": "f1f8ee8e-2f90-4038-8c52-5fc050572070" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n" ] } ], "source": [ "# 保存したパラメータと重みを読み込む\n", "\n", "vae3_work = VariationalAutoEncoder.load(save_path3)\n", "print(vae3_work.epoch)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "executionInfo": { "elapsed": 3348483, "status": "ok", "timestamp": 1637572492024, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "_8BCw-Aa9PyC", "outputId": "c52d4856-ed56-40e9-ffe3-a3b637b5a17c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4/200 1875 loss: total 49.658 reconstruction 45.263 kl 4.395 val loss total 48.749 reconstruction 44.186 kl 4.563 0:00:17.616743\n", "5/200 1875 loss: total 48.326 reconstruction 43.730 kl 4.596 val loss total 47.960 reconstruction 43.345 kl 4.614 0:00:34.516737\n", "6/200 1875 loss: total 47.774 reconstruction 43.062 kl 4.713 val loss total 47.793 reconstruction 42.888 kl 4.905 0:00:51.485786\n", "7/200 1875 loss: total 47.366 reconstruction 42.606 kl 4.760 val loss total 47.576 reconstruction 42.752 kl 4.824 0:01:08.380952\n", "8/200 1875 loss: total 47.046 reconstruction 42.229 kl 4.817 val loss total 46.938 reconstruction 42.214 kl 4.724 0:01:25.407395\n", "9/200 1875 loss: total 46.772 reconstruction 41.907 kl 4.865 val loss total 46.838 reconstruction 41.859 kl 4.979 0:01:42.374036\n", "10/200 1875 loss: total 46.537 reconstruction 41.651 kl 4.886 val loss total 46.596 reconstruction 41.741 kl 4.855 0:01:59.453270\n", "11/200 1875 loss: total 46.334 reconstruction 41.412 kl 4.922 val loss total 46.542 reconstruction 41.646 kl 4.896 0:02:16.500478\n", "12/200 1875 loss: total 46.159 reconstruction 41.213 kl 4.946 val loss total 46.120 reconstruction 40.986 kl 5.134 0:02:33.443356\n", "13/200 1875 loss: total 45.994 reconstruction 41.017 kl 4.977 val loss total 46.211 reconstruction 41.229 kl 4.982 0:02:50.445165\n", "14/200 1875 loss: total 45.854 reconstruction 40.845 kl 5.010 val loss total 46.023 reconstruction 40.963 kl 5.060 0:03:07.401844\n", "15/200 1875 loss: total 45.701 reconstruction 40.676 kl 5.025 val loss total 45.940 reconstruction 40.938 kl 5.002 0:03:24.243303\n", "16/200 1875 loss: total 45.573 reconstruction 40.530 kl 5.043 val loss total 45.838 reconstruction 40.673 kl 5.166 0:03:41.205999\n", "17/200 1875 loss: total 45.465 reconstruction 40.410 kl 5.055 val loss total 45.770 reconstruction 40.754 kl 5.017 0:03:58.180931\n", "18/200 1875 loss: total 45.338 reconstruction 40.275 kl 5.063 val loss total 45.646 reconstruction 40.577 kl 5.069 0:04:15.244548\n", "19/200 1875 loss: total 45.274 reconstruction 40.185 kl 5.089 val loss total 45.545 reconstruction 40.378 kl 5.166 0:04:32.161583\n", "20/200 1875 loss: total 45.145 reconstruction 40.050 kl 5.096 val loss total 45.616 reconstruction 40.624 kl 4.992 0:04:49.120824\n", "21/200 1875 loss: total 45.091 reconstruction 39.985 kl 5.106 val loss total 45.483 reconstruction 40.361 kl 5.122 0:05:06.047936\n", "22/200 1875 loss: total 45.016 reconstruction 39.878 kl 5.138 val loss total 45.390 reconstruction 40.310 kl 5.080 0:05:22.994144\n", "23/200 1875 loss: total 44.922 reconstruction 39.784 kl 5.138 val loss total 45.303 reconstruction 40.195 kl 5.109 0:05:40.007300\n", "24/200 1875 loss: total 44.867 reconstruction 39.725 kl 5.143 val loss total 45.206 reconstruction 39.997 kl 5.209 0:05:56.867922\n", "25/200 1875 loss: total 44.799 reconstruction 39.647 kl 5.152 val loss total 45.172 reconstruction 40.076 kl 5.096 0:06:13.844618\n", "26/200 1875 loss: total 44.734 reconstruction 39.580 kl 5.155 val loss total 45.151 reconstruction 40.076 kl 5.075 0:06:30.731789\n", "27/200 1875 loss: total 44.687 reconstruction 39.519 kl 5.167 val loss total 45.097 reconstruction 39.935 kl 5.162 0:06:47.798209\n", "28/200 1875 loss: total 44.627 reconstruction 39.453 kl 5.174 val loss total 44.990 reconstruction 39.802 kl 5.188 0:07:04.854064\n", "29/200 1875 loss: total 44.593 reconstruction 39.403 kl 5.190 val loss total 45.101 reconstruction 39.866 kl 5.235 0:07:21.992719\n", "30/200 1875 loss: total 44.552 reconstruction 39.350 kl 5.201 val loss total 44.993 reconstruction 39.789 kl 5.203 0:07:39.136176\n", "31/200 1875 loss: total 44.497 reconstruction 39.305 kl 5.191 val loss total 44.989 reconstruction 39.768 kl 5.220 0:07:56.087327\n", "32/200 1875 loss: total 44.481 reconstruction 39.262 kl 5.218 val loss total 44.969 reconstruction 39.745 kl 5.224 0:08:13.067476\n", "33/200 1875 loss: total 44.407 reconstruction 39.211 kl 5.196 val loss total 44.923 reconstruction 39.727 kl 5.196 0:08:29.940648\n", "34/200 1875 loss: total 44.397 reconstruction 39.187 kl 5.210 val loss total 44.893 reconstruction 39.700 kl 5.193 0:08:46.893910\n", "35/200 1875 loss: total 44.365 reconstruction 39.142 kl 5.223 val loss total 45.044 reconstruction 39.873 kl 5.171 0:09:03.845426\n", "36/200 1875 loss: total 44.341 reconstruction 39.107 kl 5.234 val loss total 44.847 reconstruction 39.639 kl 5.208 0:09:20.738918\n", "37/200 1875 loss: total 44.314 reconstruction 39.079 kl 5.234 val loss total 44.881 reconstruction 39.661 kl 5.220 0:09:37.834646\n", "38/200 1875 loss: total 44.290 reconstruction 39.051 kl 5.239 val loss total 44.874 reconstruction 39.712 kl 5.162 0:09:54.700557\n", "39/200 1875 loss: total 44.257 reconstruction 39.023 kl 5.234 val loss total 44.814 reconstruction 39.629 kl 5.186 0:10:11.610457\n", "40/200 1875 loss: total 44.242 reconstruction 39.004 kl 5.238 val loss total 44.791 reconstruction 39.592 kl 5.198 0:10:28.487917\n", "41/200 1875 loss: total 44.218 reconstruction 38.978 kl 5.240 val loss total 44.816 reconstruction 39.569 kl 5.248 0:10:45.613908\n", "42/200 1875 loss: total 44.209 reconstruction 38.960 kl 5.249 val loss total 44.804 reconstruction 39.562 kl 5.241 0:11:02.583906\n", "43/200 1875 loss: total 44.177 reconstruction 38.931 kl 5.246 val loss total 44.778 reconstruction 39.534 kl 5.245 0:11:19.554249\n", "44/200 1875 loss: total 44.166 reconstruction 38.911 kl 5.254 val loss total 44.814 reconstruction 39.644 kl 5.170 0:11:36.494770\n", "45/200 1875 loss: total 44.147 reconstruction 38.891 kl 5.257 val loss total 44.728 reconstruction 39.469 kl 5.258 0:11:53.552586\n", "46/200 1875 loss: total 44.119 reconstruction 38.873 kl 5.246 val loss total 44.781 reconstruction 39.568 kl 5.213 0:12:10.600668\n", "47/200 1875 loss: total 44.117 reconstruction 38.865 kl 5.252 val loss total 44.770 reconstruction 39.538 kl 5.232 0:12:27.672166\n", "48/200 1875 loss: total 44.102 reconstruction 38.848 kl 5.253 val loss total 44.690 reconstruction 39.448 kl 5.242 0:12:44.810651\n", "49/200 1875 loss: total 44.103 reconstruction 38.836 kl 5.268 val loss total 44.735 reconstruction 39.523 kl 5.212 0:13:01.705094\n", "50/200 1875 loss: total 44.081 reconstruction 38.826 kl 5.255 val loss total 44.755 reconstruction 39.509 kl 5.247 0:13:20.050213\n", "51/200 1875 loss: total 44.078 reconstruction 38.815 kl 5.263 val loss total 44.704 reconstruction 39.473 kl 5.231 0:13:37.115166\n", "52/200 1875 loss: total 44.076 reconstruction 38.807 kl 5.269 val loss total 44.707 reconstruction 39.433 kl 5.274 0:13:54.084028\n", "53/200 1875 loss: total 44.040 reconstruction 38.777 kl 5.263 val loss total 44.717 reconstruction 39.520 kl 5.197 0:14:11.070665\n", "54/200 1875 loss: total 44.039 reconstruction 38.780 kl 5.258 val loss total 44.702 reconstruction 39.442 kl 5.260 0:14:27.848333\n", "55/200 1875 loss: total 44.033 reconstruction 38.766 kl 5.267 val loss total 44.693 reconstruction 39.460 kl 5.232 0:14:44.825219\n", "56/200 1875 loss: total 44.041 reconstruction 38.771 kl 5.270 val loss total 44.678 reconstruction 39.424 kl 5.254 0:15:01.717775\n", "57/200 1875 loss: total 44.034 reconstruction 38.766 kl 5.269 val loss total 44.695 reconstruction 39.425 kl 5.270 0:15:18.633414\n", "58/200 1875 loss: total 44.008 reconstruction 38.740 kl 5.268 val loss total 44.744 reconstruction 39.480 kl 5.265 0:15:35.428503\n", "59/200 1875 loss: total 44.017 reconstruction 38.745 kl 5.273 val loss total 44.681 reconstruction 39.431 kl 5.250 0:15:52.337627\n", "60/200 1875 loss: total 44.019 reconstruction 38.743 kl 5.276 val loss total 44.658 reconstruction 39.402 kl 5.256 0:16:09.232675\n", "61/200 1875 loss: total 44.014 reconstruction 38.733 kl 5.281 val loss total 44.732 reconstruction 39.444 kl 5.289 0:16:26.147037\n", "62/200 1875 loss: total 43.990 reconstruction 38.716 kl 5.274 val loss total 44.631 reconstruction 39.375 kl 5.256 0:16:43.048847\n", "63/200 1875 loss: total 43.975 reconstruction 38.709 kl 5.266 val loss total 44.657 reconstruction 39.411 kl 5.246 0:16:59.897820\n", "64/200 1875 loss: total 44.006 reconstruction 38.727 kl 5.279 val loss total 44.662 reconstruction 39.399 kl 5.263 0:17:16.846156\n", "65/200 1875 loss: total 43.987 reconstruction 38.711 kl 5.276 val loss total 44.684 reconstruction 39.449 kl 5.235 0:17:33.862323\n", "66/200 1875 loss: total 44.004 reconstruction 38.725 kl 5.279 val loss total 44.622 reconstruction 39.358 kl 5.263 0:17:51.177547\n", "67/200 1875 loss: total 43.989 reconstruction 38.705 kl 5.284 val loss total 44.637 reconstruction 39.355 kl 5.282 0:18:08.090772\n", "68/200 1875 loss: total 43.983 reconstruction 38.698 kl 5.285 val loss total 44.675 reconstruction 39.416 kl 5.259 0:18:25.027571\n", "69/200 1875 loss: total 43.965 reconstruction 38.689 kl 5.276 val loss total 44.656 reconstruction 39.399 kl 5.257 0:18:42.010765\n", "70/200 1875 loss: total 43.960 reconstruction 38.688 kl 5.273 val loss total 44.680 reconstruction 39.433 kl 5.247 0:18:59.011968\n", "71/200 1875 loss: total 43.963 reconstruction 38.688 kl 5.274 val loss total 44.615 reconstruction 39.364 kl 5.251 0:19:15.967134\n", "72/200 1875 loss: total 43.963 reconstruction 38.690 kl 5.273 val loss total 44.653 reconstruction 39.398 kl 5.255 0:19:33.001842\n", "73/200 1875 loss: total 43.974 reconstruction 38.693 kl 5.281 val loss total 44.669 reconstruction 39.411 kl 5.258 0:19:49.840520\n", "74/200 1875 loss: total 43.949 reconstruction 38.678 kl 5.272 val loss total 44.685 reconstruction 39.432 kl 5.253 0:20:06.754282\n", "75/200 1875 loss: total 43.964 reconstruction 38.684 kl 5.280 val loss total 44.646 reconstruction 39.391 kl 5.255 0:20:23.710590\n", "76/200 1875 loss: total 43.957 reconstruction 38.679 kl 5.278 val loss total 44.638 reconstruction 39.380 kl 5.257 0:20:40.692416\n", "77/200 1875 loss: total 43.956 reconstruction 38.683 kl 5.272 val loss total 44.682 reconstruction 39.425 kl 5.257 0:20:57.604279\n", "78/200 1875 loss: total 43.958 reconstruction 38.675 kl 5.282 val loss total 44.633 reconstruction 39.379 kl 5.254 0:21:14.509061\n", "79/200 1875 loss: total 43.955 reconstruction 38.679 kl 5.275 val loss total 44.662 reconstruction 39.409 kl 5.253 0:21:31.393506\n", "80/200 1875 loss: total 43.960 reconstruction 38.678 kl 5.281 val loss total 44.699 reconstruction 39.430 kl 5.269 0:21:48.404380\n", "81/200 1875 loss: total 43.952 reconstruction 38.669 kl 5.282 val loss total 44.677 reconstruction 39.415 kl 5.262 0:22:05.221809\n", "82/200 1875 loss: total 43.952 reconstruction 38.675 kl 5.277 val loss total 44.653 reconstruction 39.398 kl 5.254 0:22:22.152764\n", "83/200 1875 loss: total 43.954 reconstruction 38.674 kl 5.280 val loss total 44.640 reconstruction 39.382 kl 5.258 0:22:39.180217\n", "84/200 1875 loss: total 43.949 reconstruction 38.672 kl 5.277 val loss total 44.665 reconstruction 39.411 kl 5.254 0:22:56.274950\n", "85/200 1875 loss: total 43.957 reconstruction 38.676 kl 5.281 val loss total 44.632 reconstruction 39.376 kl 5.256 0:23:13.124952\n", "86/200 1875 loss: total 43.967 reconstruction 38.682 kl 5.285 val loss total 44.642 reconstruction 39.373 kl 5.268 0:23:30.020014\n", "87/200 1875 loss: total 43.954 reconstruction 38.665 kl 5.289 val loss total 44.633 reconstruction 39.366 kl 5.267 0:23:46.979145\n", "88/200 1875 loss: total 43.947 reconstruction 38.662 kl 5.286 val loss total 44.652 reconstruction 39.392 kl 5.260 0:24:03.871217\n", "89/200 1875 loss: total 43.943 reconstruction 38.664 kl 5.279 val loss total 44.596 reconstruction 39.337 kl 5.259 0:24:20.840823\n", "90/200 1875 loss: total 43.945 reconstruction 38.666 kl 5.279 val loss total 44.678 reconstruction 39.421 kl 5.257 0:24:37.875952\n", "91/200 1875 loss: total 43.957 reconstruction 38.677 kl 5.280 val loss total 44.672 reconstruction 39.412 kl 5.260 0:24:54.720054\n", "92/200 1875 loss: total 43.952 reconstruction 38.669 kl 5.283 val loss total 44.673 reconstruction 39.410 kl 5.263 0:25:11.659594\n", "93/200 1875 loss: total 43.951 reconstruction 38.666 kl 5.285 val loss total 44.626 reconstruction 39.364 kl 5.262 0:25:28.669971\n", "94/200 1875 loss: total 43.948 reconstruction 38.666 kl 5.282 val loss total 44.635 reconstruction 39.374 kl 5.261 0:25:45.693580\n", "95/200 1875 loss: total 43.938 reconstruction 38.657 kl 5.281 val loss total 44.637 reconstruction 39.383 kl 5.255 0:26:02.496135\n", "96/200 1875 loss: total 43.952 reconstruction 38.669 kl 5.283 val loss total 44.618 reconstruction 39.353 kl 5.264 0:26:19.480000\n", "97/200 1875 loss: total 43.948 reconstruction 38.664 kl 5.285 val loss total 44.679 reconstruction 39.416 kl 5.263 0:26:36.342742\n", "98/200 1875 loss: total 43.950 reconstruction 38.666 kl 5.284 val loss total 44.681 reconstruction 39.419 kl 5.262 0:26:53.251092\n", "99/200 1875 loss: total 43.935 reconstruction 38.652 kl 5.283 val loss total 44.622 reconstruction 39.361 kl 5.261 0:27:10.224046\n", "100/200 1875 loss: total 43.946 reconstruction 38.666 kl 5.281 val loss total 44.668 reconstruction 39.406 kl 5.262 0:27:28.682459\n", "101/200 1875 loss: total 43.944 reconstruction 38.664 kl 5.281 val loss total 44.629 reconstruction 39.369 kl 5.260 0:27:45.934271\n", "102/200 1875 loss: total 43.949 reconstruction 38.667 kl 5.282 val loss total 44.668 reconstruction 39.406 kl 5.262 0:28:02.983688\n", "103/200 1875 loss: total 43.946 reconstruction 38.663 kl 5.283 val loss total 44.657 reconstruction 39.395 kl 5.262 0:28:19.935472\n", "104/200 1875 loss: total 43.928 reconstruction 38.647 kl 5.281 val loss total 44.669 reconstruction 39.410 kl 5.259 0:28:36.980706\n", "105/200 1875 loss: total 43.957 reconstruction 38.676 kl 5.282 val loss total 44.600 reconstruction 39.338 kl 5.262 0:28:53.968192\n", "106/200 1875 loss: total 43.949 reconstruction 38.666 kl 5.283 val loss total 44.633 reconstruction 39.373 kl 5.261 0:29:10.849823\n", "107/200 1875 loss: total 43.933 reconstruction 38.653 kl 5.280 val loss total 44.681 reconstruction 39.421 kl 5.259 0:29:27.822732\n", "108/200 1875 loss: total 43.937 reconstruction 38.657 kl 5.280 val loss total 44.641 reconstruction 39.382 kl 5.259 0:29:44.927605\n", "109/200 1875 loss: total 43.943 reconstruction 38.662 kl 5.281 val loss total 44.663 reconstruction 39.403 kl 5.260 0:30:01.868636\n", "110/200 1875 loss: total 43.943 reconstruction 38.662 kl 5.281 val loss total 44.715 reconstruction 39.453 kl 5.262 0:30:18.683033\n", "111/200 1875 loss: total 43.941 reconstruction 38.659 kl 5.281 val loss total 44.673 reconstruction 39.413 kl 5.260 0:30:35.620327\n", "112/200 1875 loss: total 43.942 reconstruction 38.661 kl 5.282 val loss total 44.634 reconstruction 39.373 kl 5.260 0:30:52.513338\n", "113/200 1875 loss: total 43.936 reconstruction 38.656 kl 5.281 val loss total 44.627 reconstruction 39.367 kl 5.260 0:31:09.470034\n", "114/200 1875 loss: total 43.948 reconstruction 38.666 kl 5.282 val loss total 44.650 reconstruction 39.388 kl 5.262 0:31:26.374943\n", "115/200 1875 loss: total 43.947 reconstruction 38.664 kl 5.284 val loss total 44.680 reconstruction 39.417 kl 5.263 0:31:43.331110\n", "116/200 1875 loss: total 43.946 reconstruction 38.661 kl 5.284 val loss total 44.618 reconstruction 39.354 kl 5.263 0:32:00.160204\n", "117/200 1875 loss: total 43.932 reconstruction 38.649 kl 5.283 val loss total 44.616 reconstruction 39.353 kl 5.263 0:32:17.110614\n", "118/200 1875 loss: total 43.945 reconstruction 38.662 kl 5.283 val loss total 44.693 reconstruction 39.430 kl 5.263 0:32:34.114515\n", "119/200 1875 loss: total 43.942 reconstruction 38.658 kl 5.284 val loss total 44.667 reconstruction 39.404 kl 5.263 0:32:51.100416\n", "120/200 1875 loss: total 43.943 reconstruction 38.660 kl 5.283 val loss total 44.679 reconstruction 39.417 kl 5.262 0:33:08.075365\n", "121/200 1875 loss: total 43.941 reconstruction 38.658 kl 5.283 val loss total 44.669 reconstruction 39.407 kl 5.262 0:33:24.987791\n", "122/200 1875 loss: total 43.944 reconstruction 38.661 kl 5.282 val loss total 44.657 reconstruction 39.396 kl 5.262 0:33:42.082569\n", "123/200 1875 loss: total 43.950 reconstruction 38.668 kl 5.282 val loss total 44.667 reconstruction 39.406 kl 5.261 0:33:59.461157\n", "124/200 1875 loss: total 43.937 reconstruction 38.655 kl 5.282 val loss total 44.610 reconstruction 39.349 kl 5.261 0:34:16.733678\n", "125/200 1875 loss: total 43.937 reconstruction 38.654 kl 5.282 val loss total 44.647 reconstruction 39.386 kl 5.261 0:34:34.188327\n", "126/200 1875 loss: total 43.933 reconstruction 38.650 kl 5.282 val loss total 44.689 reconstruction 39.428 kl 5.261 0:34:51.088631\n", "127/200 1875 loss: total 43.952 reconstruction 38.670 kl 5.282 val loss total 44.619 reconstruction 39.357 kl 5.261 0:35:08.068828\n", "128/200 1875 loss: total 43.945 reconstruction 38.663 kl 5.282 val loss total 44.649 reconstruction 39.388 kl 5.262 0:35:24.976363\n", "129/200 1875 loss: total 43.955 reconstruction 38.672 kl 5.283 val loss total 44.650 reconstruction 39.388 kl 5.262 0:35:41.957613\n", "130/200 1875 loss: total 43.930 reconstruction 38.648 kl 5.282 val loss total 44.685 reconstruction 39.423 kl 5.261 0:35:58.848861\n", "131/200 1875 loss: total 43.950 reconstruction 38.668 kl 5.282 val loss total 44.658 reconstruction 39.397 kl 5.261 0:36:15.730307\n", "132/200 1875 loss: total 43.944 reconstruction 38.661 kl 5.282 val loss total 44.643 reconstruction 39.381 kl 5.261 0:36:32.735192\n", "133/200 1875 loss: total 43.932 reconstruction 38.650 kl 5.282 val loss total 44.620 reconstruction 39.359 kl 5.261 0:36:49.600559\n", "134/200 1875 loss: total 43.940 reconstruction 38.658 kl 5.282 val loss total 44.645 reconstruction 39.383 kl 5.261 0:37:06.402081\n", "135/200 1875 loss: total 43.931 reconstruction 38.649 kl 5.282 val loss total 44.619 reconstruction 39.358 kl 5.261 0:37:23.151727\n", "136/200 1875 loss: total 43.935 reconstruction 38.653 kl 5.282 val loss total 44.628 reconstruction 39.366 kl 5.262 0:37:40.379000\n", "137/200 1875 loss: total 43.936 reconstruction 38.654 kl 5.282 val loss total 44.634 reconstruction 39.373 kl 5.261 0:37:57.313128\n", "138/200 1875 loss: total 43.926 reconstruction 38.644 kl 5.282 val loss total 44.672 reconstruction 39.411 kl 5.261 0:38:14.199890\n", "139/200 1875 loss: total 43.943 reconstruction 38.661 kl 5.282 val loss total 44.640 reconstruction 39.379 kl 5.261 0:38:31.248823\n", "140/200 1875 loss: total 43.943 reconstruction 38.661 kl 5.282 val loss total 44.633 reconstruction 39.372 kl 5.261 0:38:48.186538\n", "141/200 1875 loss: total 43.940 reconstruction 38.658 kl 5.282 val loss total 44.685 reconstruction 39.424 kl 5.261 0:39:05.054026\n", "142/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.652 reconstruction 39.391 kl 5.261 0:39:22.016986\n", "143/200 1875 loss: total 43.954 reconstruction 38.672 kl 5.282 val loss total 44.670 reconstruction 39.408 kl 5.261 0:39:38.908782\n", "144/200 1875 loss: total 43.920 reconstruction 38.638 kl 5.282 val loss total 44.660 reconstruction 39.399 kl 5.261 0:39:55.807692\n", "145/200 1875 loss: total 43.941 reconstruction 38.659 kl 5.282 val loss total 44.634 reconstruction 39.372 kl 5.261 0:40:12.684311\n", "146/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.591 reconstruction 39.330 kl 5.261 0:40:29.625403\n", "147/200 1875 loss: total 43.942 reconstruction 38.660 kl 5.282 val loss total 44.665 reconstruction 39.404 kl 5.261 0:40:46.576435\n", "148/200 1875 loss: total 43.958 reconstruction 38.676 kl 5.282 val loss total 44.623 reconstruction 39.362 kl 5.261 0:41:03.477569\n", "149/200 1875 loss: total 43.928 reconstruction 38.646 kl 5.282 val loss total 44.668 reconstruction 39.407 kl 5.261 0:41:20.307208\n", "150/200 1875 loss: total 43.937 reconstruction 38.655 kl 5.282 val loss total 44.646 reconstruction 39.385 kl 5.261 0:41:38.880538\n", "151/200 1875 loss: total 43.932 reconstruction 38.650 kl 5.282 val loss total 44.659 reconstruction 39.398 kl 5.261 0:41:55.882208\n", "152/200 1875 loss: total 43.957 reconstruction 38.675 kl 5.282 val loss total 44.652 reconstruction 39.391 kl 5.261 0:42:12.801339\n", "153/200 1875 loss: total 43.941 reconstruction 38.659 kl 5.282 val loss total 44.654 reconstruction 39.393 kl 5.261 0:42:29.583425\n", "154/200 1875 loss: total 43.963 reconstruction 38.681 kl 5.282 val loss total 44.635 reconstruction 39.373 kl 5.261 0:42:46.678708\n", "155/200 1875 loss: total 43.930 reconstruction 38.648 kl 5.282 val loss total 44.655 reconstruction 39.393 kl 5.261 0:43:03.549905\n", "156/200 1875 loss: total 43.943 reconstruction 38.661 kl 5.282 val loss total 44.624 reconstruction 39.363 kl 5.261 0:43:20.456769\n", "157/200 1875 loss: total 43.930 reconstruction 38.648 kl 5.282 val loss total 44.650 reconstruction 39.389 kl 5.261 0:43:37.503061\n", "158/200 1875 loss: total 43.928 reconstruction 38.646 kl 5.282 val loss total 44.624 reconstruction 39.363 kl 5.261 0:43:54.362039\n", "159/200 1875 loss: total 43.944 reconstruction 38.662 kl 5.282 val loss total 44.632 reconstruction 39.370 kl 5.261 0:44:11.219079\n", "160/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.659 reconstruction 39.398 kl 5.261 0:44:28.113912\n", "161/200 1875 loss: total 43.933 reconstruction 38.650 kl 5.282 val loss total 44.660 reconstruction 39.399 kl 5.261 0:44:45.097979\n", "162/200 1875 loss: total 43.953 reconstruction 38.671 kl 5.282 val loss total 44.624 reconstruction 39.362 kl 5.261 0:45:01.963802\n", "163/200 1875 loss: total 43.930 reconstruction 38.648 kl 5.282 val loss total 44.674 reconstruction 39.413 kl 5.261 0:45:18.820460\n", "164/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.649 reconstruction 39.388 kl 5.261 0:45:35.656687\n", "165/200 1875 loss: total 43.926 reconstruction 38.644 kl 5.282 val loss total 44.646 reconstruction 39.385 kl 5.261 0:45:52.580641\n", "166/200 1875 loss: total 43.943 reconstruction 38.661 kl 5.282 val loss total 44.647 reconstruction 39.386 kl 5.261 0:46:09.525616\n", "167/200 1875 loss: total 43.953 reconstruction 38.670 kl 5.282 val loss total 44.635 reconstruction 39.373 kl 5.261 0:46:26.353054\n", "168/200 1875 loss: total 43.930 reconstruction 38.647 kl 5.282 val loss total 44.670 reconstruction 39.408 kl 5.261 0:46:43.235755\n", "169/200 1875 loss: total 43.946 reconstruction 38.664 kl 5.282 val loss total 44.615 reconstruction 39.354 kl 5.261 0:47:00.104168\n", "170/200 1875 loss: total 43.954 reconstruction 38.672 kl 5.282 val loss total 44.652 reconstruction 39.391 kl 5.261 0:47:16.959041\n", "171/200 1875 loss: total 43.948 reconstruction 38.666 kl 5.282 val loss total 44.674 reconstruction 39.413 kl 5.261 0:47:33.885171\n", "172/200 1875 loss: total 43.929 reconstruction 38.647 kl 5.282 val loss total 44.653 reconstruction 39.392 kl 5.261 0:47:50.866081\n", "173/200 1875 loss: total 43.941 reconstruction 38.659 kl 5.282 val loss total 44.650 reconstruction 39.388 kl 5.261 0:48:07.802663\n", "174/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.651 reconstruction 39.389 kl 5.261 0:48:24.663800\n", "175/200 1875 loss: total 43.949 reconstruction 38.667 kl 5.282 val loss total 44.657 reconstruction 39.396 kl 5.261 0:48:41.890727\n", "176/200 1875 loss: total 43.950 reconstruction 38.667 kl 5.282 val loss total 44.661 reconstruction 39.399 kl 5.261 0:48:58.734299\n", "177/200 1875 loss: total 43.947 reconstruction 38.665 kl 5.282 val loss total 44.614 reconstruction 39.352 kl 5.261 0:49:15.652162\n", "178/200 1875 loss: total 43.928 reconstruction 38.645 kl 5.282 val loss total 44.636 reconstruction 39.374 kl 5.261 0:49:32.531961\n", "179/200 1875 loss: total 43.948 reconstruction 38.665 kl 5.282 val loss total 44.654 reconstruction 39.393 kl 5.261 0:49:49.461183\n", "180/200 1875 loss: total 43.939 reconstruction 38.657 kl 5.282 val loss total 44.658 reconstruction 39.396 kl 5.261 0:50:06.401785\n", "181/200 1875 loss: total 43.942 reconstruction 38.660 kl 5.282 val loss total 44.636 reconstruction 39.375 kl 5.261 0:50:23.392329\n", "182/200 1875 loss: total 43.948 reconstruction 38.666 kl 5.282 val loss total 44.657 reconstruction 39.396 kl 5.261 0:50:40.369676\n", "183/200 1875 loss: total 43.938 reconstruction 38.655 kl 5.282 val loss total 44.595 reconstruction 39.334 kl 5.261 0:50:57.446461\n", "184/200 1875 loss: total 43.946 reconstruction 38.663 kl 5.282 val loss total 44.650 reconstruction 39.389 kl 5.261 0:51:15.021246\n", "185/200 1875 loss: total 43.936 reconstruction 38.654 kl 5.282 val loss total 44.635 reconstruction 39.373 kl 5.261 0:51:32.001082\n", "186/200 1875 loss: total 43.935 reconstruction 38.653 kl 5.282 val loss total 44.647 reconstruction 39.386 kl 5.261 0:51:48.915687\n", "187/200 1875 loss: total 43.939 reconstruction 38.657 kl 5.282 val loss total 44.630 reconstruction 39.369 kl 5.261 0:52:05.872774\n", "188/200 1875 loss: total 43.939 reconstruction 38.657 kl 5.282 val loss total 44.634 reconstruction 39.373 kl 5.261 0:52:22.803600\n", "189/200 1875 loss: total 43.956 reconstruction 38.674 kl 5.282 val loss total 44.622 reconstruction 39.360 kl 5.261 0:52:39.974099\n", "190/200 1875 loss: total 43.932 reconstruction 38.650 kl 5.282 val loss total 44.638 reconstruction 39.376 kl 5.261 0:52:57.120551\n", "191/200 1875 loss: total 43.935 reconstruction 38.653 kl 5.282 val loss total 44.649 reconstruction 39.387 kl 5.261 0:53:14.245814\n", "192/200 1875 loss: total 43.943 reconstruction 38.661 kl 5.282 val loss total 44.649 reconstruction 39.388 kl 5.261 0:53:31.120179\n", "193/200 1875 loss: total 43.945 reconstruction 38.663 kl 5.282 val loss total 44.685 reconstruction 39.424 kl 5.261 0:53:48.193309\n", "194/200 1875 loss: total 43.933 reconstruction 38.651 kl 5.282 val loss total 44.640 reconstruction 39.379 kl 5.261 0:54:05.205495\n", "195/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.662 reconstruction 39.401 kl 5.261 0:54:22.157001\n", "196/200 1875 loss: total 43.933 reconstruction 38.651 kl 5.282 val loss total 44.655 reconstruction 39.394 kl 5.261 0:54:39.042646\n", "197/200 1875 loss: total 43.944 reconstruction 38.662 kl 5.282 val loss total 44.642 reconstruction 39.381 kl 5.261 0:54:55.991865\n", "198/200 1875 loss: total 43.934 reconstruction 38.652 kl 5.282 val loss total 44.655 reconstruction 39.394 kl 5.261 0:55:12.922184\n", "199/200 1875 loss: total 43.956 reconstruction 38.674 kl 5.282 val loss total 44.643 reconstruction 39.382 kl 5.261 0:55:29.843118\n", "200/200 1875 loss: total 43.938 reconstruction 38.656 kl 5.282 val loss total 44.658 reconstruction 39.396 kl 5.261 0:55:48.264540\n" ] } ], "source": [ "# 追加で training する。\n", "log3_2 = vae3_work.train_tf(\n", " x_train,\n", " batch_size = 32,\n", " epochs = MAX_EPOCHS,\n", " shuffle=True,\n", " run_folder = save_path3,\n", " optimizer = optimizer3,\n", " save_epoch_interval=50,\n", " validation_data=x_test\n", ")\n" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "executionInfo": { "elapsed": 13, "status": "ok", "timestamp": 1637572492025, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "3xt0NVnLWl6L" }, "outputs": [], "source": [ "loss3_2 = log3_2['loss']\n", "rloss3_2 = log3_2['reconstruction_loss']\n", "kloss3_2 = log3_2['kl_loss']\n", "val_loss3_2 = log3_2['val_loss']\n", "val_rloss3_2 = log3_2['val_reconstruction_loss']\n", "val_kloss3_2 = log3_2['val_kl_loss']" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637572492025, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "YC3pn0Fv9WjA" }, "outputs": [], "source": [ "loss3 = np.concatenate([loss3_1, loss3_2], axis=0)\n", "rloss3 = np.concatenate([rloss3_1, rloss3_2], axis=0)\n", "kloss3 = np.concatenate([kloss3_1, kloss3_2], axis=0)\n", "\n", "val_loss3 = np.concatenate([val_loss3_1, val_loss3_2], axis=0)\n", "val_rloss3 = np.concatenate([val_rloss3_1, val_rloss3_2], axis=0)\n", "val_kloss3 = np.concatenate([val_kloss3_1, val_kloss3_2], axis=0)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 12, "status": "ok", "timestamp": 1637572492025, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "OKPzByEF9jXa", "outputId": "fddb80d0-2695-4eb2-c326-0ffbf594324d" }, "outputs": [ { "data": { "image/png": "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MLqaPbmaavKKJhghgI/XISIiXdw110BpaXw/c8KEli/SOnPmTIYMGcLll18O+BDeGRkZzJ07l08++YQdO3Zwyy23cMYZZ7S6rJkzZ7J48WImTJjAtGnT+MY3vsE3vvENSkpKyMjI4Gc/+xmTJ0/mhhtuoKamhpdffpnrr7+e4cOHc/XVV7Nt2zZycnK47777OOigg/aonCtXrmT69Ols3LiRAQMGcN999zF06FD+8pe/cNNNN5Genk5+fj7z5s3jnXfe4ZJLLqG2tpaGhgbmzJnDAQccsEfLa05qJBhZWX6/Y4cnGyIiInth6tSpXHPNNZ8mGH/+85956qmnuOqqq8jLy2Pjxo0ceeSRnH766Vgrf2hnzZrFrbfeyuOPPw7AT3/6U8yMt99+myVLlnDiiSeydOlSbr75ZkpKSrjjjjsAqKys5KWXXiIjI4Nnn32W73znO59eyr2trrzySqZNm8a0adO49957ueqqq/jb3/7GzTffzFNPPcXgwYMpLy8H4O677+bqq6/m/PPPp7a2dq8u1tac1EgwoklFba0SDBGRFNFSTUNHmThxIhs2bOCjjz6irKyMvn37ss8++/DNb36TefPmkZaWxtq1a/n444/ZZ5999uizX375Za688koADj74YPbbbz+WLl26y3wVFRVMmzaNZcuWYWbs2LFjj8vxyiuv8Ne//hWACy+8kOuuuw6AyZMnc/HFF3Puuedy1llnAfCZz3yGH/7wh6xZs4azzjorLrUXkEp9MED9MEREpN3OOeccHnnkER5++GGmTp3K7NmzKSsrY/78+ZSWllJYWMi2bds6bPnf//73Oe6441i0aBH/+Mc/4rqsu+++m1tuuYUPP/yQww47jE2bNvHVr36Vxx57jJycHE499VSef/75uCwrtRIMnaoqIiLtNHXqVB566CEeeeQRzjnnHCoqKhg4cCA9evRg7ty5rFq1qk2fk5uby5YtWz59PmXKFGbPng3A0qVLWb16NQcddNAu81VUVDB48GDAzwzZG0cddRQPPfQQALNnz2bKlCkALF++nEmTJnHzzTczYMAAPvzwQ1asWMGIESO46qqrOOOMM3jrrbf2aplNpUaCEe2DoRoMERFpp0MOOYQtW7YwePBgBg0axPnnn09JSQljx47lgQce4OCDD27T54wbN4709HTGjx/PbbfdxmWXXUZDQwNjx45l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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [loss3, val_loss3], \n", " ['total_loss', 'val_total_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 755, "status": "ok", "timestamp": 1637572492776, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "J--Dop3d9rMG", "outputId": "334a597a-3ffc-45d1-d73e-6955e96b014c" }, "outputs": [ { "data": { "image/png": "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AmAO8Lpz7l/A7yO37X4JnAXcCmBmx5nZGwDOuQLgBuAtYDHwonPuq2ooR9lUEyIiUusMGzaMyZMns2vXLgDWrl3Lpk2bOPvss3nppZfYEunbKbgc079/f55//nkApk6dysCBA4+4/FWrVpGRkcFPfvITrr76aubPnw9AQkIC+fn5pc6XkZHB4sWLKSoqYvr06QfGDxkyhEceeQSAwsJCtm/fTkpKCjt37ixxOQMHDmTq1KkAfPvtt6xevZouXbqUuV1KM3DgQGbMmMGePXvYvXs306dPZ+DAgaxbt47k5GQuv/xyfv7znzN//nx27drF9u3bOe+88/jTn/7EggULKrze6lLm5Rjn3AqgVwnjryhl+nXAeVGv3wAOu323xgVJiGpCRERqjaFDh7J48WJOP/10ABo1asSzzz5Lt27duPPOOxk8eDBxcXH06dOHp556ioceeojx48fzwAMPkJ6ezpNPPnnE5c+aNYsHHniAhIQEGjVqdKAm5JprrqFnz56cfPLJ/Pa3vz1svkmTJjFy5EjS09PJzMw8kCT9+c9/5pprruGJJ54gLi6ORx55hNNPP50BAwbQvXt3zj33XK6//voDy/nZz37GddddR48ePYiPj+epp546qAbkaJ188smMGzeOvn37AnD11VfTp08f3nrrLX7+859Tr149EhISeOSRR9i5cyfnn38++/btwznHH//4xwqvt7pYUGVVm2RmZrqsrKyqXejq1dCuHTz+OFSwqk9E5Fi3ePFiTjrppLDDkDqspGPMzOYd0s8YEEvdtqsmREREpFYp7y26xz41TBURkVquX79+5B3SdvGZZ56hR48eIUVUvWInCVHDVBERqeU+//zzsEOoUbFzOUY1ISIiIrVK7CQhcXFgppoQERGRWiJ2khAzXxuimhAREZFaIXaSEPDtQlQTIiIiUivEVhKimhARkWNO9D/a1ka5ubk8/PDDVba8lStX8txzzx14nZWVxU033VRly4fas01jKwlRTYiISJ1Vmf9eqYwjJSEVienQJCQzM5O//OUvFY6vNoudW3RBNSEiIlFuuQUi/z5fZXr3LvvPeSdOnEjbtm0PdG9+zz33EB8fz/vvv8+2bdvIz8/nvvvu4/zzzy9zfbNmzeJXv/oVaWlpLFmyhMWLFzNx4kRmzZpFXl4e119/PT/96U8BuP/++3n22WepV68e5557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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [rloss3, val_rloss3], \n", " ['reconstruction_loss', 'val_reconstruction_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 279 }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1637572492777, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "JcnlY9XT9tSd", "outputId": "89399614-5e7d-4de5-e47e-c728d5cfe91d" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "VariationalAutoEncoder.plot_history(\n", " [kloss3, val_kloss3], \n", " ['kl_loss', 'val_kl_loss']\n", ")" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1637572492777, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "4FEWQ7lE9xb5" }, "outputs": [], "source": [ "z_mean3, z_log_var3, z3 = vae3_work.encoder(selected_images)\n", "reconst_images3 = vae3_work.decoder(z3).numpy() # @tf.function 宣言のためdecoder() の返り値はTensorになっているのでnumpyの配列に変換する\n", "\n", "txts3 = [f'{p[0]:.3f}, {p[1]:.3f}' for p in z3 ]" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 201 }, "executionInfo": { "elapsed": 922, "status": "ok", "timestamp": 1637572493695, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "XoLNAp-o95VR", "outputId": "1729bdbf-c5eb-4af1-a6b3-442cb65e377d" }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "VariationalAutoEncoder.showImages(selected_images, reconst_images3, txts3, 1.4, 1.4)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "executionInfo": { "elapsed": 7, "status": "ok", "timestamp": 1637572493696, "user": { "displayName": "Yoshihisa Nitta", "photoUrl": "https://lh3.googleusercontent.com/a-/AOh14GgJLeg9AmjfexROvC3P0wzJdd5AOGY_VOu-nxnh=s64", "userId": "15888006800030996813" }, "user_tz": -540 }, "id": "FN0P0lij-FbT" }, "outputs": [], "source": [] } ], "metadata": { "accelerator": "GPU", "colab": { "authorship_tag": "ABX9TyMX5uY2mjtDKjW/GIvIu9jR", "collapsed_sections": [ "SNfyIR9QI5_4", "jUic65mHLHWy", "5yvKYipHoMUj" ], "name": "VAE_MNIST_Train.ipynb", "provenance": [] }, "kernelspec": { "display_name": "Python 3", "language": "python", "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.7.9" } }, "nbformat": 4, "nbformat_minor": 1 }