{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Per-channel function-node activity gating\n", "\n", "This tutorial demonstrates `node_activity_mode='per-channel'` in the GSNN. We use **one fixed graph** and simulate **two datasets** from it with different `special_functions` per function node. Each sample carries a one-hot `x_fn` encoding which data-generating regime it came from (analogous to a sample-level covariate such as **cell line** in biology).\n", "\n", "We compare three models on the combined dataset:\n", "\n", "1. **Model A** – plain GSNN (no node-activity gating)\n", "2. **Model B** – `node_activity_mode='per-node'` with the one-hot `x_fn`\n", "3. **Model C** – `node_activity_mode='per-channel'` with the same `x_fn`\n", "\n", "Per-channel gating lets a shared activity MLP produce a distinct gate for each latent channel of every function node, enabling richer condition-specific behaviour while sharing parameters across nodes." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import networkx as nx\n", "import numpy as np\n", "import torch\n", "from matplotlib import pyplot as plt\n", "\n", "from gsnn.models.GSNN import GSNN\n", "from gsnn.simulate.nx2pyg import nx2pyg\n", "from gsnn.simulate.simulate import simulate\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "torch.manual_seed(0)\n", "np.random.seed(0)\n", "\n", "device = 'cuda' if torch.cuda.is_available() else 'cpu'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define a single graph\n", "\n", "All observations share this topology. The two datasets differ only in the nonlinear functions used at each function node during simulation." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Graph: 10 nodes, 9 edges\n", "Function nodes: ['fA', 'fB', 'fC', 'fD']\n" ] } ], "source": [ "input_nodes = ['in0', 'in1', 'in2']\n", "function_nodes = ['fA', 'fB', 'fC', 'fD']\n", "output_nodes = ['out0', 'out1', 'out2']\n", "\n", "G = nx.DiGraph()\n", "G.add_edges_from([\n", " ('in0', 'fA'), ('in1', 'fB'), ('in2', 'fC'),\n", " ('fA', 'fD'), ('fB', 'fD'), ('fC', 'fD'),\n", " ('fD', 'out0'), ('fA', 'out1'), ('fB', 'out2'),\n", "])\n", "\n", "print(f\"Graph: {G.number_of_nodes()} nodes, {G.number_of_edges()} edges\")\n", "print(f\"Function nodes: {function_nodes}\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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vqa1xbx58/DFF18gLi7uraPKJYG/Q9IknFpApSY+Ph7ffvst2rdvD1tbW9y+fRuLFy9GcnJysUxfeJO9e/ciKioKzZo1g7GxMc6ePYv58+ejdu3a+Z7cRERvJuVrWlv88ssvAABXV1dkZ2fjwIEDWLp0KQYPHlwqJZa/Q9J0LLJUagwNDXHr1i189NFHePbsGUxMTNCiRQssX75cvWROSbGwsMCePXuwZMkSJCcnw87ODt27d8d33333yhI5RFQwUr6mtYWJiQkWL16MW7duITMzEzVq1MDUqVPxxRdflMr++TskTcepBURERESkkXhBBCIiIiLSSCyyRERERKSRWGSJiIiISCOxyBIRERGRRmKRJSIiIiKNxCJLRERERBqJRZaIiIiINBKLLBERERFpJBZZIiIiItJILLJEREREpJFYZImIiIhII7HIEhEREZFGYpElIiIiIo3EIktEREREGolFloiIiIg0EossEREREWkkFlkiIiIi0kgsskRERESkkVhkiYiIiEgjscgSERERkUZikSUiIiIijcQiS0REREQaiUWWiIiIiDQSiywRERERaSQWWSIiIiLSSHpSB5CaEALZ2dnIzMyESqUCAMhkMhgYGMDQ0BAymUzihESkSYQQyMrKQmZmJoQQAF4cUwwNDWFgYMBjChEVihACmZmZyMrKUh9TdHR0YGhoCH19/XJ/TCmXRVapVCIhIQFJSUlIT09XF9iXyWQyGBkZwdTUFDY2NjAwMCjlpESkCXJycvD8+XMkJycjPT1d/cfmZTKZDMbGxjA3N4e1tTX09MrlIZiI3iIrKwvPnj1DamoqMjIy8j2m6OjowNjYGBYWFrCysoKurm4pJ5WeTOT36GihzMxMPH36FM+fP8/3SfEmZmZmsLOzg5mZWQmkIyJNk56ejidPniAxMfGd7m9paQk7OzsYGxsXczIi0kQpKSl48uQJUlJSCn1fmUwGa2tr2NrawtDQsATSlU3losgKIfD06VM8fPjwnQrsy6ysrFClSpVy+c6HiACVSoVHjx7hyZMnxbI9Ozs7VKxYETo6PG2BqDxSKpV48OABEhISirwtmUyGSpUqwdbWtlxMO9D6IpudnY24uDikp6cX63Z1dXVRvXp1js4SlTMZGRmIi4tDVlZWsW7XwMAANWrUgJGRUbFul4jKtpSUFNy5cwdKpbJYt2tsbIwa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S0REREQaiUWWiIiIiDQSiywRERERaSQWWSIiIiLSSCyyRERERKSRWGSJiIiISCOxyBIRERGRRmKRJSIiIiKNxCJLRERERBqJRZaIiIiINBKLLBERERFpJBZZIiIiItJILLJEREREpJFYZImIiIhII7HIEhEREZFGYpElIiIiIo3EIktEREREGolFloiIiIg0EossEREREWkkFlkiIiIi0kgsskRERESkkVhkiYiIiEgjscgSERERkUZikSUiIiIijcQiS0REREQaiUWWiIiIiDQSiywRERERaSQWWSIiIiLSSCyyRERERKSRWGSJiIiISCOxyBIRERGRRmKRJSIiIiKNxCJLRERERBqJRZaIiIiINBKLLBERERFpJBZZIiIiItJILLJEREREpJFYZImIiIhII7HIEhEREZFGYpElIiIiIo3EIktEREREGolFloiIiIg0EossEREREWkkFlkiIiIi0kgsskRERESkkVhkiYiIiEgjscgSERERkUZikSUiIiIijcQiS0REREQaiUWWiIiIiDQSiywRERERaSQWWSIiIiLSSCyyRERERKSRWGSJiIiISCOxyBIRERGRRmKRJSIiIiKNxCJLRERERBqJRZaIiIiINBKLLBERERFpJBZZIiIiItJILLJEREREpJFYZImIiIhII7HIEhEREZFGYpElIiIiIo3EIktEREREGolFloiIiIg0UrktsleuXEFYWNhbb3fp0iVERESUQiIi0mTHjx/H0aNH33q7o0eP4vjx46WQiIg0WUREBC5duvTW24WFheHKlSulkKhsKrdFNjIyEn369EFcXFy+txFCYODAgVi5cmUpJiMiTRQUFAR/f3+kpqbme5vU1FT4+/tj69atpZiMiDTRH3/8gYEDB0IIke9t4uLi0KdPHxw8eLD0gpUx5bbIDh48GBYWFvjuu+/yvU1oaCjOnDmDTz/9tPSCEZFGGjduHJ49e4bly5fne5vly5fj2bNnGDduXCkmIyJN9Omnn+LMmTMIDQ3N9zbfffcdLC0tMWjQoFJMVraU2yJrZmaGKVOmYNWqVa8dlRVCYPbs2Wjfvj3atWsnQUIi0iROTk4YNmwYFixY8NpR2dTUVCxYsADDhw+Ho6Nj6QckIo3i5eUFLy8vzJ49+7WjsnFxcVi1ahWmTJkCMzMzCRKWDeW2yAIvRlDyG5XNHY2dNWuW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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pos = {\n", " 'in0': (-2, 2), 'in1': (0, 2), 'in2': (2, 2),\n", " 'fA': (-2, 0.5), 'fB': (0, 0.5), 'fC': (2, 0.5), 'fD': (0, -0.5),\n", " 'out0': (-2, -2), 'out1': (0, -2), 'out2': (2, -2),\n", "}\n", "\n", "def color_for(n):\n", " if n in input_nodes: return 'lightgray'\n", " if n in output_nodes: return 'lightgray'\n", " return 'skyblue'\n", "\n", "fig, ax = plt.subplots(figsize=(7, 5))\n", "colors = [color_for(n) for n in G.nodes]\n", "nx.draw_networkx(G, pos, ax=ax, node_color=colors, with_labels=True,\n", " node_size=600, font_size=10, arrowstyle='->', arrowsize=18)\n", "ax.set_title('Single graph used for both data-generating regimes')\n", "ax.set_axis_off()\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simulate two datasets from the same graph\n", "\n", "Each regime uses a distinct set of `special_functions`. We also build a **one-hot condition vector** per sample and broadcast it to every function node as `x_fn` with shape `(B, Nf, 2)`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "D1 shapes: (400, 3) (400, 3)\n", "D2 shapes: (400, 3) (400, 3)\n" ] } ], "source": [ "special_functions_D1 = {\n", " 'fA': lambda x: np.tanh(np.sum(x)),\n", " 'fB': lambda x: -np.mean(x),\n", " 'fC': lambda x: np.sum([xx**2 for xx in x]),\n", " 'fD': lambda x: np.tanh(np.sum(x)),\n", "}\n", "\n", "special_functions_D2 = {\n", " 'fA': lambda x: -np.tanh(np.sum(x)),\n", " 'fB': lambda x: np.mean(x),\n", " 'fC': lambda x: -np.sum([xx**2 for xx in x]),\n", " 'fD': lambda x: -np.tanh(np.sum(x)),\n", "}\n", "\n", "N_TRAIN = 400\n", "N_TEST = 100\n", "\n", "x_tr_1, x_te_1, y_tr_1, y_te_1 = simulate(G, n_train=N_TRAIN, n_test=N_TEST,\n", " input_nodes=input_nodes, output_nodes=output_nodes,\n", " special_functions=special_functions_D1, noise_scale=0.01)\n", "\n", "x_tr_2, x_te_2, y_tr_2, y_te_2 = simulate(G, n_train=N_TRAIN, n_test=N_TEST,\n", " input_nodes=input_nodes, output_nodes=output_nodes,\n", " special_functions=special_functions_D2, noise_scale=0.01)\n", "\n", "print('D1 shapes:', x_tr_1.shape, y_tr_1.shape)\n", "print('D2 shapes:', x_tr_2.shape, y_tr_2.shape)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Combined train: torch.Size([800, 3]) torch.Size([800, 3]) torch.Size([800, 4, 2])\n", "Combined test : torch.Size([200, 3]) torch.Size([200, 3]) torch.Size([200, 4, 2])\n", "x_fn example (first train row, node fA): [0. 1.]\n" ] } ], "source": [ "def condition_one_hot(n, source):\n", " oh = np.zeros((n, 2), dtype=np.float32)\n", " oh[:, source] = 1.0\n", " return oh\n", "\n", "def broadcast_xfn(oh, n_fn):\n", " return np.broadcast_to(oh[:, None, :], (oh.shape[0], n_fn, oh.shape[1])).copy()\n", "\n", "n_fn = len(function_nodes)\n", "\n", "xfn_tr_1 = broadcast_xfn(condition_one_hot(N_TRAIN, 0), n_fn)\n", "xfn_te_1 = broadcast_xfn(condition_one_hot(N_TEST, 0), n_fn)\n", "xfn_tr_2 = broadcast_xfn(condition_one_hot(N_TRAIN, 1), n_fn)\n", "xfn_te_2 = broadcast_xfn(condition_one_hot(N_TEST, 1), n_fn)\n", "\n", "rng = np.random.default_rng(0)\n", "perm = rng.permutation(2 * N_TRAIN)\n", "\n", "def to_tensor(a):\n", " return torch.tensor(a, dtype=torch.float32, device=device)\n", "\n", "x_train = to_tensor(np.concatenate([x_tr_1, x_tr_2], axis=0)[perm])\n", "y_train = to_tensor(np.concatenate([y_tr_1, y_tr_2], axis=0)[perm])\n", "xfn_train = to_tensor(np.concatenate([xfn_tr_1, xfn_tr_2], axis=0)[perm])\n", "\n", "x_test = to_tensor(np.concatenate([x_te_1, x_te_2], axis=0))\n", "y_test = to_tensor(np.concatenate([y_te_1, y_te_2], axis=0))\n", "xfn_test = to_tensor(np.concatenate([xfn_te_1, xfn_te_2], axis=0))\n", "\n", "test_source = np.array(['D1'] * N_TEST + ['D2'] * N_TEST)\n", "\n", "print('Combined train:', x_train.shape, y_train.shape, xfn_train.shape)\n", "print('Combined test :', x_test.shape, y_test.shape, xfn_test.shape)\n", "print('x_fn example (first train row, node fA):', xfn_train[0, 0].cpu().numpy())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Train three GSNNs on the combined dataset\n", "\n", "- **Model A** sees only `x` and must average over both regimes.\n", "- **Model B** uses per-node gating: one scalar gate per function node (identical across nodes when `x_fn` is broadcast).\n", "- **Model C** uses per-channel gating: a vector of gates per function node from the same shared MLP.\n", "\n", "Hyperparameters are otherwise identical." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "data = nx2pyg(G, input_nodes, function_nodes, output_nodes)\n", "\n", "gsnn_kwargs = dict(\n", " channels=5,\n", " layers=3,\n", " share_layers=False,\n", " bias=True,\n", " add_function_self_edges=False,\n", " checkpoint=False,\n", " norm='none',\n", " init='degree_normalized',\n", " residual=True,\n", " node_attn=False,\n", " node_mlp=False,\n", " dropout=0.,\n", ")\n", "\n", "def train(model, with_xfn, n_iters=1000, lr=1e-2, weight_decay=1e-2):\n", " optim = torch.optim.AdamW(model.parameters(), lr=lr, weight_decay=weight_decay)\n", " crit = torch.nn.MSELoss()\n", " for i in range(n_iters):\n", " model.train(); optim.zero_grad()\n", " if with_xfn:\n", " yhat = model(x_train, x_fn=xfn_train)\n", " else:\n", " yhat = model(x_train)\n", " loss = crit(y_train, yhat)\n", " loss.backward()\n", " optim.step()\n", " if (i + 1) % 100 == 0 or i == n_iters - 1:\n", " model.eval()\n", " with torch.no_grad():\n", " if with_xfn:\n", " yhat_te = model(x_test, x_fn=xfn_test)\n", " else:\n", " yhat_te = model(x_test)\n", " te_loss = crit(y_test, yhat_te).item()\n", " print(f' iter {i + 1:4d} | train mse: {loss.item():.4f} | test mse: {te_loss:.4f}', end='\\r')\n", " print()\n", " return model" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Training Model A (no node activity)...\n", " iter 1000 | train mse: 0.4377 | test mse: 0.4625\n", "Training Model B (per-node node activity)...\n", " iter 1000 | train mse: 0.2905 | test mse: 0.2792\n", "Training Model C (per-channel node activity)...\n", " iter 1000 | train mse: 0.0026 | test mse: 0.0030\n", "Model A params: 270\n", "Model B params: 367\n", "Model C params: 435\n" ] } ], "source": [ "print('Training Model A (no node activity)...')\n", "torch.manual_seed(0)\n", "model_A = GSNN(data.edge_index_dict, data.node_names_dict,\n", " node_activity=False, **gsnn_kwargs).to(device)\n", "train(model_A, with_xfn=False)\n", "\n", "print('Training Model B (per-node node activity)...')\n", "torch.manual_seed(0)\n", "model_B = GSNN(data.edge_index_dict, data.node_names_dict,\n", " node_activity=True,\n", " node_activity_mode='per-node',\n", " node_activity_dim=2,\n", " node_activity_hidden=16,\n", " node_activity_temperature=0.5,\n", " **gsnn_kwargs).to(device)\n", "train(model_B, with_xfn=True)\n", "\n", "print('Training Model C (per-channel node activity)...')\n", "torch.manual_seed(0)\n", "model_C = GSNN(data.edge_index_dict, data.node_names_dict,\n", " node_activity=True,\n", " node_activity_mode='per-channel',\n", " node_activity_dim=2,\n", " node_activity_hidden=16,\n", " node_activity_temperature=0.5,\n", " **gsnn_kwargs).to(device)\n", "train(model_C, with_xfn=True)\n", "\n", "print('Model A params:', sum(p.numel() for p in model_A.parameters()))\n", "print('Model B params:', sum(p.numel() for p in model_B.parameters()))\n", "print('Model C params:', sum(p.numel() for p in model_C.parameters()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Test performance" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Model A | test MSE: 0.4625\n", " Model B | test MSE: 0.2792\n", " Model C | test MSE: 0.0030\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAGGCAYAAACqvTJ0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAADBbklEQVR4nOzdd3xUVfr48c/0JJNk0hOSCRB6B0EEFxFUQNFVWBF77wV1ddW1rLvr7trwt/a2rIUvsrgiIFhQQAQERFqkM5SQQPqkTCbJnWT6748ws0kIkCBkUp7365WXZrhz55mbO/fMfc45z1H5/X4/QgghhBBCCCGEEEK0InWoAxBCCCGEEEIIIYQQnY8kpYQQQgghhBBCCCFEq5OklBBCCCGEEEIIIYRodZKUEkIIIYQQQgghhBCtTpJSQgghhBBCCCGEEKLVSVJKCCGEEEIIIYQQQrQ6SUoJIYQQQgghhBBCiFYnSSkhhBBCCCGEEEII0eokKSWEEEIIIYQQQgghWp0kpUSnN3v2bFQqFSqVitWrVx/z736/n169eqFSqRg/fvxpfW2VSsVf//rXFj8vJycHlUrF7Nmzm/2cnTt3olKp0Ol0FBYWtvg1hRCiM+vIbUVgu/o/0dHRDB06lNdffx2v13tqgQshRCfSkduJgOLiYp588kkGDx5MZGQkYWFh9O7dm4cffpgDBw60+PWFAElKCREUFRXFhx9+eMzja9asISsri6ioqBBEdfp88MEHAHg8HubMmRPiaIQQon3qyG3Fgw8+yIYNG9iwYQPz589nzJgxPPLIIzzxxBOhDk0IIdqNjtpObNq0icGDB/Phhx9y1VVXsWjRIr777jsee+wxMjMzOeecc0IdominJCklxFHXXHMNCxcupLKyssHjH374Ieeeey5du3YNUWS/ntPp5D//+Q9Dhw4lLS2Njz76KNQhCSFEu9SR24quXbsyevRoRo8ezSWXXMK7777L2LFj+fTTT0MdmhBCtBsdsZ2orKxkypQphIWF8csvv/CXv/yFSZMmMX78eO655x7Wrl3Lv//971CHKdopSUoJcdR1110H0ODLt91uZ+HChdx+++1NPqe8vJz777+ftLQ09Ho9PXr04JlnnsHpdDbYrrKykrvuuov4+HgiIyO55JJL2L9/f5P7PHDgANdffz1JSUkYDAb69+/PO++886ve2+LFiykrK+POO+/klltuYf/+/axbt+5X7VMIITqjjtxWNMVkMqHT6U77foUQoqPqiO3Ev//9b4qKipg5cyZms7nJba666qpT2rcQkpQS4qjo6GiuuuqqBqOIPv30U9RqNddcc80x29fW1nLBBRcwZ84cHn30Ub755htuvPFGZs6cyZVXXhnczu/3M3XqVD755BP+8Ic/8MUXXzB69GgmT558zD737NnDyJEj2bVrF//85z/5+uuvueyyy3jooYd47rnnTvm9ffjhhxgMBm644QZuv/12VCpVk8OKhRBCnFhHbit8Ph8ejwePx0NZWRkfffQR3333HTfddNMp71MIITqbjthOLF++HI1Gw+WXX97i5wpxUn4hOrmPP/7YD/g3b97sX7VqlR/w79q1y+/3+/0jR47033rrrX6/3+8fOHCgf9y4ccHnvf/++37AP3/+/Ab7e/nll/2Af/ny5X6/3+//9ttv/YD/jTfeaLDd888/7wf8f/nLX4KPXXzxxX6z2ey32+0Ntp0xY4Y/LCzMX15e7vf7/f7s7Gw/4P/4449P+v5ycnL8arXaf+211wYfGzdunN9oNPorKytP+nwhhBAdu60IbNfUz6233ur3eDzNPk5CCNFZdeR2ol+/fv6UlJRmHwshWkJGSglRz7hx4+jZsycfffQRO3fuZPPmzccdZvvDDz9gNBqPGap66623ArBy5UoAVq1aBcANN9zQYLvrr7++we+1tbWsXLmS3/3ud0RERAR7qz0eD5deeim1tbX8/PPPLX5PH3/8MT6fr8H7uP3221EUhc8++6zF+xNCiM6uI7YVAA8//DCbN29m8+bNrFq1ihdeeIH58+cHp6IIIYRono7aTghxJmhDHYAQbYlKpeK2227jzTffpLa2lj59+jB27Ngmty0rKyMlJQWVStXg8aSkJLRaLWVlZcHttFot8fHxDbZLSUk5Zn8ej4e33nqLt956q8nXLC0tbdH78fl8zJ49m9TUVEaMGEFFRQUAEyZMwGg08uGHH3LnnXe2aJ9CCNHZdbS2IsBsNnP22WcHfx8/fjwqlYqnnnqKZcuWcfHFF5/SfoUQorPpaO1E165dOXDgAIqiYDQaW/RcIU5GklJCNHLrrbfy5z//mffff5/nn3/+uNvFx8ezceNG/H5/g0bEarXi8XhISEgIbheoz1G/ESkqKmqwv9jYWDQaDTfddBMP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lMsF994LJ58MRUUQGqqGlIiIHKimBq65BgYPhpwc3VOISLPRTClvVVsLkya5l1+88IL7JkNERKSp+nq47Tb3kr2nnoKYGLMrEhERT2MYMGYMrFzp3pc2IcHsikTEi7SJmVI7duzg+uuvJykpiZCQEJKTk3nwwQepqakxuzTPVFnpDo6334Y334Sbbza7IhGRFqesOE77R71feQX+/W/485/NrkhEpMUpK45TSQlccAGsXw/LlrnvMUREmlGbmCnlcDhoaGjgpZdeIiUlhe+++44bb7wRwzB4+umnzS7P82RkwJo1sHQpjBhhdjUiIq1CWXGctm+HTz+FRYvg0kvNrkZEpFUoK45Tba37fz/7zL0liIhIM7O4XC6X2UWciKeeeooXXniBn3/++Zh/pqysDLvdjtPpJCIiogWrM8mePe6NzK1W958jI00uSETaGm/7nFRWHEZpqXtJd1AQ7N0LYWFmVyQibYy3fU4qK35lGAZOp5PI4mJCY2KgY0f33oPaQ0pEjtOxfk62ieV7h+N0OmnXrp3ZZXiO7Gw46yx4+GH3YzWkRESUFQfbtQsGDYI77nA/VkNKRERZsY/D4WDmzJksvPdeXOecQ9mkSe4n1JASkRbUJpbvHSwzM5OZM2fyzDPP/Obrqqurqa6ubnxcVlbW0qWZw+GAYcMgIACuvdbsakREPIKy4iDbtsHw4e7Nze+6y+xqREQ8grLCzTAM0tPTidi8mesXL6bQbue9fv243jCw2WxmlyciXszUmVIPPfQQFovlN78yMjIO+Jnc3FwuvPBCxo4dyw033PCb7//4449jt9sbvxITE1vycsyRkeEe9bbbYd06SE42uyIRkWalrGgGmzfDuee6l+ytWwepqWZXJCLSrJQVv4/T6aRjRgY3vfsuxSedxJI77yS3than02l2aSLi5UzdU6q4uJji4uLffE2XLl0IDg4G3MExdOhQzjrrLF577TWs1t/uqR1uRCMxMdG71n5ffz18/737NAxNOxaR38kT98hQVjSD++6Djz92Z0VMjNnViEgbp6zwvqwwDINPJ02iy9dfs/rGG/mloICYmBimTJmimVIickKONSvazEbnu3btYujQofTt25c33ngDPz+/434PTwzQE1ZaClFR7iO9a2q0L4iINIu2/jmprDhIfj7ExUFDA1RWgm4sRKQZtPXPSWXFQVavhvPO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fIuISCNlhYjIobR8T0REpBmkpqaSmJiI0+nEbrfrJkNERA6hrBAROZCaUiIiIs3EZrPpBkNERH6TskJE5FdaviciIiIiIiIiIq1OTSkREREREREREWl1akqJiIiIiIiIiEirU1NKRERERERERERanZpSIiIiIiIiIiLS6tSUEhERERERERGRVqemlIiIiIiIiIiItDo1pUREREREREREpNX5m11Aa3K5XACUlZWZXImIiGfa//m4//PSFykrRER+m7JCWSEicjTHmhU+1ZQqLy8HIDEx0eRKREQ8W3l5OXa73ewyTKGsEBE5NsoKZYWIyNEcLSssLh8a4mhoaCA3N5fw8HAsFovZ5TSrsrIyEhMT2blzJxEREWaX06p8+drBt6/fl68dWub6XS4X5eXlxMfHY7X65gpvZYV38uVrB9++fl++dlBWtBRlhXfy5WsH375+X752MDcrfGqmlNVqJSEhwewyWlRERIRP/kcEvn3t4NvX78vXDs1//b466r2fssK7+fK1g29fvy9fOygrmpuywrv58rWDb1+/L187mJMVvjm0ISIiIiIiIiIiplJTSkREREREREREWp2aUl4iKCiIBx98kKCgILNLaXW+fO3g29fvy9cOun45fr78/xlfvnbw7ev35WsHXb8cP1/+/4wvXzv49vX78rWDudfvUxudi4iIiIiIiIiIZ9BMKRERERERERERaXVqSomIiIiIiIiISKtTU0pERERERERERFqdmlJeZseOHVx//fUkJSUREhJCcnIyDz74IDU1NWaX1ioee+wxzj77bEJDQ4mMjDS7nBY3e/ZskpKSCA4Opm/fvqxdu9bsklrFmjVruOSSS4iPj8disZCenm52Sa3m8ccfp3///oSHhxMbG0taWhpbt241uyxpY5QVygpfoKxQVsjvo6xQVvgCZYX5WaGmlJdxOBw0NDTw0ksv8f333/Pss8/y4osvMm3aNLNLaxU1NTWMHTuWyZMnm11Ki3v77be58847uffee/n6668ZNGgQI0eOJDs72+zSWpxhGJx22mk8//zzZpfS6lavXs1tt93G//73P1asWEFdXR3Dhw/HMAyzS5M2RFmhrFBWeDdlhTQHZYWyQlnh3TwmK1zi9Z588klXUlKS2WW0qrlz57rsdrvZZbSoM88803XLLbcc8L3U1FTX3/72N5MqMgfgeu+998wuwzSFhYUuwLV69WqzS5E2TlnhnZQVbsoKZYU0D2WFd1JWuCkrzMkKzZTyAU6nk3bt2pldhjSjmpoaNm7cyPDhww/4/vDhw9mwYYNJVYkZnE4ngP4bl99NWeF9lBWyn7JCmouywvsoK2Q/s7JCTSkvl5mZycyZM7nlllvMLkWaUXFxMfX19XTo0OGA73fo0IH8/HyTqpLW5nK5uPvuuzn33HM55ZRTzC5H2jBlhXdSVggoK6T5KCu8k7JCwNysUFOqjXjooYewWCy/+ZWRkXHAz+Tm5nLhhRcyduxYbrjhBpMq//1O5Np9hcViOeCxy+U65HvivaZMmcK3337Lm2++aXYp4iGUFcqKw1FW+DZlhRxMWaGsOBxlhW8zMyv8W/2fKCdkypQpXHXVVb/5mi5dujT+OTc3l6FDhzJw4EBefvnlFq6uZR3vtfuC6Oho/Pz8Dhm9KCwsPGSUQ7zT7bffzpIlS1izZg0JCQlmlyMeQlmhrGhKWSHKCjkcZYWyoillhZidFWpKtRHR0dFER0cf02t37drF0KFD6du3L3PnzsVqbdsT4o7n2n1FYGAgffv2ZcWKFVx66aWN31+xYgWjR482sTJpaS6Xi9tvv5333nuPVatWkZSUZHZJ4kGUFcqKppQVvktZIb9FWaGsaEpZ4bs8JSvUlPIyubm5DBkyhM6dO/P0009TVFTU+FxcXJyJlbWO7OxsSkpKyM7Opr6+ns2bNwOQkpJCWFiYucU1s7vvvpsJEybQr1+/xpGr7Oxsn1jnv3fvXrZv3974OCsri82bN9OuXTs6d+5sYmUt77bbbuO///0vixcvJjw8vHFUy263ExISYnJ10lYoK5QVygplhcjRKCuUFcoKZUWraNWz/qTFzZ071wUc9ssX/PGPfzzsta9cudLs0lrErFmzXCeddJIrMDDQ1adPH5856nnlypWH/T3/8Y9/NLu0Fnek/77nzp1rdmnShigrlBW+QFmhrJDfR1mhrPAFygrzs8KyrxgREREREREREZFW07YXBYuIiIiIiIiISJukppSIiIiIiIiIiLQ6NaVERERERERERKTVqSklIiIiIiIiIiKtTk0pERERERERERFpdWpKiYiIiIiIiIhIq1NTSkREREREREREWp2aUiIiIiIiIiIi0urUlBIRERERERERkVanppRIC9uxYwcWi4XNmzebXYqIiHgoZYWIiByNskK8kZpSIh6ipqbG7BJERMTDKStERORolBXSlqgpJXIc5s2bR/v27amurj7g+2PGjOHaa6897M8kJSUBcMYZZ2CxWBgyZAgAEydOJC0tjccff5z4+Hi6d+8OgMViIT09/YD3iIyM5LXXXmt8vGvXLq688kqioqJo3749o0ePZseOHc1yjSIi8vsoK0RE5GiUFSJuakqJHIexY8dSX1/PkiVLGr9XXFzM+++/z3XXXXfYn/nyyy8B+OSTT8jLy+Pdd99tfO7TTz/lxx9/ZMWKFbz//vvHVENFRQVDhw4lLCyMNWvWsG7dOsLCwrjwwgs1KiIi4gGUFSIicjTKChE3f7MLEGlLQkJCuPrqq5k7dy5jx44FYP78+SQkJDSOVBwsJiYGgPbt2xMXF3fAczabjTlz5hAYGHjMNbz11ltYrVbmzJmDxWIBYO7cuURGRrJq1SqGDx9+AlcmIiLNRVkhIiJHo6wQcVNTSuQ43XjjjfTv359du3bRqVMn5s6dy8SJExs/yI9H7969jys4ADZu3Mj27dsJDw8/4PtVVVVkZmYedw0iItL8lBUiInI0ygoRNaVEjtsZZ5zBaaedxrx58xgxYgRbtmxh6dKlJ/ReNpvtkO9ZLBZcLtcB36utrW38c0NDA3379mX+/PmH/Oz+0RMRETGXskJERI5GWSGippTICbnhhht49tln2bVrFxdccAGJiYlHfO3+EYv6+vpjeu+YmBjy8vIaH2/bto2KiorGx3369OHtt98mNjaWiIiIE7wCERFpacoKERE5GmWF+DptdC5yAq655hp27drFK6+8wqRJk37ztbGxsYSEhPDRRx9RUFCA0+n8zdeff/75PP/882zatImMjAxuueUWAgICDvhnR0dHM3r0aNauXUtWVharV69m6tSp5OTkNMv1iYjI76esEBGRo1FWiK9TU0rkBERERDBmzBjCwsJIS0v7zdf6+/szY8YMXnrpJeLj4xk9evRvvv6ZZ54hMTGR8847j6uvvpo///nPhIaGNj4fGhrKmjVr6Ny5M5dddhk9e/Zk0qRJVFZWaoRDRMSDKCtERORolBXi6yyugxeZisgxGTZsGD179mTGjBlmlyIiIh5KWSEiIkejrBBfpqaUyHEqKSlh+fLlXHPNNfzwww/06NHD7JJERMTDKCtERORolBUi2uhc5Lj16dOH0tJSnnjiCQWHiIgclrJCRESORlkhoplSIiIiIiIiIiJiAm10LiIiIiIiIiIirU5NKRERERERERERaXVqSomIiIiIiIiISKtTU0pERERERERERFqdmlIiIiIiIiIiItLq1JQSEREREREREZFWp6aUiIiIiIiIiIi0OjWlRERERERERESk1akpJSIiIiIiIiIire7/A4lmod5C16qTAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "model_A.eval(); model_B.eval(); model_C.eval()\n", "with torch.no_grad():\n", " yhat_A = model_A(x_test).cpu().numpy()\n", " yhat_B = model_B(x_test, x_fn=xfn_test).cpu().numpy()\n", " yhat_C = model_C(x_test, x_fn=xfn_test).cpu().numpy()\n", "y_true = y_test.cpu().numpy()\n", "\n", "def report(name, yhat):\n", " mse = float(np.mean((y_true - yhat) ** 2))\n", " print(f'{name:>8} | test MSE: {mse:.4f}')\n", "\n", "report('Model A', yhat_A)\n", "report('Model B', yhat_B)\n", "report('Model C', yhat_C)\n", "\n", "fig, axes = plt.subplots(1, 3, figsize=(12, 4))\n", "for ax, name, yhat in [(axes[0], 'Model A', yhat_A),\n", " (axes[1], 'Model B', yhat_B),\n", " (axes[2], 'Model C', yhat_C)]:\n", " ax.plot(y_true.ravel(), yhat.ravel(), 'k.', alpha=0.4)\n", " lo, hi = y_true.min(), y_true.max()\n", " ax.plot([lo, hi], [lo, hi], 'r--', lw=1)\n", " ax.set_title(name); ax.set_xlabel('y true'); ax.set_ylabel('y pred')\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Predicted function-node activities\n", "\n", "For **Model C** (per-channel), reshape the gate tensor to `(Nf, C_pn)` and plot heatmaps for one test sample from each regime. Under **Model B** (per-node), the same one-hot `x_fn` yields one scalar per node (constant across channels within each node)." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABBkAAAORCAYAAAC3O3rJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAACbp0lEQVR4nOzdd3hUxf7H8c+SCmkQWmgmFKVIk3YpegPSq4oIgkgTREBQUKlSpVwRBVTKVQK5eEHBhgqIIM3LBRSkKGBFICgJICUBJECS+f3Bzf5YNoFkc7JJNu/X85znIbNzZuZMNnyT786ZYzPGGAEAAAAAAGRRgZweAAAAAAAA8AwkGQAAAAAAgCVIMgAAAAAAAEuQZAAAAAAAAJYgyQAAAAAAACxBkgEAAAAAAFiCJAMAAAAAALAESQYAAAAAAGAJkgwAAAAAAMASJBkAwINFR0fLZrPJ399fx44dc3q9adOmql69uqV9RkREqE+fPllq488//5Sfn59sNpt2797tcjvz589XdHS0U/nRo0dls9nSfO12Jk2aJJvNlqF+cptDhw5p0qRJOnr0aE4PxcGLL76oO+64Q97e3ipcuHCOjmX58uWaM2dOmq/ZbDZNmjTJreNxNyt+ft2pT58+CgwMzOlhWCat/18AIK8hyQAA+cCVK1f04osv5vQwMuydd97R1atXJUlRUVEut5PeH/+lSpXSjh071L59+0y32b9/f+3YsSND/eQ2hw4d0uTJk3NVkuGTTz7RtGnT1KtXL23dulVffvlljo7nVkmGHTt2qH///u4dEAAAeQxJBgDIB9q0aaPly5dr//79OT2UDFm8eLFKlCih+vXr691339Xly5ctbd/Pz08NGzZU8eLFM31u2bJl1bBhQ0vHk58dOHBAkjRs2DA1adJE9erVy+ERpa9hw4YqW7ZsTg8DAIBcjSQDAOQDI0eOVNGiRTVq1Kjb1k1MTNSYMWNUvnx5+fr6qkyZMhoyZIjOnz/vUO/atWsaOXKkwsLCVKhQId1777365ptv0mwzLi5OAwcOVNmyZeXr66vy5ctr8uTJSkpKcqr79ddf68CBA3r88cc1YMAAxcfH68MPP3Sql5KSojfeeEO1a9dWwYIFVbhwYTVs2FCffvqppOvLvg8ePKitW7fKZrPJZrMpIiJCkvPtEqtWrZLNZtPGjRud+lmwYIFsNpu+++47Sc7LmdPr5+LFiypcuLAGDhzo1ObRo0fl5eWlV155Jc35SvX777+rS5cuCgoKUuHChfXYY49p165dTrd67N69W48++qgiIiJUsGBBRUREqHv37g63yERHR+uRRx6RJDVr1sw+1hvb+fLLL9W8eXMFBwerUKFCatKkidOcnD59Wk8++aTKlSsnPz8/FS9eXE2aNHFpBUJERIR9hU3JkiUdbkdI79aEm5fzp94StHnzZg0aNEjFihVT0aJF1blzZ504ccLp/OXLl6tRo0YKDAxUYGCgateubV8t07RpU61Zs0bHjh2zz8+N3+u0xnTgwAE98MADKlKkiPz9/VW7dm3961//cqizZcsW2Ww2vfvuuxo3bpxKly6t4OBgtWjRQj/99NNt5yn1PXfw4EF1795dISEhKlmypPr166f4+HiHujn983ujbdu2ycfHR88//7xDeer3LCOrlNatW6fmzZsrJCREhQoVUtWqVTVjxgyner/++qvatWunwMBAlStXTs8995yuXLniUGfy5Mn629/+ptDQUAUHB6tOnTqKioqSMcahXkREhDp06KB169apTp06KliwoKpUqaLFixeneR0Zfe+tWLFCjRo1UkBAgAIDA9W6dWvt3bv3tnMAAHmOAQB4rCVLlhhJZteuXWbu3LlGktm4caP99cjISHP33Xfbv05JSTGtW7c23t7eZvz48Wb9+vVm1qxZJiAgwNxzzz0mMTHRXrd3797GZrOZF154waxfv9689tprpkyZMiY4ONj07t3bXi82NtaUK1fOhIeHm3/+85/myy+/NC+99JLx8/Mzffr0cRrzgAEDjCRz8OBBk5CQYAoVKmSaNm3qVO/xxx83NpvN9O/f33zyySfm888/N9OmTTNz5841xhizZ88eU6FCBXPPPfeYHTt2mB07dpg9e/YYY4w5cuSIkWSWLFlijDHm2rVrpkSJEuaxxx5z6qdBgwamTp069q8nTpxobgyft+pn+PDhJiAgwJw/f96hzRdeeMH4+/ubP//80/mb9j8XL140lSpVMqGhoWbevHnmiy++MMOHDzfly5d3GLsxxrz//vtmwoQJ5uOPPzZbt2417733nomMjDTFixc3p0+fNsYYc+rUKTN9+nQjycybN88+1lOnThljjHnnnXeMzWYzDz74oPnoo4/MZ599Zjp06GC8vLzMl19+ae+rdevWpnjx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N26sYcOGqXLlykpMTNTRo0e1du1aLVy4UGFhYVq6dKmqVq2q/v37pznmjh076tNPP9Xp06d133336fHHH9fUqVN18uRJdejQQX5+ftq7d68KFSqkoUOHSpJq1Kih9957TytWrFCFChXk7+9/y6XahQsX1kMPPaTo6GidP39ezz//vAoUuH0+/nb99OzZU2PGjNFXX32lF198Mc0/2G/Wu3dvzZ49Wz179tTUqVNVqVIlff755/riiy8kyT6u4OBg/f3vf9crr7yiYsWKKSIiQlu3blVUVJQKFy7s0Gb16tUlSW+99ZaCgoLk7++v8uXLq2jRonrjjTfUu3dvnT17Vl26dFGJEiV0+vRp7d+/X6dPn9aCBQsUHx+vZs2aqUePHqpSpYqCgoK0a9curVu3Tp07d7b3s3XrVjVv3lwTJkxweV+Gxx9/XOPHj9eECRMUGRmpQ4cO6c0331RISIhL7UVERGjs2LF66aWXdPnyZfujIA8dOqQ///xTkydPlnT9e/nRRx9pwYIFqlu3rgoUKJDuH4ETJ06071kwYcIEhYaGatmyZVqzZo1mzpzp8lhdlVM/v+nd0pCcnKzu3bvLZrNp+fLl8vLyUnR0tGrXrq1u3bpp27Zt6f4sBAYG6tVXX1X//v3VokULDRgwQCVLltSvv/6q/fv3680338zU3LRv316vvfaaevTooSeffFJnzpzRrFmznJJz2SEiIkJTpkzRuHHj9Ntvv6lNmzYqUqSITp48qW+++UYBAQH29x8AeIQc3HQSAJDNbny6xM169OhhJDk8XcKY67uojxo1yoSHhxsfHx9TqlQpM2jQIHPu3DmHeleuXDHPPfecKVGihPH39zcNGzY0O3bscNr93xhjTp8+bYYNG2bKly9vfHx8TGhoqKlbt64ZN26cuXjxolm1apWRZObMmZPutaTunP/qq68aY67vDj979mxTvXp14+vra0JCQkyjRo3MZ599Zj/n6NGjplWrViYoKMhIsj81IK2nS6Rav369kWQkmZ9//tnp9bR2f0+vnxv16dPHeHt7m99//z3da7xZTEyM6dy5swkMDDRBQUHm4YcfNmvXrnV4JKAxxvz+++/m4YcfNkWKFDFBQUGmTZs25sCBA2l+L+bMmWPKly9vvLy8nOZg69atpn379iY0NNT4+PiYMmXKmPbt25v333/fGGNMYmKieeqp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YcIErV+/XosWLVKLFi105swZe53Dhw+rUaNGWrBggdavX68JEybo66+/1r333qtr1645tdm1a1fVqlVLH374oQYMGKDZs2dr+PDhevDBB9W+fXt9/PHHuv/++zVq1Ch99NFHTudn5P2QlunTp6t79+6qVq2aVq5cqXfeeUcXLlzQfffdp0OHDqV7Xv/+/e3jSF2u/PHHHzvU6dy5sypVqqT3339fCxcuzNT7QZL279+vMWPG2K85JCREnTt31sSJE7Vo0SJNnz5dy5YtU3x8vDp06KDLly/f8lpvp379+ipVqpS++uqrLLUD5DbE2bQRZ4mzxNncGWfj4+O1Z88e3X333VnqD8izDFy2ZMkSI8ns2rXLbN682UgyBw4cMMYYU79+fdOnTx9jjDF33323iYyMtJ+3cOFCI8msXLnSob2XX37ZSDLr1683xhjz+eefG0lm7ty5DvWmTZtmJJmJEyfay1q3bm3Kli1r4uPjHeo+/fTTxt/f35w9e9YYY8yRI0eMJLNkyZJbXltqvbSOPn36mKSkpNvOz6BBg0zBggVNSkqKQ3nqXNWpU8fhtaNHjxofHx/Tv39/e1mVKlXMPffcY65du+bQRocOHUypUqVMcnKyMeb/vxe9evW67biMMWbixIlGkpk5c6ZD+eDBg42/v799XOvWrUuz3ooVK4wk89ZbbxljjPnhhx+MJDN8+HCHesuWLTOSTO/eve1lAwcONIGBgebYsWMOdWfNmmUkmYMHDzqUb9iwwUgyn3/++W2vKzIy0qGv9AQGBppnn332tvVSpaSkmGvXrpljx44ZSeaTTz6xv5Y6l6+++qrDObVr1zaSzEcffWQvu3btmilevLjp3LmzvSwz74fUvlLFxMQYb29vM3ToUIe+L1y4YMLCwkzXrl1veV2p7/NXXnnFoTy1nwkTJjiUZ/T9YIwx4eHhpmDBgub333+3l+3bt89IMqVKlTKXLl2yl69atcpIMp9++uktx5s6V++//366df72t7+ZggULpvna6dOnnf7vAHIz4uytEWeJs8TZ3BVnUz322GPG29vb7N69+5b1AE/FSgaLREZGqmLFilq8eLG+//577dq1K90lnJs2bVJAQIC6dOniUJ66W/HGjRslXf90QZIee+wxh3o33zOYmJiojRs36qGHHlKhQoXsn4gkJSWpXbt2SkxM1M6dO126rmee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OkfGGKf3Tapx48aZAgUKmIsXL6Z7TTe2cbv3z+7du40ks2rVqtu2lyo5Odlcu3bNLF261Hh5ednfs8YYExkZaSSZ3bt328vOnDljvLy8TMGCBc0ff/xhL9+3b5+RZF5//XV72cSJE40kM3z4cIc+ly1bZiSZf//73w593fjz+u677xpJ5sMPP3Q4d9euXUaSmT9//i2v68b/J26Uek0bN250KB89erSRZL7++muH8kGDBhmbzWZ++uknY8z/vz9r1aplkpOT7fXmzJljJJlOnTo5nP/ss88aSU7/R9wsda5Onz6d5uuXL182kkzbtm3TfP399983kszmzZtv2Q+QEcTZWyPOEmeJs/kvzhpjTEJCgqlataopV66cuXDhwi37g2vi4+ONJFN+0nRT8R+vufUoP2l6ht5LnoQ1semIjIxUxYoVtXjxYn3//ffatWtXuks4N23apICAAKdlkKnLuzZu3ChJ9iWIjz32mEO9Hj16OHydmJiojRs36qGHHlKhQoWUlJRkP9q1a6fExESnZYfukLosMa0lXtL1zZBKlixp/9rLy0vdunXTr7/+al/qt3r1ajVr1kylS5d2uK7UT5m2bt3q0GanTp0cMmg3npOUlCRjrqcGP//8c911111q0aLFba+jffv28vLysn9ds2ZNSXJYonnx4kWNGjVKlSpVkre3t7y9vRUYGKhLly7phx9+cGqzU6dODl+n1aYk1a5dW3fccYf9a39/f911110O9TI7R2kpUaKEUlJSFBcXd9u6GVGpUiUVKVJEo0aN0sKFC9PdaXbv3r3q1KmTihYtKi8vL/n4+KhXr15KTk52Wq5cqlQp1a1b1/51aGioSpQoodq1azt8klK1alVJznMpOf8sde3aVd7e3rdc7rt69WoVLlxYHTt2dJjf2rVrKywsLEtPUShSpIjuv/9+h7JNmzapWrVqTveV9unTR8YYp0/h2rVr53C7Qur1t2/f3qFeanlMTIzL45Vk/xkC3I0464w4S5wlzt6aJ8bZxMREde7cWceOHdP777+vwMDALPWHW+MRltd9+umn9tusPv3001seruB2iXTYbDb17dtXr7/+uhITE3XXXXfpvvvuS7PumTNnFBYWJpvNcefQEiVKyNvbW2fOnLHX8/b2VtGiRR3qhYWFObWXlJSkN954Q2+88Uaaff7555+Zup477rhDv/zyiy5duqSAgIBMnZvq8uXLkq4H7LTcfB03lp05c0Zly5bVyZMn9dlnn6W79Obm6ypVqpTD1zeft2TJEvXp00enT592+KXiVm6e/9RNeFKvT7r+C+nGjRs1fvx41a9fX8HBwbLZbGrXrp1Dvcy0mVa91Lo31svsHKUl9XuU1lhdERISoq1bt2ratGkaO3aszp07p1KlSmnAgAF68cUX5ePjo5iYGN13332qXLmy5s6dq4iICPn7++ubb77RkCFDnMYSGhrq1I+vr69Tua+vr6TrQfhmN7/nUn++Un/m0nLy5EmdP3/e3u7NMvuzdaOb36/S9fd+RESEU3nqL3g3jzW968/MvGRG6i+VNy+RBbIbcdYZcZY4S5y9NU+Ls1euXNFDDz2kbdu2afXq1frb3/6Wpb6AjHrwwQcVFxenEiVK6MEHH0y3ns1mU3JycqbbJ8lwC3369NGECRO0cOFCTZs2Ld16RYsW1ddffy1jjMMvQKdOnVJSUpL9vsKiRYsqKSlJZ86ccQiCN2fBixQpIi8vLz3++OMaMmRImn2WL18+U9fSunVrrV+/Xp999pkeffTRTJ2bKvU6zp49m+Z/8mll81PLUq+3WLFiqlmzZrrzefN/wDf/Qrlr1y6Hr1PnoXjx4g4bI2VFfHy8Vq9erYkTJ2r06NH28itXrujs2bOW9HErmZ2jtKSO8+Z7WrOiRo0aeu+992SM0Xfffafo6GhNmTJFBQsW1OjRo7Vq1SpdunRJH330kcLDw+3n7du3z7Ix3CwuLk5lypSxf53Wz9fNUjcNu3mTq1RZeUzWze9X6fp7P63nXqd+Ymnl98gVqRlqq59xDmQEcdYRcZY4S5y9NU+Ks1euXNGDDz6ozZs365NPPuGR0e7CngyS5LAp6o3/tgpJhlsoU6aMXnjhBf3444/2x7mlpXnz5lq5cqVWrVqlhx56yF6+dOlS++uS1KxZM82cOVPLli3TsGHD7PWWL1/u0F6hQoXUrFkz7d27VzVr1kw3E5wZTzzxhF555RWNHDlS9913n0PASPXRRx+pc+fO6baRuqnT4cOH09yUZuPGjTp58qR9KWdycrJWrFihihUr2nfa7tChg9auXauKFSuqSJEimb6OevXqpVnetm1bTZgwQZs2bXJaRpdZNptNxhinR3gtWrTIpUxeZmV1jiTpt99+U9GiRR2W1VrFZrOpVq1amj17tqKjo7Vnzx57uSSHeTPGWL779o2WLVvmsBR05cqVSkpKuuUfzB06dNB7772n5ORkt3xi0Lx5c82YMUN79uxRnTp17OVLly6VzWZTs2bNsn0M6dm/f7+mT5+uiIgIde3aNcfGgfyLOOuIOEuclYizmZUX42zqCoZNmzbpo48+UuvWrXNsjEB2IMlwG//4xz9uW6dXr16aN2+eevfuraNHj6pGjRratm2bpk+frnbt2tnvX2zVqpX+/ve/a+TIkbp06ZLq1aun//73v3rnnXec2pw7d67uvfde3XfffRo0aJAiIiJ04cIF/frrr/rss8+c7i+7nZCQEH3yySfq0KGD7rnnHj399NNq1KiRfH199csvv+jf//639u/ff8tffv72t7+pYMGC2rlzp9O9kdL1TPH999+v8ePH23e9/vHHHx0erzVlyhRt2LBBjRs31rBhw1S5cmUlJibq6NGjWrt2rRYuXJjuo79u5dlnn9WKFSv0wAMPaPTo0WrQoIEuX76srVu3qkOHDpkKMMHBwfr73/+uV155RcWKFVNERIS2bt2qqKgop0eKZQcr5mjnzp2KjIxMM+PvitWrV2v+/Pl68MEHVaFCBRlj9NFHH+n8+fP25+e2bNlSvr6+6t69u0aOHKnExEQtWLBA586ds2QMafnoo4/k7e2tli1b2ne9rlWr1i3/YH700Ue1bNkytWvXTs8884waNGggHx8f/f7779q8ebMeeOABhz9ismr48OFaunSp2rdvrylTpig8PFxr1qzR/PnzNWjQIN11112W9XUr3377rUJCQnTt2jWdOHFCGzdu1DvvvKMSJUros88+c/gj66+//tLatWslyX5f+tatW/Xnn38qICAgzZ36AVcRZ/8fcZY4S5zNvLwYZ7t06aLPP/9c48aNU9GiRR32gAkODla1atXcMmbkX6+//nqG696YtM8okgwW8Pf31+bNmzVu3Di98sorOn36tMqUKaPnn3/e4RFYBQoU0KeffqoRI0Zo5syZunr1qpo0aaK1a9c6PPpJkqpVq6Y9e/bopZde0osvvqhTp06pcOHCuvPOO9WuXTuXxtmgQQN9//33mj17tlauXKmXX35ZycnJKleunJo3b64333zzluf7+vqqS5cu+uSTTzR9+nSn1zt16qS7775bL774omJiYlSxYkUtW7ZM3bp1s9cpVaqUdu/e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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "idx_d1 = 0\n", "idx_d2 = N_TEST\n", "\n", "obs_d1 = x_test[idx_d1:idx_d1 + 1]\n", "obs_d2 = x_test[idx_d2:idx_d2 + 1]\n", "xfn_d1 = xfn_test[idx_d1:idx_d1 + 1]\n", "xfn_d2 = xfn_test[idx_d2:idx_d2 + 1]\n", "\n", "def gate_matrix(model, xfn_obs):\n", " nact = model.node_activity_model\n", " nact.eval()\n", " with torch.no_grad():\n", " raw = nact(xfn_obs).view(1, nact.n_nodes, nact.channels_per_node)\n", " return raw[0].cpu().numpy()\n", "\n", "alpha_C_d1 = gate_matrix(model_C, xfn_d1)\n", "alpha_C_d2 = gate_matrix(model_C, xfn_d2)\n", "alpha_B_d1 = gate_matrix(model_B, xfn_d1)\n", "alpha_B_d2 = gate_matrix(model_B, xfn_d2)\n", "\n", "nact = model_C.node_activity_model\n", "assert nact.n_nodes == len(function_nodes), (\n", " f\"NodeActivity expects {nact.n_nodes} function nodes, notebook uses {len(function_nodes)}\"\n", ")\n", "\n", "fig, axes = plt.subplots(2, 2, figsize=(14, 10))\n", "panels = [\n", " (axes[0, 0], alpha_B_d1, 'Model B (per-node) | sample from D1'),\n", " (axes[0, 1], alpha_B_d2, 'Model B (per-node) | sample from D2'),\n", " (axes[1, 0], alpha_C_d1, 'Model C (per-channel) | sample from D1'),\n", " (axes[1, 1], alpha_C_d2, 'Model C (per-channel) | sample from D2'),\n", "]\n", "for ax, alpha, title in panels:\n", " im = ax.imshow(alpha, aspect='auto', vmin=0, vmax=1, cmap='viridis')\n", " ax.set_xticks(np.arange(alpha.shape[1]))\n", " ax.set_xticklabels([f'ch{c}' for c in range(alpha.shape[1])])\n", " ax.set_yticks(np.arange(len(function_nodes)))\n", " ax.set_yticklabels(function_nodes)\n", " ax.set_title(title)\n", "fig.colorbar(im, ax=axes.ravel().tolist(), shrink=0.8, label='predicted alpha')\n", "fig.suptitle('NodeActivity gates: function node x channel')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Takeaways\n", "\n", "- **Predictive performance:** Model A must average over both data-generating regimes; Models B and C typically achieve lower test MSE because the one-hot `x_fn` tells the network which regime each sample came from.\n", "- **Per-node vs. per-channel:** With the same one-hot `x_fn` broadcast to every function node, per-node mode can only apply one scalar gate per node (and the shared MLP produces the same scalar for every node given identical input). Per-channel mode learns a distinct gate for each latent channel, enabling richer condition-specific modulation with parameter sharing across nodes.\n", "- **Extensions:** Replace the one-hot with real sample-level covariates (e.g. cell-line embeddings), increase `node_activity_dim`, or add more regimes — the same `per-channel` machinery applies." ] } ], "metadata": { "kernelspec": { "display_name": "gsnn", "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.6" } }, "nbformat": 4, "nbformat_minor": 5 }