GitHub_collection_pykan/tutorials/API_3_extract_activations.ipynb
2024-08-11 13:02:16 -04:00

132 lines
60 KiB
Plaintext

{
"cells": [
{
"cell_type": "markdown",
"id": "134e7f9d",
"metadata": {},
"source": [
"# API 3: Extracting activation functions\n",
"\n",
"The KAN diagrams give intuitive illustration, but sometimes we may also want to extract the values of activation functions for more quantitative tasks. Using the indexing convention introduced in the indexing notebook, each edge is indexed as $(l,i,j)$, where $l$ is the layer index, $i$ is the input neuron index, and $j$ is output neuron index."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "2075ef56",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"checkpoint directory created: ./model\n",
"saving model version 0.0\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 500x400 with 22 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from kan import *\n",
"import matplotlib.pyplot as plt\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=3, k=3, seed=1)\n",
"x = torch.normal(0,1,size=(100,2))\n",
"model(x)\n",
"model.plot(beta=100)"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "d3fe2e03",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 300x300 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"l = 0\n",
"i = 0\n",
"j = 3\n",
"x, y = model.get_fun(l,i,j)"
]
},
{
"cell_type": "markdown",
"id": "a9e62f17",
"metadata": {},
"source": [
"If we are interested in the range of some activation function, we can use get_range."
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "1a978202",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"x range: [-2.40 , 2.44 ]\n",
"y range: [-0.07 , 0.24 ]\n"
]
},
{
"data": {
"text/plain": [
"(tensor(-2.4044), tensor(2.4423), tensor(-0.0673), tensor(0.2396))"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.get_range(l,i,j)"
]
}
],
"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.7"
}
},
"nbformat": 4,
"nbformat_minor": 5
}