{ "cells": [ { "cell_type": "markdown", "id": "76939333", "metadata": {}, "source": [ "# Layer Extension\n", "\n", "In this example, we will demonstrate how to extend layers in data re-uploading circuits and making a more powerful DARUAN in QKAN." ] }, { "cell_type": "code", "execution_count": 1, "id": "987fb07e", "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import torch\n", "\n", "from qkan import QKAN, create_dataset\n", "\n", "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", "\n", "# f(x,y) = exp(sin(pi*x)+y^2)\n", "f = lambda x: torch.exp(torch.sin(torch.pi * x[:, [0]]) + x[:, [1]] ** 2)\n", "dataset = create_dataset(f, n_var=2, device=device)\n", "\n", "# initialize QKAN with r=1\n", "model = QKAN(\n", " [2, 5, 1],\n", " reps=1,\n", " device=device,\n", " preact_trainable=True, # enable flexible fourier frequency\n", " postact_bias_trainable=True, # extend output bound\n", " postact_weight_trainable=True, # extend output bound\n", " ba_trainable=True, # enable residual connection for better convergence\n", ")\n", "optimizer = torch.optim.Adam(model.parameters(), lr=5e-3) " ] }, { "cell_type": "code", "execution_count": 2, "id": "e06a1428", "metadata": {}, "outputs": [], "source": [ "test_results = []\n", "qkans = [model] # save the model" ] }, { "cell_type": "code", "execution_count": 3, "id": "3b974558", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████| 100/100 [00:00<00:00, 181.69it/s, train loss=1.0124128, test loss=1.1017513]\n" ] } ], "source": [ "result = model.train_(dataset, optimizer=optimizer, steps=100)\n", "test_results += result[\"test_loss\"]" ] }, { "cell_type": "markdown", "id": "abf9a86a", "metadata": {}, "source": [ "Do layer extension to get a fine-grained model." ] }, { "cell_type": "code", "execution_count": 4, "id": "36ad25ac", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████| 100/100 [00:09<00:00, 10.89it/s, train loss=8.0940447e-07, test loss=9.647775e-07]\n", "100%|███████████| 100/100 [00:03<00:00, 27.13it/s, train loss=3.3596322e-07, test loss=3.903716e-07]\n", "100%|███████████| 100/100 [00:05<00:00, 19.77it/s, train loss=9.609832e-08, test loss=1.2657244e-07]\n", "100%|████████████| 100/100 [00:03<00:00, 28.59it/s, train loss=9.314607e-08, test loss=1.240494e-07]\n" ] } ], "source": [ "reps = [5 * i for i in range(1, 5)]\n", "for idx, r in enumerate(reps):\n", " qkans.append(\n", " QKAN(\n", " [2, 5, 1],\n", " reps=r,\n", " device=device,\n", " preact_trainable=True,\n", " postact_bias_trainable=True,\n", " postact_weight_trainable=True,\n", " ba_trainable=True,\n", " )\n", " )\n", " qkans[-1].initialize_from_another_model(qkans[idx])\n", " optimizer = torch.optim.LBFGS(qkans[-1].parameters(), lr=5e-1)\n", " result = qkans[-1].train_(dataset, optimizer=optimizer, steps=100)\n", " test_results += result[\"test_loss\"]" ] }, { "cell_type": "markdown", "id": "24bbc7b2", "metadata": {}, "source": [ "Compare to directly train a large number of repetitions." ] }, { "cell_type": "code", "execution_count": 5, "id": "192e57b9", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████| 500/500 [00:49<00:00, 10.07it/s, train loss=4.4905502e-07, test loss=7.657976e-07]\n" ] } ], "source": [ "model = QKAN(\n", " [2, 5, 1],\n", " reps=20,\n", " device=device,\n", " preact_trainable=True,\n", " postact_bias_trainable=True,\n", " postact_weight_trainable=True,\n", " ba_trainable=True,\n", ")\n", "optimizer = torch.optim.LBFGS(model.parameters(), lr=5e-1)\n", "result = model.train_(dataset, optimizer=optimizer, steps=500)" ] }, { "cell_type": "code", "execution_count": 6, "id": "c2cab6c9", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGwCAYAAABFFQqPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjYuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8o6BhiAAAACXBIWXMAAA9hAAAPYQGoP6dpAABLbklEQVR4nO3dd3hUZf4+/vtMS5tMeoUUutISCRADoiCREBWXtbEsK1UsGMsnNtDfUsQFv7bFwoqrQsR1AXEVFRHBCAQlUg1FpBpIgBQgkMmkTTJzfn9MZiBk0iDJM+V+XVeuM+Vk5j2H7M7tUyVZlmUQERERuSGF6AKIiIiIRGEQIiIiIrfFIERERERui0GIiIiI3BaDEBEREbktBiEiIiJyWwxCRERE5LZUogtwdGazGWfOnIGvry8kSRJdDhEREbWALMsoKytDZGQkFIrG230YhJpx5swZREVFiS6DiIiIrkJ+fj46d+7c6PMMQs3w9fUFYLmQOp1OcDVERETUEnq9HlFRUbbv8cYwCDXD2h2m0+kYhIiIiJxMc8NaOFiaiIiI3BaDEBEREbktBiEiIiJyWxwjREREbc5kMqGmpkZ0GeTC1Go1lErlNb8OgxAREbUZWZZRWFiIixcvii6F3IC/vz/Cw8OvaZ0/BiEiImoz1hAUGhoKb29vLkRL7UKWZVRUVKC4uBgAEBERcdWvxSBERERtwmQy2UJQUFCQ6HLIxXl5eQEAiouLERoaetXdZBwsTUREbcI6Jsjb21twJeQurH9r1zIejUGIiIjaFLvDqKO0xd8agxARERG5LQYhIiIiclsMQkRE5NaGDx+Op556SnQZLkeSJKxZs0Z0Gc1iEBLEZJax6XCx6DKIiMjFxcbGYtGiRR3+vgUFBUhNTe3w920tBiEBak1m3LtkG6Ys24nNDENERG7PaDSKLqHNhYeHw8PDQ3QZzWIQEkClVCAhOgAA8NI3B2GsNQuuiIiofciyjApjbYf/yLJ81TV/8sknGDhwIHx9fREeHo6//vWvtoX7ZFlG9+7d8frrr9f7nZycHEiShGPHjgEALl68iAcffBAhISHQ6XS49dZbsXfvXtv5c+fORXx8PD788EN06dIFnp6ejdbz008/YdiwYfDy8kJUVBSeeOIJlJeXAwCWL18OrVaLo0eP2s6fMWMGrrvuOlRUVGD48OE4efIk/u///g+SJNWbZdXU6wKWlqQFCxZg6tSp8PX1RXR0NP7973/bnjcajUhLS0NERAQ8PT0RExODhQsX2p6/smts//79uPXWW+Hl5YWgoCA89NBDMBgMtucnT56MsWPH4vXXX0dERASCgoLw2GOPtftWLVxQUZAnkntgTc4Z/HGuHBnbcvHQzd1El0RE1OYqa0zoPfv7Dn/fgy+lwFtzdV9xNTU1mD9/Pnr16oXi4mKkp6dj8uTJWLduHSRJwtSpU7Fs2TI888wztt9ZtmwZbr75ZnTv3h0AcN9998HLywvfffcd/Pz88P7772PkyJE4cuQIAgMDAQDHjh3D//73P3zxxReNLgZ4/PhxjB49Gi+//DKWLl2Ks2fPIi0tDWlpaVi2bBkmTpyItWvXYsKECdi2bRu+//57fPjhh8jOzoa3tze++OILxMXF4aGHHsL06dNb/LpWb7zxBubPn48XXngBn3/+OR599FHccsst6NWrF95++218/fXX+OyzzxAdHY38/Hzk5+fb/Rzl5eVISUlBUlISdu7cieLiYjz44INIS0tDRkaG7bxNmzYhIiICmzZtwrFjxzBu3DjEx8fXq72tsUVIEJ2nGs+P7gUAeOuHoyjWVwmuiIiIAGDq1KlITU1F165dceONN+Ltt9/Gd999Z2u9mDx5Mg4fPowdO3YAsASn//73v5g6dSoAS0vLjh07sHr1agwcOBA9evTA66+/Dn9/f3z++ee29zEajVi+fDluuOEG9O/f324tCxcuxIQJE/DUU0+hR48eGDJkCN5++20sX74cVVWW7433338fBQUFeOKJJzBt2jTMnTsXCQkJAIDAwEAolUpb61Z4eHiLXxcAbr/9dsyYMQPdu3fH888/j+DgYGzatAkAkJeXhx49euCmm25CTEwMbrrpJowfP97u5/jvf/+LqqoqLF++HH379sWtt96Kd999F5988gmKiops5wUEBODdd9/FddddhzvvvBN33HEHMjMzW/+P2ApsERLongGd8Z/tedibfxGvrD+EN++PF10SEVGb8lIrcfClFCHve7V2796NuXPnYu/evbhw4QLMZsvwhby8PPTu3RuRkZG44447sHTpUgwePBjffPMNqqurcd999wEA9u7dC4PB0GCbkcrKShw/ftx2PyYmBiEhIU3WsnfvXuzbtw+ffvqp7TFZlmE2m5Gbm4vrr78eAQEB+Oij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ixRdBpHT4GBpIiIiclsMQkREROS2GISIiIjIbTEIERERkdtiECIiIiK3xSBEREREbotBiIiIiNwWgxARERG5LQYhIiIiclsMQkREROS2GISIiIjIbTEIERERkdtiECIiIiK3xSBEREREbkslugBHJ8syAECv1wuuhIiIiFrK+r1t/R5vDINQM8rKygAAUVFRgishIiKi1iorK4Ofn1+jz0tyc1HJzZnNZpw5cwa+vr6QJKnNXlev1yMqKgr5+fnQ6XRt9rrUEK91x+B17hi8zh2H17pjtNd1lmUZZWVliIyMhELR+Eggtgg1Q6FQoHPnzu32+jqdjv8D6yC81h2D17lj8Dp3HF7rjtEe17mpliArDpYmIiIit8UgRERERG6LQUgQDw8PzJkzBx4eHqJLcXm81h2D17lj8Dp3HF7rjiH6OnOwNBEREbkttggRERGR22IQIiIiIrfFIERERERui0GIiIiI3BaDkCCLFy9GbGwsPD09kZiYiB07doguyalkZWVhzJgxiIyMhCRJWLNmTb3nZVnG7NmzERERAS8vLyQnJ+Po0aP1zikpKcGECROg0+ng7++PadOmwWAwdOCncHwLFy7EoEGD4Ovri9DQUIwdOxaHDx+ud05VVRUee+wxBAUFQavV4p577kFRUVG9c/Ly8nDHHXfA29sboaGhePbZZ1FbW9uRH8Whvffee+jfv79tQbmkpCR89913tud5jdvHK6+8AkmS8NRTT9ke47VuG3PnzoUkSfV+rrvuOtvzDnWdZepwK1eulDUajbx06VL5t99+k6dPny77+/vLRUVFoktzGuvWrZNffPFF+YsvvpAByF9++WW951955RXZz89PXrNmjbx37175rrvukrt06SJXVlbazhk9erQcFxcn//LLL/LWrVvl7t27y+PHj+/gT+LYUlJS5GXLlskHDhyQc3Jy5Ntvv12Ojo6WDQaD7ZxHHnlEjoqKkjMzM+Vdu3bJN954ozxkyBDb87W1tXLfvn3l5ORk+ddff5XXrVsnBwcHy7NmzRLxkRzS119/LX/77bfykSNH5MOHD8svvPCCrFar5QMHDsiyzGvcHnbs2CHHxsbK/fv3l5988knb47zWbWPOnDlynz595IKCAtvP2bNnbc870nVmEBJg8ODB8mOPPWa7bzKZ5MjISHnhwoUCq3JeVwYhs9ksh4eHy6+99prt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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(test_results, label=\"layer extension\")\n", "plt.plot(result[\"test_loss\"], label=\"direct train\")\n", "plt.ylabel(\"MSE\")\n", "plt.xlabel(\"step\")\n", "plt.yscale(\"log\")\n", "plt.legend()" ] }, { "cell_type": "markdown", "id": "499a03ed", "metadata": {}, "source": [ "With layer extension, the model achieves better loss performance while requiring less training time, enabling efficient scalability without sacrificing accuracy." ] } ], "metadata": { "kernelspec": { "display_name": "venv", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }