diff --git a/Demo.ipynb b/Demo.ipynb new file mode 100644 index 0000000..38634ee --- /dev/null +++ b/Demo.ipynb @@ -0,0 +1,199 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": true, + "ExecuteTime": { + "end_time": "2024-08-21T02:07:52.027530500Z", + "start_time": "2024-08-21T02:07:52.015526Z" + } + }, + "outputs": [], + "source": [ + "import torch\n", + "from core.kernel import NeuralKernel\n", + "import core.GP_CommonCalculation as GP\n", + "from data_sample import generate_example_data as data\n", + "from core.autoGP import autoGP" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0YAAAH5CAYAAAClJy6RAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAChCElEQVR4nOzdeXjU1fn38fckJCGEEJYEGCDsJARkS1AMiiCoIAoq1qoVta2FWLtZqrb+SgtYWp/WarXWaqC2VrEurWKlbqAIooBCwk4Ii+wMELaEACEkmeePw2RmkkkySWYySz6v65prJrOe+WYC5577Pvex2O12OyIiIiIiIs1YRKAHICIiIiIiEmgKjEREREREpNlTYCQiIiIiIs2eAiMREREREWn2FBiJiIiIiEizp8BIRERERESaPQVGIiIiIiLS7LUI9AB8raKigkOHDhEfH4/FYgn0cEREREREJEDsdjunT5+mS5cuRETUnhMKu8Do0KFDJCcnB3oYIiIiIiISJPbv30+3bt1qvU/YBUbx8fGAefNt2rQJ8GhERERERCRQioqKSE5OrowRahN2gZGjfK5NmzYKjERERERExKslNmq+ICIiIiIizZ4CIxERERERafYUGImIiIiISLMXdmuMvFVeXs6FCxcCPQwJU1FRUURGRgZ6GCIiIiLipWYXGNntdg4fPsypU6cCPRQJc23btqVz587aT0tEREQkBDS7wMgRFHXs2JFWrVpp0io+Z7fbOXv2LEePHgXAarUGeEQiIiIiUpdmFRiVl5dXBkUdOnQI9HAkjMXGxgJw9OhROnbsqLI6ERERkSDXrJovONYUtWrVKsAjkebA8TnTWjYRERGR4NesAiMHlc9JU9DnTERERCR0NMvASERERERExJUCo2ZszJgxPPjgg17ff8+ePVgsFtavX++3MdVk2bJlWCwWdRMUEREREb9oVs0XQlVdJVn33nsvL730Ur2f9+233yYqKsrr+ycnJ2Oz2UhMTKz3awXCmDFjGDp0KE8//XSghyIiIiIiQU6BUSPYbJCdDVlZ4M+OzDabrfLyG2+8wa9//Wvy8/Mrr3N0QHO4cOGCVwFP+/bt6zWOyMhIOnfuXK/HiIiIiIiEApXSNYLNBnPmmHN/6ty5c+UpISEBi8VS+XNJSQlt27blzTffZMyYMbRs2ZIFCxZw/Phx7rzzTrp160arVq0YNGgQr732mtvzVi2l69mzJ7/73e/47ne/S3x8PN27d2fevHmVt1ctpXOUt33yyScMHz6cVq1aMXLkSLegDWDu3Ll07NiR+Ph4vve97/GLX/yCoUOH1vqe33//fVJSUoiNjeXqq69mz549brfX9f6+/e1vs3z5cp555hksFgsWi4U9e/ZQXl7OfffdR69evYiNjSU1NZVnnnnG+1+GiIiIiIQlBUZh4uc//zk//vGPycvLY/z48ZSUlJCRkcH//vc/Nm/ezPTp07n77rv58ssva32eJ598kuHDh7Nu3ToeeOABvv/977Nt27ZaH/PLX/6SJ598krVr19KiRQu++93vVt726quv8tvf/pbf//735OTk0L17d55//vlan2///v1MmTKFiRMnsn79+spgylVd7++ZZ54hMzOTadOmYbPZsNlsJCcnU1FRQbdu3XjzzTfZunUrv/71r/m///s/3nzzzVrHJCIiTcdmg9mz/f/Fo4iIK5XS1ZPN5vyHOjfX/RxMSZ0/y+pq8uCDDzJlyhS36x566KHKyz/60Y/48MMP+fe//82IESNqfJ6JEyfywAMPACbY+tOf/sSyZcvo379/jY/57W9/y+jRowH4xS9+wQ033EBJSQktW7bk2Wef5b777uM73/kOAL/+9a9ZvHgxxcXFNT7f888/T+/evfnTn/6ExWIhNTWVTZs28fvf/77yPl27dq31/SUkJBAdHU2rVq3cyv8iIyOZM2dO5c+9evVi5cqVvPnmm3zzm9+scUwiItJ0HBUZkycH5v9UEWmelDGqp+xsyMgwp2nTzHXTpjmvy84OzLiGDx/u9nN5eTm//e1vGTx4MB06dKB169YsXryYffv21fo8gwcPrrzsKNk7evSo14+xXvwfzPGY/Px8LrvsMrf7V/25qry8PC6//HK3phOZmZlu92no+wN44YUXGD58OElJSbRu3Zr58+d79TgRERERCV/KGNVTVpb5BgtMpmjaNJg/H9LTzXWB+mYrLi7O7ecnn3ySP/3pTzz99NMMGjSIuLg4HnzwQUpLS2t9nqpNGywWCxUVFV4/xhHMuD6malc9u91e6/PVdTs0/P29+eab/PSnP+XJJ58kMzOT+Ph4nnjiiTpLDEVExL+CtSJDpKk1VXMvqU6BUT15+oc5Pd0ZGAWLFStWcNNNNzF16lTABCo7duwgLS2tSceR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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "xtr, ytr, xte, yte, x_combined, y_combined = data.generate_complex_data(600, seed=1)\n", + "\n", + "data.plot(xtr, ytr, x_combined, y_combined)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-21T02:07:52.475990700Z", + "start_time": "2024-08-21T02:07:52.369865500Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [], + "source": [ + "device = torch.device('cuda')\n", + "xtr, ytr, xte, yte = xtr.to(device), ytr.to(device), xte.to(device), yte.to(device)\n", + "\n", + "# Normalize the data outside the model\n", + "normalizer = GP.DataNormalization(method='min_max').to(device)\n", + "normalizer.fit(xtr, 'x')\n", + "normalizer.fit(ytr, 'y')\n", + "normalizer.fit(xte, 'xte')\n", + "xtr_normalized = normalizer.normalize(xtr, 'x')\n", + "ytr_normalized = normalizer.normalize(ytr, 'y')\n", + "xte_normalized = normalizer.normalize(xte, 'xte')" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-21T02:07:53.128636300Z", + "start_time": "2024-08-21T02:07:53.107155200Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 22, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "AutoGP training completed in 5.17 seconds\n" + ] + } + ], + "source": [ + "model = autoGP(input_dim=xtr_normalized.size(1), device=device, kernel=NeuralKernel, inputwarp=False,\n", + " deepkernel=False).to(device)\n", + "\n", + "model.train_auto(xtr_normalized, ytr_normalized)" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-21T02:07:58.684523500Z", + "start_time": "2024-08-21T02:07:53.507124800Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 23, + "outputs": [], + "source": [ + "mean, var = model.forward(xtr_normalized, ytr_normalized, xte_normalized)\n", + "mean = normalizer.denormalize(mean, 'y')\n", + "var = normalizer.denormalize_cov(var, 'y')" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-21T02:07:58.703231400Z", + "start_time": "2024-08-21T02:07:58.685524400Z" + } + } + }, + { + "cell_type": "code", + "execution_count": 27, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "MSE for autoGP: 0.003164923737775443\n" + ] + }, + { + "data": { + "text/plain": "
", + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "mse = torch.mean((mean - yte) ** 2)\n", + "print(f'MSE for autoGP: {mse.item()}')\n", + "\n", + "# Sort xte and get the sorted indices\n", + "sorted_indices = torch.argsort(xte.squeeze())\n", + "\n", + "# Apply the sorted indices to xte, ypred, and yvar\n", + "xte_sorted = xte[sorted_indices]\n", + "yte_sorted = yte[sorted_indices]\n", + "mean_sorted = mean[sorted_indices]\n", + "yvar_sorted = var[sorted_indices]\n", + "std_sorted = torch.sqrt(yvar_sorted)\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.scatter(xtr.cpu().numpy(), ytr.cpu().numpy(), color='r',label='Train',marker='+')\n", + "plt.plot(xte_sorted.cpu().numpy(), yte_sorted.cpu().numpy(), label='True')\n", + "plt.plot(xte_sorted.cpu().numpy(), mean_sorted.detach().cpu().numpy(), label='Predicted')\n", + "\n", + "plt.fill_between(xte_sorted.cpu().numpy().squeeze(), (mean_sorted - 1.96 * std_sorted).cpu().detach().numpy().squeeze(),\n", + " (mean_sorted + 1.96 * std_sorted).cpu().detach().numpy().squeeze(), alpha=0.3, label='95% Confidence Interval')\n", + "plt.legend()\n", + "plt.show()" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-08-21T02:09:04.985520400Z", + "start_time": "2024-08-21T02:09:04.869460200Z" + } + } + }, + { + "cell_type": "code", + "execution_count": null, + "outputs": [], + "source": [], + "metadata": { + "collapsed": false + } + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 2 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython2", + "version": "2.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/GPmodels_Advance/01_GP&GPU.ipynb b/GPmodels_Advance/01_GP&GPU.ipynb index ed3b3e5..97d3bf5 100644 --- a/GPmodels_Advance/01_GP&GPU.ipynb +++ b/GPmodels_Advance/01_GP&GPU.ipynb @@ -1,144 +1,203 @@ { "cells": [ { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true, - "ExecuteTime": { - "end_time": "2024-07-30T02:34:41.212564800Z", - "start_time": "2024-07-30T02:34:38.680616300Z" - } - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "cuda\n" - ] - } + "cell_type": "markdown", + "source": [ + "Author: Zidong Chen\n", + "\n", + "Date:2024/08/21\n", + "\n", + "Introduction: This is a demonstration of how to use the inference method mentioned in [01_GP&GPU_GPTutorial.ipynb](https://github.com/IceLab-X/Mini-GP/blob/ffba9d2a75bd3f051792cd92a8ec51c823de2ec2/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb) for standard GP using GP_Common_Computation pack" ], + "metadata": { + "collapsed": false + } + }, + { + "cell_type": "code", + "execution_count": 13, + "outputs": [], "source": [ "import os\n", - "import time\n", "import sys\n", - "sys.path.append('..') # Add parent folder to sys.path\n", - "\n", "import torch\n", "import torch.nn as nn\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", - "from data_sample import generate_example_data as data\n", "from core.kernel import ARDKernel\n", - "import core.GP_CommonCalculation as GP\n", - "# from torch.autograd import Variable\n", "import torch.optim as optim\n", + "import core.GP_CommonCalculation as GP\n", + "from data_sample import generate_example_data as data\n", "os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # Fixing strange error if run in MacOS\n", "JITTER = 1e-6\n", "EPS = 1e-10\n", - "PI = 3.1415\n", - "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - "print(device)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "outputs": [], - "source": [ - "# generate example data\n", - "xtr, ytr,xte,yte = data.generate(2000,100,seed=42)\n", - "xtr = xtr.to(dtype=torch.float64,device=device)\n", - "ytr = ytr.to(dtype=torch.float64, device=device)\n", - "xte = xte.to(dtype=torch.float64,device=device)" + "PI = 3.1415" ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-07-30T02:34:43.799887800Z", - "start_time": "2024-07-30T02:34:41.938718400Z" + "end_time": "2024-08-21T09:12:09.997233500Z", + "start_time": "2024-08-21T09:12:09.990071900Z" } } }, { "cell_type": "code", - "execution_count": 4, - "outputs": [], - "source": [ - "kernel= ARDKernel(1)" - ], + "execution_count": 14, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:34:43.803622600Z", - "start_time": "2024-07-30T02:34:43.800899600Z" + "end_time": "2024-08-21T09:12:10.395316200Z", + "start_time": "2024-08-21T09:12:10.295269700Z" } - } + }, + "outputs": [ + { + "data": { + "text/plain": "
", + "image/png": "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" + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + " # generate example data\n", + "xtr, ytr, xte, yte = data.generate(32, 100, seed=42)\n", + "data.plot(xtr, ytr, xte, yte, figsize=(6, 4))" + ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 15, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "ExecuteTime": { + "end_time": "2024-08-21T09:12:10.497828200Z", + "start_time": "2024-08-21T09:12:10.493036Z" + } + }, "outputs": [], "source": [ - "log_beta = nn.Parameter(torch.ones(1, dtype=torch.float64, device=device) * -4)" - ], + "normalizer = GP.DataNormalization(method=\"standard\", mode=0, learnable=False)\n", + "normalizer.fit(xtr, 'xtr')\n", + "normalizer.fit(ytr, 'ytr')\n", + "xtr = normalizer.normalize(xtr, 'xtr')\n", + "ytr = normalizer.normalize(ytr, 'ytr')" + ] + }, + { + "cell_type": "code", + "execution_count": 16, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:34:43.841179100Z", - "start_time": "2024-07-30T02:34:43.804622700Z" + "end_time": "2024-08-21T09:12:10.700724500Z", + "start_time": "2024-08-21T09:12:10.690979900Z" } - } + }, + "outputs": [], + "source": [ + "kernel = ARDKernel(1)" + ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 17, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "ExecuteTime": { + "end_time": "2024-08-21T09:12:10.932089500Z", + "start_time": "2024-08-21T09:12:10.923040400Z" + } + }, "outputs": [], "source": [ - "def negative_log_likelihood(xtr, ytr, kernel,log_beta):\n", - " n = xtr.shape[0]\n", - " Sigma = kernel(xtr, xtr) + torch.eye(xtr.size(0), device=device) * torch.exp(log_beta) + JITTER * torch.eye(xtr.size(0), device=device)\n", - "\n", - " return -GP.Gaussian_log_likelihood(ytr,Sigma,Kinv_method='conjugate')" - ], + "#initiate_log_beta\n", + "log_beta = nn.Parameter(torch.ones(1) * -4) # this is a large noise. we optimize to shrink it to a proper value." + ] + }, + { + "cell_type": "code", + "execution_count": 18, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:34:43.846682300Z", - "start_time": "2024-07-30T02:34:43.844167400Z" + "end_time": "2024-08-21T09:12:11.131314400Z", + "start_time": "2024-08-21T09:12:11.121923100Z" } - } + }, + "outputs": [], + "source": [ + "def negative_log_likelihood(xtr, ytr, kernel, log_beta):\n", + " Sigma = kernel(xtr, xtr) + log_beta.exp().pow(-1) * torch.eye(\n", + " xtr.size(0)) + JITTER * torch.eye(xtr.size(0))\n", + " return -GP.Gaussian_log_likelihood(ytr, Sigma,Kinv_method='conjugate')" + ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 19, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "ExecuteTime": { + "end_time": "2024-08-21T09:12:11.329133800Z", + "start_time": "2024-08-21T09:12:11.318235400Z" + } + }, "outputs": [], "source": [ - "def forward(xtr, ytr, xte, kernel,log_beta):\n", - "\n", - " Sigma = kernel(xtr, xtr) + torch.eye(xtr.size(0), device=device) * torch.exp(log_beta) + JITTER * torch.eye(xtr.size(0), device=device)\n", + "def forward(xtr, ytr, xte, kernel, log_beta):\n", + " n_test = xte.size(0)\n", + " xte = normalizer.normalize(xte, 'xtr')\n", + " Sigma = kernel(xtr, xtr) + log_beta.exp().pow(-1) * torch.eye(\n", + " xtr.size(0)) + JITTER * torch.eye(xtr.size(0))\n", "\n", " K_s = kernel(xtr, xte)\n", - " K_ss=kernel(xte,xte)\n", - " mean,var=GP.conditional_Gaussian(ytr,Sigma,K_s,K_ss,Kinv_method=\"conjugate\")\n", - " var_diag=var.sum(dim = 0).view(-1, 1)\n", - " var_diag = var_diag + log_beta.exp().pow(-1)\n", + " K_ss = kernel(xte, xte)\n", "\n", + " mean, var = GP.conditional_Gaussian(ytr, Sigma, K_s, K_ss,Kinv_method='conjugate')\n", "\n", - " return mean,var_diag" - ], + " var_diag = var.sum(dim=0).view(-1, 1)\n", + " var_diag = var_diag + log_beta.exp().pow(-1)\n", + "\n", + " # Denormalize\n", + " mean = normalizer.denormalize(mean, \"ytr\")\n", + " var_diag = normalizer.denormalize_cov(var_diag, \"ytr\")\n", + " return mean, var_diag" + ] + }, + { + "cell_type": "code", + "execution_count": 20, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:34:44.089537200Z", - "start_time": "2024-07-30T02:34:44.082025100Z" + "end_time": "2024-08-21T09:12:11.525121900Z", + "start_time": "2024-08-21T09:12:11.516925800Z" } - } - }, - { - "cell_type": "code", - "execution_count": 8, + }, "outputs": [], "source": [ "def train_adam(xtr, ytr, kernel, log_beta, niteration=10, lr=0.1):\n", @@ -156,226 +215,142 @@ "\n", " # Print kernel parameters\n", " #for name, param in kernel.named_parameters():\n", - " #if param.requires_grad:\n", - " #print(f'{name}: {param.data}')\n", + " #if param.requires_grad:\n", + " #print(f'{name}: {param.data}')\n", "\n", " #print('log_beta:', log_beta.data)\n", - " print('iter', i, 'nll:{:.5f}'.format(loss.item()))" - ], + " print('iter', i, 'nll:{:.5f}'.format(loss.item()))" + ] + }, + { + "cell_type": "code", + "execution_count": 21, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:34:44.725480300Z", - "start_time": "2024-07-30T02:34:44.718400500Z" + "end_time": "2024-08-21T09:12:16.838996500Z", + "start_time": "2024-08-21T09:12:11.726952500Z" } - } - }, - { - "cell_type": "code", - "execution_count": 9, + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "iter 0 nll:382502.06290\n", - "iter 1 nll:299551.12541\n", - "iter 2 nll:220919.77021\n", - "iter 3 nll:156796.60055\n", - "iter 4 nll:113465.22244\n", - "iter 5 nll:87426.06698\n", - "iter 6 nll:71500.41040\n", - "iter 7 nll:60641.16830\n", - "iter 8 nll:52378.21319\n", - "iter 9 nll:45658.33479\n", - "iter 10 nll:40023.15320\n", - "iter 11 nll:35127.48869\n", - "iter 12 nll:30611.39181\n", - "iter 13 nll:26281.49448\n", - "iter 14 nll:22253.33022\n", - "iter 15 nll:18817.27484\n", - "iter 16 nll:16142.44942\n", - "iter 17 nll:14162.87250\n", - "iter 18 nll:12704.92916\n", - "iter 19 nll:11613.04566\n", - "iter 20 nll:10776.21731\n", - "iter 21 nll:10115.66322\n", - "iter 22 nll:9575.73884\n", - "iter 23 nll:9119.04415\n", - "iter 24 nll:8721.72755\n", - "iter 25 nll:8368.84263\n", - "iter 26 nll:8050.87485\n", - "iter 27 nll:7761.44815\n", - "iter 28 nll:7496.04140\n", - "iter 29 nll:7251.27441\n", - "iter 30 nll:7024.50625\n", - "iter 31 nll:6813.60053\n", - "iter 32 nll:6616.78275\n", - "iter 33 nll:6432.54961\n", - "iter 34 nll:6259.61008\n", - "iter 35 nll:6096.84465\n", - "iter 36 nll:5943.27521\n", - "iter 37 nll:5798.04295\n", - "iter 38 nll:5660.39018\n", - "iter 39 nll:5529.64619\n", - "iter 40 nll:5405.21513\n", - "iter 41 nll:5286.56598\n", - "iter 42 nll:5173.22533\n", - "iter 43 nll:5064.76840\n", - "iter 44 nll:4960.81452\n", - "iter 45 nll:4861.02178\n", - "iter 46 nll:4765.10946\n", - "iter 47 nll:4672.74874\n", - "iter 48 nll:4583.71122\n", - "iter 49 nll:4497.76934\n", - "iter 50 nll:4414.71608\n", - "iter 51 nll:4334.36427\n", - "iter 52 nll:4256.54306\n", - "iter 53 nll:4181.09727\n", - "iter 54 nll:4107.88511\n", - "iter 55 nll:4036.77738\n", - "iter 56 nll:3967.65599\n", - "iter 57 nll:3900.41262\n", - "iter 58 nll:3834.94790\n", - "iter 59 nll:3771.17120\n", - "iter 60 nll:3708.99870\n", - "iter 61 nll:3648.35366\n", - "iter 62 nll:3589.16513\n", - "iter 63 nll:3531.36803\n", - "iter 64 nll:3474.90112\n", - "iter 65 nll:3419.70835\n", - "iter 66 nll:3365.73889\n", - "iter 67 nll:3312.94422\n", - "iter 68 nll:3261.27898\n", - "iter 69 nll:3210.70270\n", - "iter 70 nll:3161.17472\n", - "iter 71 nll:3112.65987\n", - "iter 72 nll:3065.12405\n", - "iter 73 nll:3018.53517\n", - "iter 74 nll:2972.86344\n", - "iter 75 nll:2928.08045\n", - "iter 76 nll:2884.15942\n", - "iter 77 nll:2841.07566\n", - "iter 78 nll:2798.80528\n", - "iter 79 nll:2757.32615\n", - "iter 80 nll:2716.61606\n", - "iter 81 nll:2676.65473\n", - "iter 82 nll:2637.42346\n", - "iter 83 nll:2598.90405\n", - "iter 84 nll:2561.07810\n", - "iter 85 nll:2523.92877\n", - "iter 86 nll:2487.44145\n", - "iter 87 nll:2451.59813\n", - "iter 88 nll:2416.38567\n", - "iter 89 nll:2381.79021\n", - "iter 90 nll:2347.79598\n", - "iter 91 nll:2314.39184\n", - "iter 92 nll:2281.56314\n", - "iter 93 nll:2249.29889\n", - "iter 94 nll:2217.58565\n", - "iter 95 nll:2186.41390\n", - "iter 96 nll:2155.77005\n", - "iter 97 nll:2125.64497\n", - "iter 98 nll:2096.02724\n", - "iter 99 nll:2066.90655\n" + "iter 99 nll:-15.36603\n" ] } ], "source": [ - "train_adam(xtr, ytr, kernel, log_beta, niteration=100,lr=0.1)" - ], + "train_adam(xtr, ytr, kernel, log_beta, niteration=100, lr=0.1)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:35:13.918021400Z", - "start_time": "2024-07-30T02:34:45.618554100Z" + "end_time": "2024-08-21T09:12:16.838996500Z", + "start_time": "2024-08-21T09:12:16.830796200Z" } - } - }, - { - "cell_type": "code", - "execution_count": 10, + }, "outputs": [], "source": [ "with torch.no_grad():\n", - " ypred, yvar = forward(xtr, ytr, xte, kernel,log_beta)" - ], + " ypred, yvar = forward(xtr, ytr, xte, kernel, log_beta)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, "metadata": { "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, "ExecuteTime": { - "end_time": "2024-07-30T02:35:16.351396700Z", - "start_time": "2024-07-30T02:35:16.053699700Z" + "end_time": "2024-08-21T09:12:16.842153900Z", + "start_time": "2024-08-21T09:12:16.836795600Z" } - } + }, + "outputs": [], + "source": [ + "xtr = normalizer.denormalize(xtr, 'xtr')\n", + "ytr = normalizer.denormalize(ytr, 'ytr')" + ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 24, + "metadata": { + "collapsed": false, + "jupyter": { + "outputs_hidden": false + }, + "ExecuteTime": { + "end_time": "2024-08-21T09:12:16.941489400Z", + "start_time": "2024-08-21T09:12:16.845154400Z" + } + }, "outputs": [ { "data": { "text/plain": "
", - "image/png": "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OoIykpBGxWRZRkNDA6xWKwRBSOp9u91uVFVV4fjx48NuX02J43FODx7n9OBxTg8e5/RJ1bFWFAUejwcVFRUQxaGrUrI+syKKIiorK1P6GDabjX8MacDjnB48zunB45wePM7pk4pjPVxGJYYFtkRERKRqDFaIiIhI1RisDMFgMOCee+6BwWDI9FByGo9zevA4pwePc3rwOKePGo511hfYEhERUW5jZoWIiIhUjcEKERERqRqDFSIiIlI1BitERESkamM6WHn88ccxYcIEGI1GLFy4EO+9996Q19+4cSMWLlwIo9GIiRMn4le/+lWaRpr94jnWf/rTn7B8+XKUlJTAZrPh7LPPxt/+9rc0jjZ7xfuajvnggw+g1WpxxhlnpHaAOSLe4xwMBvG9730P1dXVMBgMmDRpEv7v//4vTaPNXvEe52eeeQbz5s2D2WxGeXk5vv71r6OtrS1No81O7777Li699FJUVFRAEAS88sorw94mI+dCZYx67rnnFJ1Opzz55JNKbW2tcvvttysWi0U5duzYgNc/cuSIYjabldtvv12pra1VnnzySUWn0ykvvvhimkeefeI91rfffrvyk5/8RNm6davy6aefKmvWrFF0Op3y0UcfpXnk2SXe4xzT2dmpTJw4UVmxYoUyb9689Aw2iyVynC+77DJlyZIlyoYNG5S6ujrlww8/VD744IM0jjr7xHuc33vvPUUUReV//ud/lCNHjijvvfeeMmvWLOWKK65I88izyxtvvKF873vfU1566SUFgPLyyy8Pef1MnQvHbLCyePFi5eabb+5z2fTp05W77757wOuvXr1amT59ep/LvvnNbypnnXVWysaYK+I91gOZOXOmsm7dumQPLackepyvvvpq5fvf/75yzz33MFgZgXiP81//+lfFbrcrbW1t6Rhezoj3OD/44IPKxIkT+1z26KOPKpWVlSkbY64ZSbCSqXPhmJwGCoVC2LFjB1asWNHn8hUrVmDTpk0D3mbz5s2nXf/zn/88tm/fjnA4nLKxZrtEjnV/sizD4/GgsLAwFUPMCYke59/+9rc4fPgw7rnnnlQPMSckcpxfe+01LFq0CA888ADGjRuHqVOn4q677oLf70/HkLNSIsd56dKlOHHiBN544w0oioLm5ma8+OKLuOSSS9Ix5DEjU+fCrN/IMBGtra2QJAkOh6PP5Q6HA01NTQPepqmpacDrRyIRtLa2ory8PGXjzWaJHOv+HnroIXi9XnzlK19JxRBzQiLH+eDBg7j77rvx3nvvQasdk28FcUvkOB85cgTvv/8+jEYjXn75ZbS2tuKWW25Be3s761YGkchxXrp0KZ555hlcffXVCAQCiEQiuOyyy/Dzn/88HUMeMzJ1LhyTmZUYQRD6fK8oymmXDXf9gS6n08V7rGP+8Ic/YO3atXj++edRWlqaquHljJEeZ0mScO2112LdunWYOnVquoaXM+J5PcuyDEEQ8Mwzz2Dx4sW4+OKL8fDDD+N3v/sdsyvDiOc419bW4rbbbsMPf/hD7NixA2+++Sbq6upw8803p2OoY0omzoVj8uNUcXExNBrNaRF6S0vLaRFjTFlZ2YDX12q1KCoqStlYs10ixzrm+eefx7/927/hhRdewIUXXpjKYWa9eI+zx+PB9u3bsXPnTtx6660AoidVRVGg1Wrx1ltv4YILLkjL2LNJIq/n8vJyjBs3Dna7veeyGTNmQFEUnDhxAlOmTEnpmLNRIsd5/fr1OOecc/Cd73wHADB37lxYLBace+65uPfee5n9TpJMnQvHZGZFr9dj4cKF2LBhQ5/LN2zYgKVLlw54m7PPPvu067/11ltYtGgRdDpdysaa7RI51kA0o3LjjTfi2Wef5ZzzCMR7nG02G3bv3o1du3b1fN18882YNm0adu3ahSVLlqRr6FklkdfzOeecg4aGBnR1dfVc9umnn0IURVRWVqZ0vNkqkePs8/kgin1PaRqNBsCpT/40ehk7F6a0fFfFYsvifvOb3yi1tbXKHXfcoVgsFuXo0aOKoijK3XffrVx//fU9148t17rzzjuV2tpa5Te/+Q2XLo9QvMf62WefVbRarfKLX/xCaWxs7Pnq7OzM1FPICvEe5/64Gmhk4j3OHo9HqaysVL785S8re/fuVTZu3KhMmTJF+fd///dMPYWsEO9x/u1vf6totVrl8ccfVw4fPqy8//77yqJFi5TFixdn6ilkBY/Ho+zcuVPZuXOnAkB5+OGHlZ07d/YsEVfLuXDMBiuKoii/+MUvlOrqakWv1ysLFixQNm7c2POzG264QTnvvPP6XP+f//ynMn/+fEWv1ys1NTXKL3/5yzSPOHvFc6zPO+88BcBpXzfccEP6B55l4n1N98ZgZeTiPc779u1TLrzwQsVkMimVlZXKqlWrFJ/Pl+ZRZ594j/Ojjz6qzJw5UzGZTEp5ebly3XXXKSdOnEjzqLPLO++8M+T7rVrOhYKiMD9GRERE6jUma1aIiIgoezBYISIiIlVjsEJERESqxmCFiIiIVI3BChEREakagxUiIiJSNQYrREREpGoMVoiIiEjVGKwQERGRqjFYISIiIlVjsEJERESqxmCFiIiIVO3/A3XqX9Ns6VSeAAAAAElFTkSuQmCC" + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABeyUlEQVR4nO3dd3hc1Z0+8Pfe6V29WbIsd8s2BttgbFMMwQ6E0BIILCwL+8uyYdmEEG9CYJMATgLekIRkWQKpS8pCIEAgBQcwAUxvxgbjXmRbsnqZ3u89vz9Gki1bsjWjKXdm3s/zzCNrNDM6upbmvveU75GEEAJEREREGiXnugFEREREx8OwQkRERJrGsEJERESaxrBCREREmsawQkRERJrGsEJERESaxrBCREREmsawQkRERJqmz3UDJkpVVbS3t8PhcECSpFw3h4iIiMZBCAGfz4e6ujrI8vH7TvI+rLS3t6OhoSHXzSAiIqIUtLa2or6+/riPyfuw4nA4ACR+WKfTmePWEBER0Xh4vV40NDQMn8ePJ+/DytDQj9PpZFghIiLKM+OZwsEJtkRERKRpDCtERESkaQwrREREpGkMK0RERKRpDCtERESkaQwrREREpGkMK0RERKRpDCtERESkaQwrREREpGkMK0RERKRpDCtERESkaQwrREREpGkMK0RERKRpDCtEREQ0JkUVuW4CwwoRERGNTgiBgWA0181gWCEiIqLReUNxxBQ1181gWCEiIqLR9QYiuW4CAIYVIiIiGkUwGkcwouS6GQAYVoiIiGgUff7cz1UZwrBCREREI8QUFZ5QLNfNGMawQkRERCP0+aMQuV+xPIxhhYiIiIapqkB/QDtDQADDChERER3BHYppohDckRhWiIiIaFifXxvLlY/EsEJEREQAgEAkjnAs90XgjsawQkRERACgubkqQxhWiIiICHGNLVc+EsMKERERYSAY09Ry5SMxrBAREZEmdlceC8MKERFRkfNH4ohocGLtEIYVIiKiIjeg0Ym1QzIaVtauXYtTTz0VDocDVVVVuPTSS7Fz584RjxFC4K677kJdXR0sFgtWrFiBrVu3ZrJZRERENEjLE2uHZDSsbNiwAf/+7/+Ot99+G+vXr0c8HseqVasQCASGH3PvvffivvvuwwMPPID33nsPNTU1WLlyJXw+XyabRkRERND2xNohkhDZa2JPTw+qqqqwYcMGnHXWWRBCoK6uDrfccgu+/vWvAwAikQiqq6vxve99D1/4whdO+JperxculwsejwdOpzPTPwIREVFB2dXlO+58lQqHEbUuS9q/bzLn76zOWfF4PACAsrIyAEBLSws6OzuxatWq4ceYTCacffbZePPNN0d9jUgkAq/XO+JGREREydP6xNohWQsrQgisXr0aZ5xxBubNmwcA6OzsBABUV1ePeGx1dfXw1462du1auFyu4VtDQ0NmG05ERFSgtD6xdkjWwsoXv/hFfPTRR/j9739/zNckSRrxuRDimPuG3H777fB4PMO31tbWjLSXiIiokCmq0PzE2iH6bHyTL33pS/jzn/+MV199FfX19cP319TUAEj0sNTW1g7f393dfUxvyxCTyQSTyZTZBhMRERU4dzCq+Ym1QzLasyKEwBe/+EX88Y9/xEsvvYSmpqYRX29qakJNTQ3Wr18/fF80GsWGDRuwbNmyTDaNiIioqA0E86NXBchwz8q///u/49FHH8Wf/vQnOByO4XkoLpcLFosFkiThlltuwT333IMZM2ZgxowZuOeee2C1WnH11VdnsmlERERFKxxTEIoquW7GuGU0rDz00EMAgBUrVoy4/+GHH8b1118PALj11lsRCoVw0003YWBgAEuWLMELL7wAh8ORyaYREREVLXce9aoAWa6zkgmss0JERDR+Qgjs6PQhrozv9F90dVaIiIgot/yR+LiDilYwrBARERWRgUB+DQEBDCtERERFQ1EFvGGGFSIiItKofKqtciSGFSIioiKRT7VVjsSwQkREVATyrbbKkRhWiIiIikC+1VY5EsMKERFREXCH8mOH5dEwrBARERW4QCSOWDwPZ9YOYlghIiIqcAPB/O1VARhWiIiICpoQAp5Q/s5XARhWiIiICpo3FIeq5roVE8OwQkREVMDyeWLtEIYVIiKiAqWoAr5wPNfNmDCGFSIiogKVr+X1j8awQkREVKDceT6xdgjDChERUQGKxBUEI/lZXv9oDCtEREQFyJPH5fWPxrBCRERUgAplCAhgWCEiIio4oaiCSCzPi6scgWGFiIiowBRCbZUjMawQEREVGHcBzVcBGFaIiIgKij8SR1wpgOIqR2BYISIiKiDuPN9heTQMK0RERAWiEHZYHg3DChERUYHwhvN/h+XRMKwQEREViEIqBHckhhUiIqICoKgC3jDD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7bbb8Nprr0GvL8q3gqSlcpz37duH119/HWazGU8//TR6e3tx0003ob+/n/NWxpDKcV62bBkeeeQRXHnllQiHw4jH47j44ovxP//zP9loctHI1bmwKHtWhkiSNOJzIcQx953o8aPdT8dK9lgP+f3vf4+77roLjz/+OKqqqjLVvIIx3uOsKAquvvpqrFmzBjNnzsxW8wpGMr/PqqpCkiQ88sgjOO200/CpT30K9913H37961+zd+UEkjnO27Ztw80334w77rgDGzduxHPPPYeWlhbceOON2WhqUcnFubAoL6cqKiqg0+mOSejd3d3HJMYhNTU1oz5er9ejvLw8Y23Nd6kc6yGPP/44Pv/5z+OJJ57Aeeedl8lm5r1kj7PP58P777+PTZs24Ytf/CKAxElVCAG9Xo8XXngB5557blbank9S+X2ura3FpEmT4HK5hu+bM2cOhBBoa2vDjBkzMtrmfJTKcV67di2WL1+Or33tawCAk046CTabDWeeeSa++93vsvc7TXJ1LizKnhWj0YhFixZh/fr1I+5fv349li1bNupzli5deszjX3jhBSxevBgGgyFjbc13qRxrINGjcv311+PRRx/lmPM4JHucnU4ntmzZgs2bNw/fbrzxRsyaNQubN2/GkiVLstX0vJLK7/Py5cvR3t4Ov98/fN+uXbsgyzLq6+sz2t58lcpxDgaDkOWRpzSdTgfg8JU/TVzOzoUZnb6rYUPL4n71q1+Jbdu2iVtuuUXYbDaxf/9+IYQQt912m7j22muHHz+0XOsrX/mK2LZtm/jVr37FpcvjlOyxfvTRR4Verxc/+clPREdHx/DN7Xbn6kfIC8ke56NxNdD4JHucfT6fqK+vF5dffrnYunWr2LBhg5gxY4b4l3/5l1z9CHkh2eP88MMPC71eLx588EGxd+9e8frrr4vFixeL0047LVc/Ql7w+Xxi06ZNYtOmTQKAuO+++8SmTZuGl4hr5VxYtGFFCCF+8pOfiMbGRmE0GsXChQvFhg0bhr923XXXibPPPnvE41955RVxyimnCKPRKKZMmSIeeuihLLc4fyVzrM8++2wB4Jjbddddl/2G55lkf6ePxLAyfske5+3bt4vzzjtPWCwWUV9fL1avXi2CwWCWW51/kj3O999/v2hubhYWi0XU1taKa665RrS1tWW51fnl5ZdfPu77rVbOhZIQ7B8jIiIi7SrKOStERESUPxhWiIiISNMYVoiIiEjTGFaIiIhI0xhWiIiISNMYVoiIiEjTGFaIiIhI0xhWiIiISNMYVoiIiEjTGFaIiIhI0xhWiIiISNMYVoiIiEjT/j/tTCsXaY8bawAAAABJRU5ErkJggg==" }, "metadata": {}, "output_type": "display_data" } ], "source": [ - "plt.fill_between(xte.cpu().squeeze().numpy(), ypred.cpu().squeeze().detach().numpy() - 1.96 * np.sqrt(yvar.cpu().squeeze().detach().numpy()), ypred.cpu().squeeze().detach().numpy() + 1.96 * np.sqrt(yvar.cpu().squeeze().detach().numpy()), alpha=0.2, label='95% Confidence interval')\n", - "subset_size = 100 # Adjust this to the desired subset size\n", - "indices = torch.randperm(xtr.size(0))[:subset_size]\n", - "\n", - "xtr_subset = xtr[indices]\n", - "ytr_subset = ytr[indices]\n", - "\n", - "# Move the subset data to CPU for plotting\n", - "xtr_subset_cpu = xtr_subset.cpu().numpy()\n", - "ytr_subset_cpu = ytr_subset.cpu().numpy()\n", - "\n", - "# Plot the subset of the training data\n", - "plt.plot(xtr_subset_cpu, ytr_subset_cpu, 'b+')\n", - "plt.plot(xte.cpu(),yte.cpu())\n", - "\n", + "plt.fill_between(xte.squeeze().numpy(),\n", + " ypred.squeeze().detach().numpy() - 1.96 * np.sqrt(yvar.squeeze().detach().numpy()),\n", + " ypred.squeeze().detach().numpy() + 1.96 * np.sqrt(yvar.squeeze().detach().numpy()), alpha=0.2,\n", + " label='95% Confidence interval')\n", + "plt.plot(xte.squeeze().numpy(), ypred.squeeze().detach().numpy(), label='Predictive mean')\n", + "plt.plot(xtr.detach().numpy(), ytr.detach().numpy(), 'b+')\n", "plt.show()" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:18:34.352917500Z", - "start_time": "2024-07-30T08:18:34.259172800Z" - } - } + ] }, { "cell_type": "code", "execution_count": null, - "outputs": [], - "source": [], "metadata": { - "collapsed": false - } + "collapsed": false, + "jupyter": { + "outputs_hidden": false + } + }, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", - "version": 2 + "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", - "pygments_lexer": "ipython2", - "version": "2.7.6" + "pygments_lexer": "ipython3", + "version": "3.11.7" } }, "nbformat": 4, - "nbformat_minor": 0 + "nbformat_minor": 4 } diff --git a/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb b/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb index eae82c9..a62a352 100644 --- a/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb +++ b/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb @@ -7,9 +7,7 @@ "\n", "Date:2024/07/04\n", "\n", - "Introduction\n", - "\n", - "With the advancement of hardware technology, leveraging GPUs for parallel computing in Gaussian processes has become a prominent question. After significant progress in developing scalable GP models, I am excited to introduce a new inference method for standard Gaussian processes that enables GPU acceleration. This method allows for training exact Gaussian processes with thousands of data points in seconds, using just a single GPU on a laptop.\n" + "Introduction: With the advancement of hardware technology, leveraging GPUs for parallel computing in Gaussian processes has become a prominent question. After significant progress in developing scalable GP models, I am excited to introduce a new inference method for standard Gaussian processes that enables GPU acceleration. This method achieved over a fourfold speedup in this demo, using just a single GPU on a laptop.\n" ], "metadata": { "collapsed": false @@ -17,27 +15,23 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 228, "outputs": [], "source": [ "import os\n", "import time\n", "import sys\n", - "\n", - "sys.path.append('..') # Add parent folder to sys.path\n", - "\n", "import torch\n", "import torch.nn as nn\n", "import numpy as np\n", "from matplotlib import pyplot as plt\n", "from data_sample import generate_example_data as data\n", - "from core.cigp_baseline import cigp\n", - "# from torch.autograd import Variable\n", + "from core.cigp import cigp\n", "import torch.optim as optim\n", "from core.kernel import ARDKernel\n", - "\n", + "sys.path.append('..') # Add parent folder to sys.path\n", "os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # Fixing strange error if run in MacOS\n", - "JITTER = 1e-3\n", + "JITTER = 1e-6\n", "EPS = 1e-10\n", "PI = 3.1416\n", "torch.set_default_dtype(torch.float64)" @@ -45,8 +39,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:54:50.782713600Z", - "start_time": "2024-08-14T02:54:47.992183400Z" + "end_time": "2024-08-21T08:43:29.702787500Z", + "start_time": "2024-08-21T08:43:29.698236Z" } } }, @@ -63,12 +57,10 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 192, "outputs": [], "source": [ - "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", - "\n", - "\n", + "device = torch.device('cuda')\n", "def conjugate_gradient(A, b, x0=None, tol=1e-1, max_iter=1000):\n", " if x0 is None:\n", " x = torch.zeros_like(b)\n", @@ -116,18 +108,18 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:54:52.469790900Z", - "start_time": "2024-08-14T02:54:52.438198500Z" + "end_time": "2024-08-21T07:38:23.320423500Z", + "start_time": "2024-08-21T07:38:23.314029900Z" } } }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 193, "outputs": [], "source": [ "# generate example data\n", - "xtr, ytr, xte, yte = data.generate(2000, 100, seed=42)\n", + "xtr, ytr, xte, yte = data.generate(5000, 100, seed=42)\n", "xtr = xtr.to(dtype=torch.float64, device=device)\n", "ytr = ytr.to(dtype=torch.float64, device=device)\n", "xte = xte.to(dtype=torch.float64, device=device)" @@ -135,14 +127,14 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:54:55.558700600Z", - "start_time": "2024-08-14T02:54:52.943236900Z" + "end_time": "2024-08-21T07:38:23.767060100Z", + "start_time": "2024-08-21T07:38:23.753369700Z" } } }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 194, "outputs": [], "source": [ "kernel = ARDKernel(1)\n", @@ -152,8 +144,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:54:56.078225600Z", - "start_time": "2024-08-14T02:54:56.069493500Z" + "end_time": "2024-08-21T07:38:24.132577900Z", + "start_time": "2024-08-21T07:38:24.122401800Z" } } }, @@ -168,29 +160,28 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 195, "outputs": [], "source": [ - "Sigma = kernel(xtr, xtr) + torch.eye(xtr.size(0), device=device) * torch.exp(log_beta) + JITTER * torch.eye(xtr.size(0),\n", - " device=device)\n" + "Sigma = kernel(xtr, xtr) + torch.eye(xtr.size(0), device=device) * torch.exp(log_beta) + JITTER * torch.eye(xtr.size(0), device=device)" ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:54:59.433597Z", - "start_time": "2024-08-14T02:54:56.972573500Z" + "end_time": "2024-08-21T07:38:24.968385200Z", + "start_time": "2024-08-21T07:38:24.942730200Z" } } }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 227, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Conjugate Gradient Solution Time: 0.007002 seconds\n" + "Conjugate Gradient Solution Time: 0.006001 seconds\n" ] } ], @@ -203,20 +194,20 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:00.171487900Z", - "start_time": "2024-08-14T02:55:00.144375200Z" + "end_time": "2024-08-21T07:56:59.885134Z", + "start_time": "2024-08-21T07:56:59.860488700Z" } } }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 220, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Cholesky Solution Time: 0.215119 seconds\n" + "Cholesky Solution Time: 0.596621 seconds\n" ] } ], @@ -229,21 +220,21 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:06.924671800Z", - "start_time": "2024-08-14T02:55:06.705298800Z" + "end_time": "2024-08-21T07:55:40.343769400Z", + "start_time": "2024-08-21T07:55:39.741413200Z" } } }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 198, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Conjugate Gradient Residual Norm: 7.077787e-03\n", - "Cholesky Residual Norm: 6.066984e-12\n" + "Conjugate Gradient Residual Norm: 6.809222e-02\n", + "Cholesky Residual Norm: 2.271525e-11\n" ] } ], @@ -256,8 +247,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:09.788380700Z", - "start_time": "2024-08-14T02:55:09.770375900Z" + "end_time": "2024-08-21T07:38:28.186833900Z", + "start_time": "2024-08-21T07:38:28.177521900Z" } } }, @@ -272,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 199, "outputs": [], "source": [ "import torch\n", @@ -296,8 +287,8 @@ "\n", " for ii in range(nvecs):\n", " w = torch.sign(torch.randn(n, dtype=A.dtype, device=A.device)) # Random Rademacher vector\n", - " v0 = w / torch.norm(w)\n", - " #print(torch.norm(w))\n", + " v0 = w / (torch.norm(w)+EPS)\n", + "\n", " # Lanczos algorithm\n", " V = torch.zeros((n, m), dtype=A.dtype, device=A.device)\n", " alpha = torch.zeros(m, dtype=A.dtype, device=A.device)\n", @@ -305,26 +296,23 @@ " V[:, 0] = v0.clone()\n", "\n", " w = A @ V[:, 0].clone()\n", - " #print(A)\n", + "\n", " alpha[0] = torch.dot(V[:, 0].clone(), w)\n", " w = w - alpha[0].clone() * V[:, 0].clone()\n", "\n", " for j in range(1, m):\n", " beta[j - 1] = torch.norm(w)\n", " if beta[j - 1] != 0:\n", - " V[:, j] = w / beta[j - 1].clone()\n", + " V[:, j] = w / (beta[j - 1].clone()+EPS)\n", " w = A @ V[:, j].clone() - beta[j - 1].clone() * V[:, j - 1].clone()\n", " alpha[j] = torch.dot(V[:, j].clone(), w)\n", " w = w - alpha[j].clone() * V[:, j].clone()\n", "\n", " H = torch.diag(alpha) + torch.diag(beta, 1) + torch.diag(beta, -1)\n", - " #print(V[:, j])\n", - " #print(w)\n", - " #print(torch.diag(alpha),torch.diag(beta, 1),torch.diag(beta, -1))\n", - " #print(H)\n", + "\n", " eigvals, eigvecs = torch.linalg.eig(H)\n", " eigvals, eigvecs = eigvals.real, eigvecs.real\n", - " #print(eigvals)\n", + "\n", " theta = torch.abs(eigvals)\n", " gamma2 = eigvecs[0, :] ** 2\n", "\n", @@ -337,21 +325,21 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:10.964341300Z", - "start_time": "2024-08-14T02:55:10.959478200Z" + "end_time": "2024-08-21T07:38:34.740936400Z", + "start_time": "2024-08-21T07:38:34.729222700Z" } } }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 209, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Lanczos Quadrature Time: 0.220051 seconds\n", - "Log determinant (SLQ): 9.147460375653647\n" + "Lanczos Quadrature Time: 0.236053 seconds\n", + "Log determinant (SLQ): 18.97595262047382\n" ] } ], @@ -365,21 +353,21 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:21.734631400Z", - "start_time": "2024-08-14T02:55:21.509860200Z" + "end_time": "2024-08-21T07:39:19.031933400Z", + "start_time": "2024-08-21T07:39:18.792052800Z" } } }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 212, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Cholesky Decomposition Time: 0.202051 seconds\n", - "Exact log determinant (Cholesky): 16.38081520867417\n" + "Cholesky Decomposition Time: 0.528001 seconds\n", + "Exact log determinant (Cholesky): 17.12168046471974\n" ] } ], @@ -394,8 +382,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:55:23.653618300Z", - "start_time": "2024-08-14T02:55:23.448430900Z" + "end_time": "2024-08-21T07:39:31.809161600Z", + "start_time": "2024-08-21T07:39:31.275339400Z" } } }, @@ -410,7 +398,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 213, "outputs": [], "source": [ "def negative_log_likelihood(xtr, ytr, kernel, log_beta):\n", @@ -418,26 +406,27 @@ " Sigma = kernel(xtr, xtr) + torch.eye(n, device=device) * torch.exp(log_beta).pow(-1) + JITTER * torch.eye(n,\n", " device=device)\n", " Sigma_inv_y = conjugate_gradient(Sigma, ytr)\n", - " #option1:\n", - " L = torch.linalg.cholesky(Sigma)\n", - " nll = L.diag().log().sum() +0.5 * (torch.matmul(ytr.t(), Sigma_inv_y) + 0.5* n * torch.log(2 * torch.tensor(PI)))\n", - " #option2: torch autograd bug???\n", + " # Original Implementation:\n", + " # L = torch.linalg.cholesky(Sigma)\n", + " # nll = L.diag().log().sum() +0.5 * (torch.matmul(ytr.t(), Sigma_inv_y) + 0.5* n * torch.log(2 * torch.tensor(PI)))\n", "\n", - " # nll = 0.5 * lanc_quad_logdet(\n", - " # Sigma) #0.5 * (torch.matmul(ytr.t(), Sigma_inv_y) + 0.5* n * torch.log(2 * torch.tensor(PI)))\n", + " # New inference method:\n", + "\n", + " nll = 0.5 * lanc_quad_logdet(\n", + " Sigma) +0.5 * (torch.matmul(ytr.t(), Sigma_inv_y) + 0.5* n * torch.log(2 * torch.tensor(PI)))\n", " return nll\n" ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:58:11.043627700Z", - "start_time": "2024-08-14T02:58:11.037569100Z" + "end_time": "2024-08-21T07:39:43.043489900Z", + "start_time": "2024-08-21T07:39:43.036006Z" } } }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 214, "outputs": [], "source": [ "def forward(xtr, ytr, xte, kernel, log_beta):\n", @@ -453,7 +442,6 @@ " #option 1 (standard):\n", " # K_ss= kernel(xte, xte)\n", " # var=K_ss- (K_s.t()@conjugate_gradient(Sigma, K_s))\n", - "\n", " # var_diag=var.sum(dim = 0).view(-1, 1)\n", "\n", " #option 2 (fast):\n", @@ -462,22 +450,19 @@ " # The first term of above equation might be different if you use a different kernel!\n", "\n", " var_diag = var_diag + log_beta.exp().pow(-1)\n", - "\n", - " # Denormalize\n", - " #mean, var_diag = data_normalizer.denormalize_result(mean, var_diag)\n", " return mean, var_diag" ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:58:11.594181200Z", - "start_time": "2024-08-14T02:58:11.574815900Z" + "end_time": "2024-08-21T07:39:43.520271Z", + "start_time": "2024-08-21T07:39:43.495643300Z" } } }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 215, "outputs": [], "source": [ "def train_adam(xtr, ytr, kernel, log_beta, niteration=10, lr=0.1):\n", @@ -505,45 +490,45 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:58:11.893932400Z", - "start_time": "2024-08-14T02:58:11.890821200Z" + "end_time": "2024-08-21T07:39:45.112108600Z", + "start_time": "2024-08-21T07:39:45.103495900Z" } } }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 216, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "Iteration 0, Loss: 15025.687401793451\n", - "Iteration 10, Loss: 3690.927888022656\n", - "Iteration 20, Loss: 2523.03069034738\n", - "Iteration 30, Loss: 2500.1777437991423\n", - "Iteration 40, Loss: 2406.9217345890074\n", - "Iteration 50, Loss: 2280.4290459614253\n", - "Iteration 60, Loss: 2157.144860285642\n", - "Iteration 70, Loss: 2057.972989349561\n", - "Iteration 80, Loss: 1991.6717345063005\n", - "Iteration 90, Loss: 1956.2368341705258\n", - "Iteration 100, Loss: 1942.1615564738447\n", - "Iteration 110, Loss: 1938.4791349310847\n", - "Iteration 120, Loss: 1937.885378256897\n", - "Iteration 130, Loss: 1937.5601565606112\n", - "Iteration 140, Loss: 1937.0875744725222\n", - "Iteration 150, Loss: 1936.6031670569084\n", - "Iteration 160, Loss: 1936.1685091333445\n", - "Iteration 170, Loss: 1935.7597247054507\n", - "Iteration 180, Loss: 1935.3726436221928\n", - "Iteration 190, Loss: 1934.9989925599975\n" + "Iteration 0, Loss: 13133.389463868345\n", + "Iteration 10, Loss: 10753.956066837043\n", + "Iteration 20, Loss: 7621.808055132352\n", + "Iteration 30, Loss: 5707.857269272505\n", + "Iteration 40, Loss: 4976.819992818509\n", + "Iteration 50, Loss: 5082.525002458684\n", + "Iteration 60, Loss: 4970.77230322258\n", + "Iteration 70, Loss: 4942.971378275089\n", + "Iteration 80, Loss: 4944.855096081037\n", + "Iteration 90, Loss: 4924.780036737617\n", + "Iteration 100, Loss: 4939.723503206766\n", + "Iteration 110, Loss: 4926.184142758282\n", + "Iteration 120, Loss: 4930.073199950462\n", + "Iteration 130, Loss: 4927.650690560781\n", + "Iteration 140, Loss: 4924.400280386099\n", + "Iteration 150, Loss: 4918.123378180415\n", + "Iteration 160, Loss: 4922.9038439711785\n", + "Iteration 170, Loss: 4912.8804969399\n", + "Iteration 180, Loss: 4912.108746554232\n", + "Iteration 190, Loss: 4921.0920456442045\n" ] } ], "source": [ "kernel = ARDKernel(1)\n", - "log_beta = nn.Parameter(torch.ones(1, dtype=torch.float64, device=device) * 0)\n", + "log_beta = nn.Parameter(torch.ones(1, dtype=torch.float64, device=device) * -4)\n", "start_time = time.time()\n", "train_adam(xtr, ytr, kernel, log_beta, niteration=200, lr=0.1)\n", "end_time = time.time()\n", @@ -552,19 +537,19 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:59:02.977134700Z", - "start_time": "2024-08-14T02:58:12.308369800Z" + "end_time": "2024-08-21T07:41:58.802235500Z", + "start_time": "2024-08-21T07:39:45.750275400Z" } } }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 217, "outputs": [ { "data": { "text/plain": "
", - "image/png": "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8DznBs9z7hTCuS7oZFUiIiIqbWU7I0JERET5x0CEiIiI8oaBCBEREeUNAxEiIiLKm5IORO655x7MmDEDer0eK1aswKuvvhr3+A0bNmDFihXQ6/WYOXMm7r333hyNtLilcp7/9re/4eyzz0ZdXR0sFgtOPvlkPPfcczkcbfFK9fUc8dprr0GtVmPZsmXZHWCJSPU8+3w+fOtb30J7ezt0Oh1mzZqF//u//8vRaItXquf5gQcewNKlS2E0GtHU1IQvfOELGBoaytFoi9Mrr7yC888/H83NzZAkCU888UTC78nLdVCUqIceekhoNBpx3333ie3bt4sbb7xRmEwmceDAgajH79u3TxiNRnHjjTeK7du3i/vuu09oNBrx6KOP5njkxSXV83zjjTeKH/3oR+Ltt98Wu3btEqtXrxYajUa89957OR55cUn1PEeMjo6KmTNninPOOUcsXbo0N4MtYumc5wsuuECceOKJYv369aKjo0O89dZb4rXXXsvhqItPquf51VdfFbIsi5/97Gdi37594tVXXxWLFi0SF110UY5HXlyefvpp8a1vfUs89thjAoB4/PHH4x6fr+tgyQYiJ5xwgrj++usn3Td//nxx6623Rj3+lltuEfPnz59033XXXSdOOumkrI2xFKR6nqNZuHChWLNmTaaHVlLSPc+XX365+Pa3vy1uu+02BiJJSPU8P/PMM8JqtYqhoaFcDK9kpHqef/zjH4uZM2dOuu/uu+8WLS0tWRtjqUkmEMnXdbAkl2b8fj82btyIc845Z9L955xzDl5//fWo3/PGG28cdfzHP/5xvPvuuwgEAlkbazFL5zwfSVEUOBwOVFdXZ2OIJSHd83z//fdj7969uO2227I9xJKQznl+8skncdxxx+HOO+/EtGnTMHfuXHzjG9+Ax+PJxZCLUjrneeXKlejq6sLTTz8NIQT6+vrw6KOP4pOf/GQuhlw28nUdLOimd+kaHBxEKBRCQ0PDpPsbGhrQ29sb9Xt6e3ujHh8MBjE4OIimpqasjbdYpXOej/STn/wELpcLn/70p7MxxJKQznnevXs3br31Vrz66qtQq0vyzzzj0jnP+/btw7///W/o9Xo8/vjjGBwcxA033IDh4WHmicSQznleuXIlHnjgAVx++eXwer0IBoO44IIL8POf/zwXQy4b+boOluSMSIQkSZP+Xwhx1H2Jjo92P02W6nmO+Mtf/oLbb78dDz/8MOrr67M1vJKR7HkOhUK48sorsWbNGsydOzdXwysZqbyeFUWBJEl44IEHcMIJJ+C8887DunXr8Pvf/56zIgmkcp63b9+Or3/96/jOd76DjRs34tlnn0VHRweuv/76XAy1rOTjOliSH5Vqa2uhUqmOiq77+/uPivYiGhsbox6vVqtRU1OTtbEWs3TOc8TDDz+ML37xi3jkkUdw1llnZXOYRS/V8+xwOPDuu+/i/fffx1e/+lUA4QumEAJqtRrPP/88zjzzzJyMvZik83puamrCtGnTJrU7X7BgAYQQ6Orqwpw5c7I65mKUznleu3YtTjnlFPzXf/0XAOCYY46ByWTCqaeeiu9///ucsc6QfF0HS3JGRKvVYsWKFVi/fv2k+9evX4+VK1dG/Z6TTz75qOOff/55HHfccdBoNFkbazFL5zwD4ZmQa665Bg8++CDXeJOQ6nm2WCzYsmULNm3aNH67/vrrMW/ePGzatAknnnhiroZeVNJ5PZ9yyino7u6G0+kcv2/Xrl2QZRktLS1ZHW+xSuc8u91uyPLky5VKpQJw+BM7TV3eroNZTYXNo8j2sN/97ndi+/bt4qabbhImk0ns379fCCHErbfeKj73uc+NHx/ZtnTzzTeL7du3i9/97nfcvpuEVM/zgw8+KNRqtfjlL38penp6xm+jo6P5+hGKQqrn+UjcNZOcVM+zw+EQLS0t4lOf+pTYtm2b2LBhg5gzZ4740pe+lK8foSikep7vv/9+oVarxT333CP27t0r/v3vf4vjjjtOnHDCCfn6EYqCw+EQ77//vnj//fcFALFu3Trx/vvvj2+TLpTrYMkGIkII8ctf/lK0t7cLrVYrli9fLjZs2DD+tauvvlqcdtppk45/+eWXxbHHHiu0Wq2YPn26+NWvfpXjERenVM7zaaedJgAcdbv66qtzP/Aik+rreSIGIslL9Tzv2LFDnHXWWcJgMIiWlhaxatUq4Xa7czzq4pPqeb777rvFwoULhcFgEE1NTeKqq64SXV1dOR51cXnppZfivt8WynVQEoLzWkRERJQfJZkjQkRERMWBgQgRERHlDQMRIiIiyhsGIkRERJQ3DESIiIgobxiIEBERUd4wECEiIqK8YSBCREREecNAhIiIiPKGgQgRERHlDQMRIiIiyhsGIkRERJQ3/z9KcwdeUR2hBwAAAABJRU5ErkJggg==" + "image/png": "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" }, "metadata": {}, "output_type": "display_data" @@ -596,68 +581,67 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T02:59:27.798732200Z", - "start_time": "2024-08-14T02:59:27.115944600Z" + "end_time": "2024-08-21T07:42:32.569969200Z", + "start_time": "2024-08-21T07:42:31.378104200Z" } } }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 218, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "iter 0 nll:5850.84470\n", - "iter 10 nll:4855.64257\n", - "iter 20 nll:3864.50022\n", - "iter 30 nll:2881.83439\n", - "iter 40 nll:1923.61515\n", - "iter 50 nll:1030.09092\n", - "iter 60 nll:296.90970\n", - "iter 70 nll:-115.45684\n", - "iter 80 nll:-169.68671\n", - "iter 90 nll:-154.64654\n", - "iter 100 nll:-174.45334\n", - "iter 110 nll:-176.20830\n", - "iter 120 nll:-175.85972\n", - "iter 130 nll:-176.82291\n", - "iter 140 nll:-176.81608\n", - "iter 150 nll:-176.84050\n", - "iter 160 nll:-176.87865\n", - "iter 170 nll:-176.87340\n", - "iter 180 nll:-176.87817\n", - "iter 190 nll:-176.87840\n" + "iter 0 nll:14670.65447\n", + "iter 10 nll:12258.78492\n", + "iter 20 nll:10005.62360\n", + "iter 30 nll:8181.30541\n", + "iter 40 nll:7267.93116\n", + "iter 50 nll:7272.31587\n", + "iter 60 nll:7253.54617\n", + "iter 70 nll:7209.38090\n", + "iter 80 nll:7215.41914\n", + "iter 90 nll:7210.18523\n", + "iter 100 nll:7209.70099\n", + "iter 110 nll:7209.58497\n", + "iter 120 nll:7209.35911\n", + "iter 130 nll:7209.38522\n", + "iter 140 nll:7209.34786\n", + "iter 150 nll:7209.35265\n", + "iter 160 nll:7209.34776\n", + "iter 170 nll:7209.34837\n", + "iter 180 nll:7209.34776\n", + "iter 190 nll:7209.34784\n" ] } ], "source": [ "start_time = time.time()\n", - "xtr, ytr = xtr.cpu(), ytr.cpu()\n", - "model = cigp(xtr, ytr)\n", - "model.train_adam(200, 0.1)\n", + "model = cigp().to(device)\n", + "model.train_adam(xtr, ytr,200, 0.1)\n", "end_time = time.time()\n", "standard_gp_time = end_time - start_time" ], "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T03:01:42.911504300Z", - "start_time": "2024-08-14T03:00:15.255562100Z" + "end_time": "2024-08-21T07:52:30.821615600Z", + "start_time": "2024-08-21T07:42:38.809619500Z" } } }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 219, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "standard GP time: 87.65204405784607\n", - "CG GP time: 50.666510820388794\n" + "standard GP time: 592.0098221302032\n", + "CG GP time: 133.0477843284607\n" ] } ], @@ -668,8 +652,8 @@ "metadata": { "collapsed": false, "ExecuteTime": { - "end_time": "2024-08-14T03:01:42.919017400Z", - "start_time": "2024-08-14T03:01:42.912575300Z" + "end_time": "2024-08-21T07:54:31.342927200Z", + "start_time": "2024-08-21T07:54:31.339255500Z" } } }, diff --git a/GPmodels_Advance/03_DynamicModel_GPTutorial.ipynb b/GPmodels_Advance/02_DynamicModel_GPTutorial.ipynb similarity index 100% rename from GPmodels_Advance/03_DynamicModel_GPTutorial.ipynb rename to GPmodels_Advance/02_DynamicModel_GPTutorial.ipynb diff --git a/GPmodels_Classic/01_simpleGP.ipynb b/GPmodels_Classic/01_simpleGP.ipynb deleted file mode 100644 index 5bdb840..0000000 --- a/GPmodels_Classic/01_simpleGP.ipynb +++ /dev/null @@ -1,292 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import sys\n", - "import torch\n", - "import torch.nn as nn\n", - "import numpy as np\n", - "from matplotlib import pyplot as plt\n", - "from core.kernel import ARDKernel\n", - "import torch.optim as optim\n", - "import core.GP_CommonCalculation as GP\n", - "from data_sample import generate_example_data as data\n", - "os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # Fixing strange error if run in MacOS\n", - "JITTER = 1e-6\n", - "EPS = 1e-10\n", - "PI = 3.1415" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "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" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - " # generate example data\n", - "xtr, ytr, xte, yte = data.generate(32, 100, seed=42)\n", - "data.plot(xtr, ytr, xte, yte, figsize=(6, 4))" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:49.372103500Z", - "start_time": "2024-07-30T08:46:49.277502500Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 8, - "outputs": [], - "source": [ - "normalizer = GP.DataNormalization(method=\"standard\", mode=0, learnable=False)\n", - "normalizer.fit(xtr, 'xtr')\n", - "normalizer.fit(ytr, 'ytr')\n", - "xtr = normalizer.normalize(xtr, 'xtr')\n", - "ytr = normalizer.normalize(ytr, 'ytr')" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:51.639597100Z", - "start_time": "2024-07-30T08:46:51.623879400Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 9, - "outputs": [], - "source": [ - "kernel = ARDKernel(1)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:51.911183300Z", - "start_time": "2024-07-30T08:46:51.901441900Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 10, - "outputs": [], - "source": [ - "#initiate_log_beta\n", - "log_beta = nn.Parameter(torch.ones(1) * -4) # this is a large noise. we optimize to shrink it to a proper value." - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:52.142889600Z", - "start_time": "2024-07-30T08:46:52.133213400Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 11, - "outputs": [], - "source": [ - "def negative_log_likelihood(xtr, ytr, kernel, log_beta):\n", - " Sigma = kernel(xtr, xtr) + log_beta.exp().pow(-1) * torch.eye(\n", - " xtr.size(0)) + JITTER * torch.eye(xtr.size(0))\n", - " return -GP.Gaussian_log_likelihood(ytr, Sigma)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:52.337243800Z", - "start_time": "2024-07-30T08:46:52.322077100Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 12, - "outputs": [], - "source": [ - "def forward(xtr, ytr, xte, kernel, log_beta):\n", - " n_test = xte.size(0)\n", - " xte = normalizer.normalize(xte, 'xtr')\n", - " Sigma = kernel(xtr, xtr) + log_beta.exp().pow(-1) * torch.eye(\n", - " xtr.size(0)) + JITTER * torch.eye(xtr.size(0))\n", - "\n", - " K_s = kernel(xtr, xte)\n", - " K_ss = kernel(xte, xte)\n", - "\n", - " mean, var = GP.conditional_Gaussian(ytr, Sigma, K_s, K_ss)\n", - "\n", - " var_diag = var.sum(dim=0).view(-1, 1)\n", - " var_diag = var_diag + log_beta.exp().pow(-1)\n", - "\n", - " # Denormalize\n", - " mean = normalizer.denormalize(mean, \"ytr\")\n", - " var_diag = normalizer.denormalize_cov(var_diag, \"ytr\")\n", - " return mean, var_diag" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:52.512902400Z", - "start_time": "2024-07-30T08:46:52.498325900Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 13, - "outputs": [], - "source": [ - "def train_adam(xtr, ytr, kernel, log_beta, niteration=10, lr=0.1):\n", - " # Adam optimizer\n", - " optimizer = optim.Adam([\n", - " {'params': kernel.parameters()},\n", - " {'params': [log_beta]}\n", - " ], lr=lr)\n", - "\n", - " for i in range(niteration):\n", - " optimizer.zero_grad()\n", - " loss = negative_log_likelihood(xtr, ytr, kernel, log_beta)\n", - " loss.backward()\n", - " optimizer.step()\n", - "\n", - " # Print kernel parameters\n", - " #for name, param in kernel.named_parameters():\n", - " #if param.requires_grad:\n", - " #print(f'{name}: {param.data}')\n", - "\n", - " #print('log_beta:', log_beta.data)\n", - " print('iter', i, 'nll:{:.5f}'.format(loss.item()))" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:52.672361100Z", - "start_time": "2024-07-30T08:46:52.665150600Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 14, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "iter 99 nll:23.50842\n" - ] - } - ], - "source": [ - "train_adam(xtr, ytr, kernel, log_beta, niteration=100, lr=0.1)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:54.212434400Z", - "start_time": "2024-07-30T08:46:52.845961900Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 15, - "outputs": [], - "source": [ - "with torch.no_grad():\n", - " ypred, yvar = forward(xtr, ytr, xte, kernel, log_beta)" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:54.216956700Z", - "start_time": "2024-07-30T08:46:54.213434400Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 16, - "outputs": [], - "source": [ - "xtr = normalizer.denormalize(xtr, 'xtr')\n", - "ytr = normalizer.denormalize(ytr, 'ytr')" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:54.224062500Z", - "start_time": "2024-07-30T08:46:54.218993100Z" - } - } - }, - { - "cell_type": "code", - "execution_count": 17, - "outputs": [ - { - "data": { - "text/plain": "
", - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAisAAAGdCAYAAADT1TPdAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABe+UlEQVR4nO3deXhb5Zk28Psc7ZIlWd5kO3YSZ19JWEogYQlLAoGytAMtLe1Ap0NhKG0hHwVS+gFpC/mAkjIdCkyXoWUaCqVQSkuAhAJhXxIIhDj76njftO/nnO8P2Y5N7MSSJZ0j6f5dly7HspY3x5bOo+d93ucVFEVRQERERKRRotoDICIiIjoaBitERESkaQxWiIiISNMYrBAREZGmMVghIiIiTWOwQkRERJrGYIWIiIg0jcEKERERaZpe7QGMlSzLaGlpgd1uhyAIag+HiIiIRkFRFPj9ftTW1kIUj547yftgpaWlBfX19WoPg4iIiNLQ1NSEurq6o94m74MVu90OIPmfdTgcKo+GiIiIRsPn86G+vn7gPH40eR+s9E/9OBwOBitERER5ZjQlHCywJSIiIk1jsEJERESaxmCFiIiINI3BChEREWkagxUiIiLSNAYrREREpGkMVoiIiEjTGKwQERGRpjFYISIiIk1jsEJERESaxmCFiIiINI3BChEREWkagxUiIiLSNAYrRERENCJJVtQeAoMVIiIiGp6iKOgJxtQeBoMVIiIiGl5vKI6ELKs9DAYrRERENLyuQFTtIQBgsEJERETD8EXiiMbVz6oADFaIiIhoGJ1+bWRVAAYrRERE9DmhWAKhqKT2MAYwWCEiIqIhtJRVARisEBER0SCRuARfOKH2MIZgsEJEREQDtLICaDAGK0RERAQASEgyPKG42sM4AoMVIiIiAgD0hGJQ1O+ufwQGK0RERKSZ1vrDYbBCRERE8EUSiCc0mFYBgxUiIiICNJtVARisEBERFb1IXEIgoq3lyoNlNVhZtWoVvvCFL8But6OqqgqXXnopduzYMeQ2iqLgrrvuQm1tLSwWCxYvXoytW7dmc1hEREQ0iJazKkCWg5UNGzbgu9/9Lt577z2sX78eiUQCS5cuRTAYHLjNfffdh9WrV+Ohhx7Chx9+iOrqaixZsgR+vz+bQyMiIiIAsqygN6TtYEVQlNwtUurs7ERVVRU2bNiAM844A4qioLa2FjfeeCNuvfVWAEA0GoXb7ca9996La6+99piP6fP54HQ64fV64XA4sv1fICIiKig9wRiae8Mj/rzCbkSN05Lx503l/J3TmhWv1wsAKCsrAwDs27cPbW1tWLp06cBtTCYTzjzzTLzzzjvDPkY0GoXP5xtyISIiovR0a7Bj7eflLFhRFAXLly/Haaedhjlz5gAA2traAABut3vIbd1u98DPPm/VqlVwOp0Dl/r6+uwOnIiIqEAFowlE4rLawzimnAUrN9xwAz799FP86U9/OuJngiAM+V5RlCOu67dixQp4vd6BS1NTU1bGS0REVOi0XljbT5+LJ/ne976H559/Hm+88Qbq6uoGrq+urgaQzLDU1NQMXN/R0XFEtqWfyWSCyWTK7oCJiIgKXEKS4Q1rbx+g4WQ1s6IoCm644QY8++yzePXVV9HQ0DDk5w0NDaiursb69esHrovFYtiwYQMWLlyYzaEREREVNU84rsl9gIaT1czKd7/7XTzxxBP429/+BrvdPlCH4nQ6YbFYIAgCbrzxRtxzzz2YOnUqpk6dinvuuQdWqxVf//rXszk0IiKiotabJ1NAQJaDlUceeQQAsHjx4iHXP/bYY7j66qsBALfccgvC4TCuv/569Pb2YsGCBVi3bh3sdns2h0ZERFS0wjEpLwpr++W0z0o2sM8KERFRapo9YfQERpdZKbo+K0RERKQuWVbg0XjH2s9jsEJERFREvOE45PyZAQLAYIWIiKio9ORZVgVgsEJERFQ0InEJoaik9jBSxmCFiIioSGh9d+WRMFghIiIqAoqiwBPKj461n8dghYiIqAj4IgkkpPzsVsJghYiIqAjk23LlwRisEBERFbiEJMMfSag9jLQxWCEiIipw3jzatHA4DFaIiIgKXG+eFtb2Y7BCRERUwCJxCeFY/vVWGYzBChERUQHL1+XKgzFYISIiKmD52ghuMAYrREREBcofiedtb5XBGKwQEREVqEKYAgIYrBARERUkSVbgDTNYISIiIo3y5XlvlcEYrBARERWgQiis7cdghYiIqMDEEjKC0fzurTIYgxUiIqIC4wkXTlYFYLBCRERUcAplFVA/BitEREQFJByTEI3Lag8joxisEBERFZBCmwICGKwQEREVlEKbAgIYrBARERWMQmmv/3kMVoiIiApEIWZVAAYrREREBUEuoPb6n8dghYiIqAD4IoXT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1YWampqsjTefpXOsP++BBx5AMBjEV77ylWwMsSCkc5x37dqF2267DW+++Sb0+qJ8K0hZOsd57969eOutt2A2m/HXv/4VXV1duP7669HT08O6lRGkc5wXLlyINWvW4Ktf/SoikQgSiQQuvvhi/Nd//Vcuhlw01DoXFmVmpZ8gCEO+VxTliOuOdfvhrqcjpXqs+/3pT3/CXXfdhaeeegpVVVXZGl7BGO1xliQJX//617Fy5UpMmzYtV8MrGKn8PcuyDEEQsGbNGpx88sm44IILsHr1avz+979nduUYUjnOjY2N+P73v4877rgDmzZtwksvvYR9+/bhuuuuy8VQi4oa58Ki/DhVUVEBnU53RITe0dFxRMTYr7q6etjb6/V6lJeXZ22s+S6dY93vqaeewre//W08/fTTOPfcc7M5zLyX6nH2+/3YuHEjPv74Y9xwww0AkidVRVGg1+uxbt06nH322TkZez5J5++5pqYG48aNg9PpHLhu5syZUBQFhw4dwtSpU7M65nyUznFetWoVFi1ahB/+8IcAgOOOOw42mw2nn346fvaznzH7nSFqnQuLMrNiNBpx4oknYv369UOuX79+PRYuXDjsfU499dQjbr9u3TqcdNJJMBgMWRtrvkvnWAPJjMrVV1+NJ554gnPOo5DqcXY4HNiyZQs2b948cLnuuuswffp0bN68GQsWLMjV0PNKOn/PixYtQktLCwKBwMB1O3fuhCiKqKury+p481U6xzkUCkEUh57SdDodgMOf/GnsVDsXZrV8V8P6l8X97ne/UxobG5Ubb7xRsdlsyv79+xVFUZTbbrtN+eY3vzlw+/7lWjfddJPS2Nio/O53v+PS5VFK9Vg/8cQTil6vV371q18pra2tAxePx6PWfyEvpHqcP4+rgUYn1ePs9/uVuro65bLLLlO2bt2qbNiwQZk6dary7//+72r9F/JCqsf5scceU/R6vfLwww8re/bsUd566y3lpJNOUk4++WS1/gt5we/3Kx9//LHy8ccfKwCU1atXKx9//PHAEnGtnAuLNlhRFEX51a9+pUyYMEExGo3KCSecoGzYsGHgZ1dddZVy5plnDrn966+/rhx//PGK0WhUJk6cqDzyyCM5HnH+SuVYn3nmmQqAIy5XXXVV7geeZ1L9mx6MwcropXqct23bppx77rmKxWJR6urqlOXLlyuhUCjHo84/qR7nX/7yl8qsWbMUi8Wi1NTUKFdeeaVy6NChHI86v7z22mtHfb/VyrlQUBTmx4iIiEi7irJmhYiIiPIHgxUiIiLSNAYrREREpGkMVoiIiEjTGKwQERGRpjFYISIiIk1jsEJERESaxmCFiIiINI3BChEREWkagxUiIiLSNAYrREREpGkMVoiIiEjT/j+J59mTtmF5WQAAAABJRU5ErkJggg==" - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "plt.fill_between(xte.squeeze().numpy(),\n", - " ypred.squeeze().detach().numpy() - 1.96 * np.sqrt(yvar.squeeze().detach().numpy()),\n", - " ypred.squeeze().detach().numpy() + 1.96 * np.sqrt(yvar.squeeze().detach().numpy()), alpha=0.2,\n", - " label='95% Confidence interval')\n", - "plt.plot(xte.squeeze().numpy(), ypred.squeeze().detach().numpy(), label='Predictive mean')\n", - "plt.plot(xtr.detach().numpy(), ytr.detach().numpy(), 'b+')\n", - "plt.show()" - ], - "metadata": { - "collapsed": false, - "ExecuteTime": { - "end_time": "2024-07-30T08:46:56.939462Z", - "start_time": "2024-07-30T08:46:56.854832500Z" - } - } - }, - { - "cell_type": "code", - "execution_count": null, - "outputs": [], - "source": [], - "metadata": { - "collapsed": false - } - } - ], - "metadata": { - "language_info": { - "name": "python" - }, - "kernelspec": { - "name": "python3", - "language": "python", - "display_name": "Python 3 (ipykernel)" - } - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/GPmodels_Classic/04_neuralKernelGP.ipynb b/GPmodels_Classic/04_neuralKernelGP.ipynb index 244414b..3340362 100644 --- a/GPmodels_Classic/04_neuralKernelGP.ipynb +++ b/GPmodels_Classic/04_neuralKernelGP.ipynb @@ -36,7 +36,7 @@ "import core.GP_CommonCalculation as GP\n", "from core.kernel import RBFKernel, LinearKernel, ARDKernel,RationalQuadraticKernel, PeriodicKernel\n", "import numpy as np\n", - "from core.cigp_baseline import cigp\n", + "from core.simpleGP import cigp\n", "# I use torch (1.11.0) for this work. lower version may not work.\n", "import os\n", "\n", diff --git a/README.md b/README.md index e1a6c3a..f3e6bb8 100644 --- a/README.md +++ b/README.md @@ -1,48 +1,69 @@ # MiniGP -MiniGP is a minimalistic Gaussian Process (GP) library focused on regression tasks. It is designed to be simple and easy to understand. +MiniGP is a minimalistic Gaussian Process (GP) library focused on regression tasks. It is designed to be simple and easy to understand, super lightweight, and friendly to researchers and developers. + +## Motivation +Despite that there are many successful GP libraries, such as GPy, GPflow, and GPyTorch we find them difficult to use for beginners and very time-consuming to customize. It will take a lot of time to understand the structure of the library and the GP model, by which time the user (young research student) may give up. + +Thus we want to create a simple and easy-to-use GP library that can be used by anyone. MiniGP is designed to be simple and easy to understand. It is a great tool for educational purposes. We also try to make it easy for anyone to use without a lot of background knowledge of GP. + +## Useful and practical GP Models: +- [CIGP](https://github.com/IceLab-X/Mini-GP/blob/6899d3fb947293122d758fb6ef4dd4799a799eac/core/cigp.py): simple yet accurate multi-output regression model with complexity $O(n^3 d)$ for n training points with d outputs. +- [NeuralKernel](https://github.com/IceLab-X/Mini-GP/blob/64873663f7efb63de9a6f33d1de207e7a2db1f5d/GPmodels_Classic/04_neuralKernelGP.ipynb): automatic kernel learning with neural network structured kernel. +- [GPU&GP](https://github.com/IceLab-X/Mini-GP/blob/64873663f7efb63de9a6f33d1de207e7a2db1f5d/GPmodels_Advance/01_GP&GPU_GPTutorial.ipynb): Inference method that leverage GPU acceleration for GP model. This can be used in sparse GP model to speed up the computation for large inducing point number. +- [AutoGP](https://github.com/IceLab-X/Mini-GP/blob/64873663f7efb63de9a6f33d1de207e7a2db1f5d/core/autoGP.py): A powerful GP model that incorporates a learnable input warp module, a deep neural kernel, and Sparse Gaussian Processes. -Despite that there are many successful GP libraries, such as GPy, GPflow, and Pyro, they are often too complex for beginners to understand. Things get worse when the user wants to customize the model. MiniGP is designed to be simple and easy to understand. It is a great tool for educational purposes. We also try to make it easy for anyone to use without a lot of background knowledge of GP. ## Installation We do not have a pip package yet. You can install it by cloning the repository and rune the code for your own purpose. At this stage we think it is better to keep it simple and customizable. It servers as rather demo code than a library, with some useful functions to make computation easier. +To start using MiniGP, you can clone the repository by running the following command: +```bash +git clone +``` +You can start by running the [Demo.ipynb](https://github.com/IceLab-X/Mini-GP/blob/bf66c980d55934d037992cd70625bd692ea02aaa/Demo.ipynb) to have a taste of the library. You can also check the tutorial in the GPmodels_xxx folder to learn how to use the library. + +Most models have two version, the API version for direct call and the tutorial version for customized usage. The API version is in the 'core' folder, and the tutorial version is in the 'GPmodels_xxx' folder. + + + + ## Structure -- **core:** This folder contains all the core functions for Gaussian Processes (GP). It serves as the backbone of the library. Additionally, it includes Python scripts for GP models that are designed to be easy and quick to use for research and experimentation. The folder also contains a model comparison script and the corresponding results. More details can be found in the README file within the core folder. +- **core:** This folder contains all the core functions (computing likelihood, matrix inversion, kernels, etc.) for Gaussian Processes (GP). It serves as the backbone of the library. +Additionally, it includes API GP models (.py) that are designed to be directly called for research and experimentation. +More details can be found in the [README](https://github.com/IceLab-X/Mini-GP/blob/64873663f7efb63de9a6f33d1de207e7a2db1f5d/core/README.md) file within the core folder. - - **GPmodels_Advance:** Advance GP models, including GP with GPU acceleration, and automatic GP. - - 01_GP&GPU: a GP model leverage GPU acceleration. - 01_GP&GPU_GPTutorial: Algorithms for GP leverage GPU acceleration. - - 02_DynamicModel_GPTutorial: GP dynamic model in Chinese. [Original paper](https://www.dgp.toronto.edu/~jmwang/gpdm/nips05final.pdf) + - 01_GP&GPU: Algorithms for GP leverage GPU acceleration. + - 02_DynamicModel_GPTutorial: GP dynamic model in Chinese. ([Gaussian Process Dynamical Models](https://www.dgp.toronto.edu/~jmwang/gpdm/nips05final.pdf) ) - **GPmodels_Classic:** basic GP model and its variation, such as DeepKernel GP, InputWarp GP . It demonstrates how to build a GP model with the GP_CommonCalculation. - 01_simpleGP_GPTutorial: simple GP tutorial in both English and Chinese. This is a good starting point for beginners. - 01_simpleGP, a basic GP model. It demonstrates how to build a GP model with the GP_CommonCalculation. - - 02_deepKernelGP, a GP model with deep kernel. [Original paper](https://arxiv.org/abs/1511.02222) + - 02_deepKernelGP, a GP model with deep kernel. ([Deep Kernel Learning](https://arxiv.org/abs/1511.02222) ) - 03_logTransformWarpGP, a GP model with log transform on the target values, this can improve the model performance when the noise does not follow Gaussian distribution. - 04_neuralKernelGP, a GP model with neural kernel. - **GPmodels_MultiOutput:** provides tools for implementing Gaussian Process models with multiple outputs. - 01_IntrinsicModel: Foundation work for multi-output GP. - - 02_hogp_GPTutorial_Chinese: high-oreder GP in Chinese. [Original paper](https://proceedings.mlr.press/v89/zhe19a.html) + - 02_hogp_GPTutorial_Chinese: high-oreder GP in Chinese. ([Scalable High-Order Gaussian Process Regression](https://proceedings.mlr.press/v89/zhe19a.html) ) - **GPmodels_Sparse:** provides tools for implementing sparse Gaussian Process models. - - 01_sgpr_GPTutorial: A detailed tutorial for Sparse Gaussian Process with variational learning inducing points. [Original paper](https://proceedings.mlr.press/v5/titsias09a/titsias09a.pdf) + - 01_sgpr_GPTutorial: A detailed tutorial for Sparse Gaussian Process with variational learning inducing points. ([Variational Learning of Inducing Variables in Sparse Gaussian +Processes](https://proceedings.mlr.press/v5/titsias09a/titsias09a.pdf)) - 02_svgp, A demo for implementing mini-batch gradient descent on SVGP allows training a GP with 10k inputs in 2 seconds. - - 02_svgp_GPTutorial, A detailed tutorial for Stochastic Variational Interference GP model that can allow mini-batch training. [Original paper](https://arxiv.org/abs/1411.2005) + - 02_svgp_GPTutorial, A detailed tutorial for Stochastic Variational Interference GP model that can allow mini-batch training. ([Gaussian Process for Big Data](https://arxiv.org/abs/1411.2005)) - **Debug_NaNError_FAQ:** Frequently asked questions for GP model. It contains some techniques to solve NaN problem in GP model. More details can be found in the README file in the Debug_NaNError_FAQ folder. - **Bayesian_Optimization:** This folder contains useful tools for Bayesian optimization - acq: A Python scripy including several widely used acquisition functions. - BO_demo: A demonstration of the process of Bayesian optimization. -- **asset:** This folder contains the python scripts for the model comparison and regression test. As well as the result in both .csv and .png format. For more details, please refer to the README.md in the folder. + +- **experiment:** This folder contains the python scripts of the experiment. + +- **asset:** This folder contains the result of the experiment in both .csv and .png format. - - **Model_comparison.py:** A Python script that compares the performance of different GP models on various synthetic datasets, including periodic, warped, and polynomial. The default models are set as autoGP and its base model vsgp. - - - **Regression_test.py:** A Python script that tests the accuracy and training speed on different sizes of training sets. The results are stored in result1.csv and result2.csv. - - **result1.csv:** The result of the regression test for different training set sizes. diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asset/Bayesian_Optimization.png b/asset/Bayesian_Optimization.png new file mode 100644 index 0000000..46a04a2 Binary files /dev/null and b/asset/Bayesian_Optimization.png differ diff --git a/core/GP_CommonCalculation.py b/core/GP_CommonCalculation.py index 5ad3547..b463e67 100644 --- a/core/GP_CommonCalculation.py +++ b/core/GP_CommonCalculation.py @@ -53,6 +53,58 @@ def conjugate_gradient(A, b, x0=None, tol=1e-1, max_iter=1000): return x +def lanc_quad_logdet(A, m=10, nvecs=10): + """ + Estimate the log-determinant of a symmetric positive definite matrix using + the Stochastic Lanczos Quadrature (SLQ) method. + + Parameters: + A (torch.Tensor): The symmetric positive definite input matrix. + m (int): Number of Lanczos steps (degree). + nvecs (int): Number of starting vectors. + + Returns: + z1 mean: The average of estimates for starting vectors. + """ + n = A.shape[0] + z1 = torch.zeros(nvecs, dtype=A.dtype, device=A.device) + + for ii in range(nvecs): + w = torch.sign(torch.randn(n, dtype=A.dtype, device=A.device)) # Random Rademacher vector + v0 = w / (torch.norm(w)+EPS) + + # Lanczos algorithm + V = torch.zeros((n, m), dtype=A.dtype, device=A.device) + alpha = torch.zeros(m, dtype=A.dtype, device=A.device) + beta = torch.zeros(m - 1, dtype=A.dtype, device=A.device) + V[:, 0] = v0.clone() + + w = A @ V[:, 0].clone() + + alpha[0] = torch.dot(V[:, 0].clone(), w) + w = w - alpha[0].clone() * V[:, 0].clone() + + for j in range(1, m): + beta[j - 1] = torch.norm(w) + if beta[j - 1] != 0: + V[:, j] = w / (beta[j - 1].clone()+EPS) + w = A @ V[:, j].clone() - beta[j - 1].clone() * V[:, j - 1].clone() + alpha[j] = torch.dot(V[:, j].clone(), w) + w = w - alpha[j].clone() * V[:, j].clone() + + H = torch.diag(alpha) + torch.diag(beta, 1) + torch.diag(beta, -1) + + eigvals, eigvecs = torch.linalg.eig(H) + eigvals, eigvecs = eigvals.real, eigvecs.real + + theta = torch.abs(eigvals) + gamma2 = eigvecs[0, :] ** 2 + + # Sum of gamma2 * log(theta) + count = torch.sum(gamma2 * torch.log(theta)) + z1[ii] = (count * n).real + + return z1.mean() def compute_inverse_and_log_det_positive_eigen(matrix): """ @@ -92,7 +144,7 @@ def Gaussian_log_likelihood(y, cov, Kinv_method='cholesky'): mean (torch.Tensor): The mean of the Gaussian distribution. cov (torch.Tensor): The covariance matrix of the Gaussian distribution. Kinv_method (str, optional): The method to compute the inverse of the covariance matrix. - Defaults to 'cholesky3'. + Defaults to 'cholesky'. Returns: torch.Tensor: The log-likelihood of the Gaussian distribution. @@ -121,23 +173,23 @@ def Gaussian_log_likelihood(y, cov, Kinv_method='cholesky'): else: gamma = torch.linalg.solve_triangular(L, y, upper=False) return -0.5 * (gamma.T @ gamma + 2 * L.diag().log().sum() + len(y) * np.log(2 * np.pi)) - - elif Kinv_method == 'torch_distribution_MN1': - L = torch.linalg.cholesky(cov) - return torch.distributions.MultivariateNormal(y, scale_tril=L).log_prob(y) - elif Kinv_method == 'torch_distribution_MN2': - return torch.distributions.MultivariateNormal(y, cov).log_prob(y) elif Kinv_method == 'eigen': K_inv, log_det_K = compute_inverse_and_log_det_positive_eigen(cov) return -0.5 * (y.T @ K_inv @ y + log_det_K + len(y) * np.log(2 * np.pi)) elif Kinv_method == 'conjugate': - L = torch.linalg.cholesky(cov) + Sigma_inv_y = conjugate_gradient(cov, y) return -0.5 * (torch.matmul(y.t(), Sigma_inv_y) - 0.5 * len(y) * torch.log( - 2 * torch.tensor(torch.pi))) - L.diag().log().sum() + 2 * torch.tensor(torch.pi))) - 0.5 * lanc_quad_logdet(cov) + elif Kinv_method == 'torch_distribution_MN1': + L = torch.linalg.cholesky(cov) + return torch.distributions.MultivariateNormal(y, scale_tril=L).log_prob(y) + elif Kinv_method == 'torch_distribution_MN2': + return torch.distributions.MultivariateNormal(y, cov).log_prob(y) + else: - raise ValueError('Kinv_method should be either direct or cholesky') + raise ValueError('Kinv_method is not supported.') def conditional_Gaussian(y, Sigma, K_s, K_ss, Kinv_method='cholesky'): diff --git a/core/README.md b/core/README.md index 8ba5c87..fda5daf 100644 --- a/core/README.md +++ b/core/README.md @@ -9,11 +9,11 @@ This README provides an overview of the folder's structure, key files, and instr ## Python scripts for the core models - autoGP.py: A GP model that automatically standardize the data and choose the kernel for you. It is a simple GP model that is easy to use for general users. - - deepkernelGP.py: A GP model that uses a deep kernel to model the data. It is a more complex GP model that is suitable for users who want to model complex data. [Original paper](https://arxiv.org/abs/1511.02222) - - cigp_baseline.py: A basic GP model that is used as a baseline methods, and it is used for compare the performance of the other GP models. - - hogp.py: A GP model that uses high-order output to model the data. It is suitable for users who want to model data with high-order output. [Original paper](https://proceedings.mlr.press/v89/zhe19a.html) - - sgpr.py: A sparse GP model that uses variational inference to approximate the posterior distribution. It is suitable for users who want to model data with size between 1k to 10k. [Original paper](https://proceedings.mlr.press/v5/titsias09a/titsias09a.pdf) - - svgp.py: A sparse GP model that uses stochastic variational inference that allow Mini-Batch gradient descent. It is suitable for users who want to model data with size over 10k. [Original paper](https://arxiv.org/abs/1411.2005) + - deepkernelGP.py: A GP model that uses a deep kernel to model the data. It is a more complex GP model that is suitable for users who want to model complex data. + - cigp.py: A basic GP model that is used as a baseline methods, and it is used for compare the performance of the other GP models. + - hogp.py: A GP model that uses high-order output to model the data. It is suitable for users who want to model data with high-order output. + - sgpr.py: A sparse GP model that uses variational inference to approximate the posterior distribution. It is suitable for users who want to model data with size between 1k to 10k. + - svgp.py: A sparse GP model that uses stochastic variational inference that allow Mini-Batch gradient descent. It is suitable for users who want to model data with size over 10k. - parametricGP.py: A seemly self-contradict idea, but a highly efficient and accurate GP model for large dataset. It is suitable for users who want to model data with size over 10k. - inputWarpedGP.py: A GP model that uses input warping to model the data. It is suitable for users who want to model non-stationary data. diff --git a/core/cigp_baseline.py b/core/cigp.py similarity index 91% rename from core/cigp_baseline.py rename to core/cigp.py index 6ec3c99..19e244e 100644 --- a/core/cigp_baseline.py +++ b/core/cigp.py @@ -1,12 +1,15 @@ -import torch -import os +# # Conditional independent Gaussian process (CIGP) for vector output regression based on pytorch +# # +# # CIGP use a single kernel for each output. Thus the log likelihood is simply a sum of the log likelihood of each output. import sys -# sys.path.append('/Users/zidongchen/PycharmProjects/MiniGP/Mini-GP') +import os +_path = os.path.dirname(__file__).split(os.sep) +sys.path.append(os.sep.join(_path[:_path.index('MiniGP')+1])) + +import torch import torch.nn as nn -from core.kernel import ARDKernel, NeuralKernel, PeriodicKernel, MaternKernel, PolynomialKernel -import numpy as np +from core.kernel import ARDKernel import matplotlib.pyplot as plt -import data_sample.generate_example_data as data import core.GP_CommonCalculation as GP JITTER = 1e-6 @@ -26,7 +29,7 @@ def __init__(self, kernel=ARDKernel(1), log_beta=None, K_inv_method='cholesky'): self.kernel = kernel self.K_inv_method = K_inv_method - def forward(self, xtr, ytr, xte): + def forward(self, xtr, ytr, xte, ytr_var=None): Sigma = self.kernel(xtr, xtr) + self.log_beta.exp().pow(-1) * torch.eye(xtr.size(0), device=self.log_beta.device) \ + JITTER * torch.eye(xtr.size(0), device=self.log_beta.device) @@ -39,10 +42,11 @@ def forward(self, xtr, ytr, xte): return mean, var_diag - def negative_log_likelihood(self, xtr, ytr): + def negative_log_likelihood(self, xtr, ytr, ytr_var=None): Sigma = self.kernel(xtr, xtr) + self.log_beta.exp().pow(-1) * torch.eye( xtr.size(0), device=self.log_beta.device) + JITTER * torch.eye(xtr.size(0), device=self.log_beta.device) - + if ytr_var is not None: + Sigma = Sigma + ytr_var.diag()* torch.eye(xtr.size(0)).to(xtr.device) return -GP.Gaussian_log_likelihood(ytr, Sigma, Kinv_method=self.K_inv_method) def train_adam(self, xtr, ytr, niteration=10, lr=0.1): diff --git a/core/cigp_DeepKernel.py b/core/cigp_DeepKernel.py deleted file mode 100644 index ef3d1a3..0000000 --- a/core/cigp_DeepKernel.py +++ /dev/null @@ -1,81 +0,0 @@ -# Conditional independent Gaussian process (CIGP) for vector output regression based on pytorch -# -# CIGP use a single kernel for each output. Thus the log likelihood is simply a sum of the log likelihood of each output. - -# Author: Wei W. Xing (wxing.me) -# Email: wayne.xingle@gmail.com -# Date: 2023-11-26 -from data_sample import generate_example_data as data -import numpy as np -import torch -import torch.nn as nn -from core.kernel import ARDKernel -import core.GP_CommonCalculation as gp_pack - -import matplotlib.pyplot as plt - -EPS = 1e-10 - - -class CIGP_DKL(nn.Module): - def __init__(self, X, Y, normal_y_mode=0): - super().__init__() - # normalize X independently for each dimension - self.normalizer = gp_pack.DataNormalization() - self.normalizer.fit(X, 'x') - self.normalizer.fit(Y, 'y') - self.X = self.normalizer.normalize(X, 'x') - self.Y = self.normalizer.normalize(Y, 'y') - - # GP hyperparameters - self.log_beta = nn.Parameter( - torch.ones(1) * 0) # a large noise by default. Smaller value makes larger noise variance. - - input_dim = self.X.shape[1] - self.kernel = ARDKernel(input_dim=input_dim) - self.FeatureExtractor = torch.nn.Sequential(nn.Linear(input_dim, input_dim * 2), - nn.LeakyReLU(), - nn.Linear(input_dim * 2, input_dim * 2), - nn.LeakyReLU(), - nn.Linear(input_dim * 2, input_dim * 2), - nn.LeakyReLU(), - nn.Linear(input_dim * 2, input_dim)) - - def forward(self, x_test): - - x_train = self.FeatureExtractor(self.X) - x_test = self.FeatureExtractor(x_test) - - K = self.kernel(x_train, x_train) + self.log_beta.exp().pow(-1) * torch.eye(self.X.shape[0]) - K_s = self.kernel(x_train, x_test) - K_ss = self.kernel(x_test, x_test) - - mu, cov = gp_pack.conditional_Gaussian(self.Y, K, K_s, K_ss) - cov = cov.sum(dim=0).view(-1, 1) + self.log_beta.exp().pow(-1) - - return mu, cov - - def negative_log_likelihood(self): - - x_train = self.FeatureExtractor(self.X) - K = self.kernel(x_train, x_train) + self.log_beta.exp().pow(-1) * torch.eye(self.X.shape[0]) - - return -gp_pack.Gaussian_log_likelihood(self.Y, K) - # modified by Wei Xing to penalize the variance term - # return gp_pack.Gaussian_log_likelihood(y_train - mean_part_train, K) / x_train.shape[0] - torch.log(self.noise_variance) * 2 - - def train_adam(self, niteration=10, lr=0.1): - optimizer = torch.optim.Adam(self.parameters(), lr=lr) - optimizer.zero_grad() - for i in range(niteration): - optimizer.zero_grad() - loss = self.negative_log_likelihood() - loss.backward() - optimizer.step() - if i % 100 == 0: - print('iter %d, loss %.3f' % (i, loss.item())) - return loss - - def print_parameters(self): - for name, param in self.named_parameters(): - print(f"Parameter name: {name}, shape: {param.shape}") diff --git a/core/deepkernelGP.py b/core/deepkernelGP.py index 5979879..0aa2864 100644 --- a/core/deepkernelGP.py +++ b/core/deepkernelGP.py @@ -1,6 +1,3 @@ -# Conditional independent Gaussian process (CIGP) for vector output regression based on pytorch -# -# CIGP use a single kernel for each output. Thus the log likelihood is simply a sum of the log likelihood of each output. # Author: Wei W. Xing (wxing.me) # Email: wayne.xingle@gmail.com @@ -144,7 +141,7 @@ def print_parameters(self): xte_normalized = normalizer.normalize(xte, 'x') # Define the layer structure for the neural network - layer_structure = [2,20,10, 2] + layer_structure = [2,20,40,10, 2] # Initialize and train the model model = deepkernelGP(input_dim=2, layer_structure=layer_structure) diff --git a/core/hogp.py b/core/hogp.py index c0e76e2..0bc63a9 100644 --- a/core/hogp.py +++ b/core/hogp.py @@ -1,3 +1,4 @@ +## This is the implementation of the high order GP model. import numpy as np import torch import torch.nn as nn @@ -5,7 +6,6 @@ import tensorly import math import os -import matplotlib.pyplot as plt import unittest from tensorly import tucker_to_tensor diff --git a/core/inputWarpedGP.py b/core/inputWarpedGP.py index 3a664c7..d2631ef 100644 --- a/core/inputWarpedGP.py +++ b/core/inputWarpedGP.py @@ -8,7 +8,7 @@ # I use torch (1.11.0) for this work. lower version may not work. from core.kernel import ARDKernel import os -from core.cigp_baseline import cigp +from core.cigp import cigp os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # Fixing strange error if run in MacOS JITTER = 1e-6 diff --git a/core/kernel.py b/core/kernel.py index 80bf2a1..fe9dc03 100644 --- a/core/kernel.py +++ b/core/kernel.py @@ -30,16 +30,16 @@ def __init__(self, input_dim): # 定义核函数 self.kernels = nn.ModuleDict({ 'RationalQuadratic': RationalQuadraticKernel(input_dim), - 'linear': LinearKernel(input_dim), - 'periodic': PeriodicKernel(), + 'Linear': LinearKernel(input_dim), + 'Periodic': PeriodicKernel(), 'ARD': ARDKernel(input_dim) }) self.softplus = nn.Softplus() # 定义核函数的可学习权重 self.weights = nn.ParameterDict({ 'RationalQuadratic': nn.Parameter(torch.tensor(1.0)), - 'linear': nn.Parameter(torch.tensor(1.0)), - 'periodic': nn.Parameter(torch.tensor(1.0)), + 'Linear': nn.Parameter(torch.tensor(1.0)), + 'Periodic': nn.Parameter(torch.tensor(1.0)), 'ARD': nn.Parameter(torch.tensor(1.0)) }) diff --git a/core/sgpr.py b/core/sgpr.py index 178f2d8..965b5f3 100644 --- a/core/sgpr.py +++ b/core/sgpr.py @@ -82,6 +82,8 @@ def forward(self, X, Y, Xte_normalized): return mean, var_diag + + def train_adam(self, X, Y, niteration=10, lr=0.1): optimizer = torch.optim.Adam(self.parameters(), lr=lr) optimizer.zero_grad() diff --git a/core/svgp.py b/core/svgp.py index a1d8be1..b0b918b 100644 --- a/core/svgp.py +++ b/core/svgp.py @@ -1,3 +1,7 @@ +# Author: Zidong Chen +# Date: 2024/07/17 +# This is the implementation of the Stochastic Variational Gaussian Process (SVGP) model. Key references: GP for big data + import torch import torch.nn as nn from torch.utils.data import DataLoader, TensorDataset @@ -11,7 +15,6 @@ PI = 3.1415 torch.manual_seed(4) - class svgp(nn.Module): def __init__(self, num_inducing, input_dim, num_data): super(svgp, self).__init__() diff --git a/core/svgp_stable.py b/core/svgp_stable.py deleted file mode 100644 index 18bc0dd..0000000 --- a/core/svgp_stable.py +++ /dev/null @@ -1,181 +0,0 @@ -# Author: Zidong Chen -# Date: 2024/07/17 -# This is the implementation of the Stochastic Variational Gaussian Process (SVGP) model. Key references: GP for big data - -import os -import torch -import torch.nn as nn - -os.environ['KMP_DUPLICATE_LIB_OK'] = 'True' # Fixing strange error if run in MacOS -from matplotlib import pyplot as plt -from torch.utils.data import TensorDataset, DataLoader -from core.kernel import ARDKernel -import core.GP_CommonCalculation as GP -import data_sample.generate_example_data as data - -JITTER = 1e-3 -PI = 3.1415 -torch.manual_seed(4) - - -class svgp(nn.Module): - def __init__(self, X, Y, num_inducing, batchsize=None): - super(svgp, self).__init__() - - self.X_all, self.Y_all = X, Y - self.num_data = X.size(0) - self.kernel = ARDKernel(1) - self.num_inducing = num_inducing - input_dim = X.size(1) - - # Inducing points - self.xm = nn.Parameter(torch.rand(self.num_inducing, input_dim, dtype=torch.float64)) # Inducing points - self.qu_mean = nn.Parameter(torch.zeros(self.num_inducing, 1, dtype=torch.float64)) - self.chole = nn.Parameter(torch.rand(self.num_inducing, 1, dtype=torch.float64)) - - # kernel - self.kernel = ARDKernel(input_dim) - # Gaussian noise - self.log_beta = nn.Parameter(torch.ones(1, dtype=torch.float64) * 0) - - # normalize - self.normalizer = GP.DataNormalization(method='standard') - self.normalizer.fit(self.X_all, 'x') - self.normalizer.fit(self.Y_all, 'y') - self.X_all = self.normalizer.normalize(self.X_all, 'x') - self.Y_all = self.normalizer.normalize(self.Y_all, 'y') - self.batchsize = batchsize - if self.batchsize is not None: - # Create TensorDataset and DataLoader for minibatch training - dataset = TensorDataset(self.X_all, self.Y_all) - self.dataloader = DataLoader(dataset, batch_size=self.batchsize, shuffle=False) - self.iterator = iter(self.dataloader) - else: - self.iterator = None - - def new_batch(self): - if self.iterator is not None: - try: - X_batch, Y_batch = next(self.iterator) - except StopIteration: - # Reinitialize the iterator if it reaches the end - self.iterator = iter(self.dataloader) - X_batch, Y_batch = next(self.iterator) - return X_batch, Y_batch - else: - return self.X_all, self.Y_all - - def loss_function(self, X, Y): - K_mm = self.kernel(self.xm, self.xm) + JITTER * torch.eye(self.xm.size(0), dtype=torch.float64, - device=self.xm.device) - Lm = torch.linalg.cholesky(K_mm) - K_mm_inv = torch.cholesky_inverse(Lm) - K_mn = self.kernel(self.xm, X) - K_nm = K_mn.t() - qu_S = self.chole @ self.chole.t() + JITTER * torch.eye(self.xm.size(0), - dtype=torch.float64, - device=self.xm.device) # Ensure positive definite - Ls = torch.linalg.cholesky(qu_S) - K_nn = self.kernel(X, X).diag() - batch_size = X.size(0) - # K_nm * K_mm_inv * m, (b, 1) - mean_vector = K_nm @ K_mm_inv @ self.qu_mean - - # diag(K_tilde), (b, 1) - precision = 1 / self.log_beta.exp() - K_tilde = precision * (K_nn - (K_nm @ K_mm_inv @ K_mn).diag()) - - # k_i \cdot k_i^T, (b, m, m) - # Expand dimensions and transpose for batch - K_nm_expanded = K_nm.unsqueeze(2) # Shape (b, m, 1) - K_nm_transposed = K_nm_expanded.transpose(1, 2) # Shape (b, 1, m) - - # Perform batch matrix multiplication - lambda_mat = torch.matmul(K_nm_expanded, K_nm_transposed) # Shape (b, m, m) - # K_mm_inv \cdot k_i \cdot k_i^T \cdot K_mm_inv, (b, m, m) - lambda_mat = K_mm_inv @ lambda_mat @ K_mm_inv - # Trace terms, (b,) - batch_matrices = qu_S @ lambda_mat - traces = precision * torch.einsum('bii->b', batch_matrices) - - # Likelihood - likelihood_sum = -0.5 * batch_size * torch.log(2 * torch.tensor(PI)) + 0.5 * batch_size * torch.log( - self.log_beta.exp()) \ - - 0.5 * self.log_beta.exp() * ((Y - K_nm @ K_mm_inv @ self.qu_mean) ** 2).sum(dim=0).view(-1, - 1) - 0.5 * torch.sum( - K_tilde) - 0.5 * torch.sum(traces) - - # Compute KL - logdetS = 2 * Ls.diag().abs().log().sum() - logdetKmm = 2 * Lm.diag().abs().log().sum() - KL = 0.5 * (K_mm_inv @ qu_S).diag().sum(dim=0).view(-1, 1) + 0.5 * (self.qu_mean.t() @ K_mm_inv @ self.qu_mean) \ - - 0.5 * logdetS + 0.5 * logdetKmm - 0.5 * self.num_inducing - variational_loss = KL - likelihood_sum * self.num_data / batch_size - return variational_loss - - def forward(self, Xte): - Xte = self.normalizer.normalize(Xte, 'x') - K_mm = self.kernel(self.xm, self.xm) + JITTER * torch.eye(self.xm.size(0), dtype=torch.float64, - device=self.xm.device) - Lm = torch.linalg.cholesky(K_mm) - K_mm_inv = torch.cholesky_inverse(Lm) - K_tt = self.kernel(Xte, Xte) - K_tm = self.kernel(Xte, self.xm) - A = K_tm @ K_mm_inv # (t, m) - mean = A @ self.qu_mean # (t, 1) - yvar = K_tt - K_tm @ K_mm_inv @ K_tm.t() + K_tm @ K_mm_inv @ (self.chole @ self.chole.t()) @ K_mm_inv @ K_tm.t() - yvar = yvar.diag().view(-1, 1) - # denormalize - mean = self.normalizer.denormalize(mean, 'y') - yvar = self.normalizer.denormalize_cov(yvar, 'y') - return mean, yvar - - -if __name__ == '__main__': - # Train and evaluate the model - torch.manual_seed(4) - # Train set - num_data = 3000 - xtr, ytr, xte, yte = data.generate(num_data, 500, seed=2, input_dim=1) - device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') - xtr = xtr.to(device) - ytr = ytr.to(device) - xte = xte.to(device) - yte = yte.to(device) - - # Training the model - num_inducing = 200 - batch_size = 600 - learning_rate = 0.1 - num_epochs = 800 - # Create an instance of SVIGP - model = svgp(xtr, ytr, num_inducing=num_inducing, batchsize=batch_size).to(device) - optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) - import time - - iteration_times = [] - for i in range(num_epochs): - start_time = time.time() - optimizer.zero_grad() - X_batch, Y_batch = model.new_batch() - loss = model.loss_function(X_batch, Y_batch) - loss.backward() - optimizer.step() - end_time = time.time() - iteration_times.append(end_time - start_time) - if i % 10 == 0: - print('iter', i, 'nll:{:.5f}'.format(loss.item())) - - average_iteration_time = sum(iteration_times) / len(iteration_times) - print(f'Average iteration time: {average_iteration_time:.5f} seconds') - # Evaluate the model on the test set - model.eval() - with torch.no_grad(): - predictions, var = model(xte) - mse = torch.mean((predictions - yte) ** 2) - print(f'Test MSE: {mse.item()}') - plt.figure() - plt.plot(xte.cpu().numpy(), yte.cpu().numpy(), 'r.') - plt.plot(xte.cpu().numpy(), predictions.cpu().numpy(), 'b-') - plt.fill_between(xte.cpu().numpy().reshape(-1), (predictions - 1.96 * var.sqrt()).cpu().numpy().reshape(-1), - (predictions + 1.96 * var.sqrt()).cpu().numpy().reshape(-1), alpha=0.2) diff --git a/asset/Model_comparison.py b/experiment/Experiment_01.py similarity index 100% rename from asset/Model_comparison.py rename to experiment/Experiment_01.py diff --git a/asset/Regression_test.py b/experiment/Experiment_02.py similarity index 99% rename from asset/Regression_test.py rename to experiment/Experiment_02.py index 819d839..ef0bcd4 100644 --- a/asset/Regression_test.py +++ b/experiment/Experiment_02.py @@ -8,7 +8,7 @@ import data_sample.generate_example_data as data from core.parametricGP import parametricGP from core.svgp import svgp -from core.cigp_baseline import cigp +from core.cigp import cigp from core.sgpr import vsgp from torch.utils.data import DataLoader, TensorDataset import core.GP_CommonCalculation as GP @@ -124,7 +124,7 @@ filename = f'results_{timestamp}.csv' # Save all results to CSV -filename = 'results1.csv' +filename = '../asset/results1.csv' with open(filename, 'w', newline='') as csvfile: fieldnames = ['Model', 'Training Size', 'Batch Size', 'Number of Inducing Points', 'Iteration', 'Training Time per Iteration (MilliSeconds)', 'MSE']