GitHub_collection_pykan/tutorials/Example_8_continual_learning.ipynb
2024-08-11 17:13:55 -04:00

298 lines
90 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "134e7f9d",
"metadata": {},
"source": [
"# Example 8: Continual Learning"
]
},
{
"cell_type": "markdown",
"id": "2571d531",
"metadata": {},
"source": [
"Setup: Our goal is to learn a 1D function from samples. The 1D function has 5 Gaussian peaks. Instead of presenting all samples to NN all at once, we have five phases of learning. In each phase only samples around one peak is presented to KAN. We find that KANs can do continual learning thanks to locality of splines."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "2075ef56",
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x7f5f8b8f8a30>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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nnvuOb+vWS9atIiVlpayQ4cOsZ07d7I77riDxcXFeQWporbvT3/6E1u9ejU7cOAAs9vt7NFHH2UA2LvvvusuI9J3qLZ9MjNnzmTjx4/3uU+Rvr+Ghgb3eQ4AW7JkCdu5c6f7TTtRf4NRH4zMmTOHAej174svvnCXAcBeffVV9/9LksSKi4tZdnY2S0xMZFOnTu0VDbe0tLCf//znLDMzkyUlJbFrr72WHT16lFOruqmurma33XYbS0tLY2lpaey2227r9Ypdz/YxxtgLL7zAkpKSfK47cfToUTZ16lSWmZnJEhIS2PDhw9m9997ba60OHqhtX3NzM5s2bRrr378/i4+PZ0OGDGFz5szp9d2I8v0xpr6N5eXlPvu0Z7828jt87rnn2NChQ1lCQgIbO3as10zMnDlz2EUXXeRVft26dez8889nCQkJbNiwYT4D5HfeeYeNGjWKxcfHs7POOsvrRGcEatp40UUX+fyu5syZ4y5z//33syFDhrCEhATWv39/Nm3aNLZ582aOLfJGTfueeeYZNnz4cGa1WllGRga78MIL2YcffthrnyJ9h2r7aG1tLUtKSmIvvviiz/2J9P3JMzj++puov0ETY11PqhAEQRAEQRgArTNCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEIShUDBCEARBEISh/H/8jUceLbfJQQAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import *\n",
"import numpy as np\n",
"import torch\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"datasets = []\n",
"\n",
"n_peak = 5\n",
"n_num_per_peak = 100\n",
"n_sample = n_peak * n_num_per_peak\n",
"\n",
"x_grid = torch.linspace(-1,1,steps=n_sample)\n",
"\n",
"x_centers = 2/n_peak * (np.arange(n_peak) - n_peak/2+0.5)\n",
"\n",
"x_sample = torch.stack([torch.linspace(-1/n_peak,1/n_peak,steps=n_num_per_peak)+center for center in x_centers]).reshape(-1,)\n",
"\n",
"\n",
"y = 0.\n",
"for center in x_centers:\n",
" y += torch.exp(-(x_grid-center)**2*300)\n",
" \n",
"y_sample = 0.\n",
"for center in x_centers:\n",
" y_sample += torch.exp(-(x_sample-center)**2*300)\n",
" \n",
"\n",
"plt.plot(x_grid.detach().numpy(), y.detach().numpy())\n",
"plt.scatter(x_sample.detach().numpy(), y_sample.detach().numpy())"
]
},
{
"cell_type": "markdown",
"id": "19477c89",
"metadata": {},
"source": [
"Sequentially prensenting different peaks to KAN"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "831a9456",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 1500x200 with 5 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplots(1, 5, figsize=(15, 2))\n",
"plt.subplots_adjust(wspace=0, hspace=0)\n",
"\n",
"for i in range(1,6):\n",
" plt.subplot(1,5,i)\n",
" group_id = i - 1\n",
" plt.plot(x_grid.detach().numpy(), y.detach().numpy(), color='black', alpha=0.1)\n",
" plt.scatter(x_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak].detach().numpy(), y_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak].detach().numpy(), color=\"black\", s=2)\n",
" plt.xlim(-1,1)\n",
" plt.ylim(-1,2)"
]
},
{
"cell_type": "markdown",
"id": "3e487a84",
"metadata": {},
"source": [
"Training KAN"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "11a1d129",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.99e-06 | test_loss: 3.99e-06 | reg: 3.31e+00 | : 100%|█| 100/100 [00:01<00:00, 89.80\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.99e-06 | test_loss: 3.99e-06 | reg: 3.31e+00 | : 100%|█| 100/100 [00:01<00:00, 76.04\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.2\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.99e-06 | test_loss: 3.99e-06 | reg: 3.31e+00 | : 100%|█| 100/100 [00:01<00:00, 92.65\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.3\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.99e-06 | test_loss: 3.99e-06 | reg: 3.31e+00 | : 100%|█| 100/100 [00:01<00:00, 79.18\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.4\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.99e-06 | test_loss: 3.99e-06 | reg: 3.31e+00 | : 100%|█| 100/100 [00:01<00:00, 87.63\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.5\n"
]
}
],
"source": [
"ys = []\n",
"\n",
"# setting bias_trainable=False, sp_trainable=False, sb_trainable=False is important.\n",
"# otherwise KAN will have random scaling and shift for samples in previous stages\n",
"\n",
"model = KAN(width=[1,1], grid=200, k=3, noise_scale=0.1, sp_trainable=False, sb_trainable=False, base_fun='zero')\n",
"\n",
"for group_id in range(n_peak):\n",
" dataset = {}\n",
" dataset['train_input'] = x_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak][:,None]\n",
" dataset['train_label'] = y_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak][:,None]\n",
" dataset['test_input'] = x_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak][:,None]\n",
" dataset['test_label'] = y_sample[group_id*n_num_per_peak:(group_id+1)*n_num_per_peak][:,None]\n",
" model.fit(dataset, opt = 'LBFGS', steps=100, update_grid=False);\n",
" y_pred = model(x_grid[:,None])\n",
" ys.append(y_pred.detach().numpy()[:,0])"
]
},
{
"cell_type": "markdown",
"id": "dbb9a1b7",
"metadata": {},
"source": [
"Prediction of KAN after each stage"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "12379f4a",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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URGoA82amhodOnQosH1+9OjRjPV52xitqanJQEvbu//++zVnzhxde+21+s///M+s/I1s2LdvnyZOnKjbbrtNkyZN0pEjR3LdpIQFObccPHgwsLmlsrJSlZWVGelzv+IzyDX0X//1X3Xttddq1qxZgcst559/vu666y5NmjRJhw8fznWTEkYNbUEN7VqQa+j999+vq6++Wpdeemmg+nz//v06//zzdfvttwcyt1BD/UUN9d/999+vyy+/XJdffrn+4z/+I9fNSdiBAwc0adIk3X333ZoyZUpg8rlTk2MPP/ywysrKvJ9Ro0Zl5e/8+Mc/9mYwd+/erZ/85CdZ+TuZFovFVFtb6/27urpaxpgctihxtbW1ikajkprPxAblALltn9fU1ASqz+3BfKb6vG2Mnn322Wk/Z1sVFRWtCu6//du/tXoPXPboo4/qwIEDkppzy09/+tMctygxjHP/ZSOf+xGfUnBraEVFRauY/Pd///esffjJtEceecTLLeXl5fr5z3+e4xYlhtzSGjW0a0GtoQcOHGiVBx966KGsneDPtIcfftjL5+Xl5fqv//qv3DYoQdRQ/1FD/Xfw4MF2uSUoff7QQw95K4DLy8v1s5/9LMctSoxTk2M//OEPVVVV5f2Ul5dn/G/EYjH96U9/kiRdf/31kqQFCxYE4mDt2LFjMsaosLBQkUhExhg1NDTkulkJOXbsmCSppKSk1b9d19DQIGOMIpGIIpGIYrFYYPq8vr5ektSrVy9JmenztjG6YcOGtJ+zrQULFqixsVHnnHOOxo4dq9raWj377LMZ/zuZFo1GtWDBAkktueWpp54KRG6x49zmliCN86Dmlmzkcz/iM8g19Mknn1RDQ4OXW2pqavTcc8/lulndMsZ47ZwzZ46k4PQ5NbQ1amjnglxDFy5cqIaGBp199tkaN26cqqqqtHDhwlw3q1vGGC1atEiSdO2110qSnnjiiUD0OTXUf9RQ/73wwgtqaGjQmWeeqXHjxqm6ujow+byjcR4ETk2OFRcXq1+/fq1+Mm316tWqqKhQr1699Lvf/U6FhYXavn27tm3blvG/lWk26ffq1cv7IBiEg8ympiZFo1GFQiH1799foVBITU1NampqynXTuhXUPj9x4oRisZhCoZDKysoktbwP6Wgbo3379s1Ec1t58803JUk33XSTbrrpJknSG2+8kfG/k2kr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",
"text/plain": [
"<Figure size 1500x200 with 5 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.subplots(1, 5, figsize=(15, 2))\n",
"plt.subplots_adjust(wspace=0, hspace=0)\n",
"\n",
"for i in range(1,6):\n",
" plt.subplot(1,5,i)\n",
" group_id = i - 1\n",
" plt.plot(x_grid.detach().numpy(), y.detach().numpy(), color='black', alpha=0.1)\n",
" plt.plot(x_grid.detach().numpy(), ys[i-1], color='black')\n",
" plt.xlim(-1,1)\n",
" plt.ylim(-1,2)"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "d2002726",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.16"
}
},
"nbformat": 4,
"nbformat_minor": 5
}