GitHub_collection_pykan/tutorials/.ipynb_checkpoints/API_7_pruning-checkpoint.ipynb
2024-08-11 16:06:09 -04:00

350 lines
117 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "134e7f9d",
"metadata": {},
"source": [
"# API 7: Pruning\n",
"\n",
"We usually use pruning to make neural networks sparser hence more efficient and more interpretable. KANs provide two ways of pruning: automatic pruning, and manual pruning."
]
},
{
"cell_type": "markdown",
"id": "7fd6a742",
"metadata": {},
"source": [
"## Pruning nodes"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "2075ef56",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cuda\n",
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"| train_loss: 3.46e-02 | test_loss: 3.46e-02 | reg: 4.91e+00 | : 100%|█| 20/20 [00:05<00:00, 3.36it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 22 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import *\n",
"\n",
"device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
"print(device)\n",
"\n",
"# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
"model = KAN(width=[2,5,1], grid=5, k=3, seed=1, device=device)\n",
"\n",
"# create dataset 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",
"dataset['train_input'].shape, dataset['train_label'].shape\n",
"\n",
"# train the model\n",
"model.fit(dataset, opt=\"LBFGS\", steps=20, lamb=0.01);\n",
"model(dataset['train_input'])\n",
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "280cc49f",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.2\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mode = 'auto'\n",
"\n",
"if mode == 'auto':\n",
" # automatic\n",
" model = model.prune_node(threshold=1e-2) # by default the threshold is 1e-2\n",
" model.plot()\n",
"elif mode == 'manual':\n",
" # manual\n",
" model = model.prune_node(active_neurons_id=[[0]])"
]
},
{
"cell_type": "markdown",
"id": "cf7001ab",
"metadata": {},
"source": [
"## Pruning Edges"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "b58417be",
"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: 7.84e-02 | test_loss: 7.80e-02 | reg: 7.26e+00 | : 100%|█| 6/6 [00:01<00:00, 3.72it/s\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 22 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import *\n",
"# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
"model = KAN(width=[2,5,1], grid=5, k=3, seed=1, device=device)\n",
"\n",
"# create dataset 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",
"dataset['train_input'].shape, dataset['train_label'].shape\n",
"\n",
"# train the model\n",
"model.fit(dataset, opt=\"LBFGS\", steps=6, lamb=0.01);\n",
"model(dataset['train_input'])\n",
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "4d57cbfe",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.2\n"
]
}
],
"source": [
"model.prune_edge()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "e3a23aed",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 22 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model.plot()"
]
},
{
"cell_type": "markdown",
"id": "1db74fbd",
"metadata": {},
"source": [
"## Prune nodes and edges together"
]
},
{
"cell_type": "markdown",
"id": "4e7e2c8a",
"metadata": {},
"source": [
"just use model.prune()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "1ea08f0e",
"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.46e-02 | test_loss: 3.46e-02 | reg: 4.91e+00 | : 100%|█| 20/20 [00:05<00:00, 3.70it\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.1\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 22 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import *\n",
"# create a KAN: 2D inputs, 1D output, and 5 hidden neurons. cubic spline (k=3), 5 grid intervals (grid=5).\n",
"model = KAN(width=[2,5,1], grid=5, k=3, seed=1, device=device)\n",
"\n",
"# create dataset 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",
"dataset['train_input'].shape, dataset['train_label'].shape\n",
"\n",
"# train the model\n",
"model.fit(dataset, opt=\"LBFGS\", steps=20, lamb=0.01);\n",
"model(dataset['train_input'])\n",
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "4fc161de",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"saving model version 0.2\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
"<Figure size 500x400 with 6 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model = model.prune()\n",
"model.plot()"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "5a8dd8a8",
"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
}