{ "cells": [ { "cell_type": "markdown", "id": "attnres-scope", "metadata": {}, "source": [ "# Module 2: Block Attention Residuals (AttnRes)\n", "\n", "## What this executable miniature establishes\n", "\n", "The local `BlockAttentionResiduals` module RMS-normalizes each supplied `[batch, token, width]` depth tensor, scores it with the corresponding learned pseudo-query, softmaxes across the supplied depth axis, and mixes the *unnormalized* source tensors with those weights.\n", "\n", "This is a deterministic 3-source, width-4 check of that tensor computation. It does **not** construct the paper's block summaries, reproduce 93 layers or 8 blocks, learn routing, or establish training or quality benefits." ] }, { "cell_type": "code", "execution_count": 1, "id": "attnres-deterministic-check", "metadata": { "execution": { "iopub.execute_input": "2026-08-10T19:35:27.653059Z", "iopub.status.busy": "2026-08-10T19:35:27.652806Z", "iopub.status.idle": "2026-08-10T19:35:29.818316Z", "shell.execute_reply": "2026-08-10T19:35:29.816560Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All deterministic AttnRes assertions passed.\n", "Depth weights [token, block]:\n", "tensor([[0.6652, 0.2447, 0.0900],\n", " [0.0900, 0.6652, 0.2447]])\n", "Output [token, width]:\n", "tensor([[0.6652, 0.4895, 0.2701, 0.0000],\n", " [0.0000, 0.0900, 1.3305, 0.7342]])\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABJkAAAGMCAYAAAB56XOkAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjksIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvJkbTWQAAAAlwSFlzAAAPYQAAD2EBqD+naQAAlANJREFUeJzt3Qd8E/X7wPEnLS27ZS9lCbJlyFBAtqCAExEUEZnCDwQBJ6KiiOBAQFAQfiioP0UcONkOliiyZfkHEQTZu+xCe//X88ULSZqWpG3apPm8fZ00l8vlcrnknjz3fL9fh2VZlgAAAAAAAABpEJGWBwMAAAAAAAAkmQAAAAAAAJAuqGQCAAAAAABAmpFkAgAAAAAAQJqRZAIAAAAAAECakWQCAAAAAABAmpFkAgAAAAAAQJqRZAIAAAAAAECakWQCAAAAAABAmpFkAhB2pk+fLg6HwznlyJFDihUrJs2aNZNRo0bJwYMHU73uzZs3ywsvvCA7d+6UYKTbpq85NRYtWmQeq//6Y+LEiWafe9J9pOvzdl9maNq0qZkyer/OmTPHPB7BIy3HQnp8V+hzV6tWLV2fL6XjTI/dRx55RLKKYPtuQdoldx4BAAQfkkwAwta0adPkl19+kYULF8rbb78tNWvWlFdffVUqV64s33//fap/OL744otBm2Tq2bOnec2pcf3115vH6r/p8eOgePHiZn1t27aVYKDbqVNG71f98a/HDMJLRn9XhNNxFmzfLUg7kkwAEDqyZfYGAEBm0UqBOnXqOG/fc889MmjQILnpppukXbt2sm3bNilatGhQvEFnzpyRXLlypXk9V199tZlSIyYmRm688UZJL9mzZ0/X9aVVlSpVMmW/BvsxE6yy+utDcH+3nD171lTBpraCMSuwLEvOnTsnOXPmzOxNCSl8dwHI6qhkAgAXpUqVkjfeeENOnjwpkydPdts3q1atkjvuuEMKFChgflzUqlVLPv30U+f9Wq1z7733mr+16Z3dHM+1ikcrpFq0aGESNvoDuWHDhvLDDz94bXq1Zs0aad++veTPn1/KlStn7itTpozcdttt8t1335nn1+BeK6/0tr0Nejt37txSr149s83e1u3KXue8efNMlZKus1KlSvLee+9dsbncX3/9Jffdd5+UKFHC/LDTpJy+vnXr1jnXvWnTJlm8eLFzf+i8lJq0/PHHH3L//febdek69T3p0qWLnD9/Ptlj1V7X66+/bqrR9Dn0dWizo61bt8qFCxfk6aefNtsZGxsrd999d5JmkZ5NpOx1jh49WsaMGSNly5aVPHnySP369eXXX3+94n6dOXOmtGrVylRV2O+TbsPp06edy3Tt2tVU0SnXJpz63Ck1+dH5rk2fUjpm9IegVgFopZ5uh96ny+h7l1pr1641x0yRIkXMe6T7VatG/vnnH+cyiYmJMmHCBOfz5suXz/zw/+abb9yWee2118zxpuvR9el77boe1+ZjS5YskQYNGpjPTvfu3c19cXFx8vjjj5v3Jzo6Wq666ioZOHCg235Oju4bff7SpUubz7Qe/3PnzvW6rK/PYzc90++PChUqmNelCcxPPvnEr+8KtXLlSmnUqJF5vddcc4288sorZp/5K6XjzNWHH35ojlN9vho1aji/V1xp8r1Tp07O916Xt9ft+V0xY8YMGTp0qDk+9Dvv5ptvlv/7v/+74vbax/Pvv/9u9pN+ZvV7d/DgwXLx4kWzjltvvVXy5s1rPuv6Hrry/OxoIkS/L8uXLy8nTpxwLrd//37TVFqPr4SEhCs2sV6wYIE57goXLmz2kX4n/fnnn9KtWze59tprzTw9Lm6//XbZsGGD23Gm32f9+vVzztPn089iRESEHDhwwDlfv2uyZcsmx48fTzFJYR+LetzqvtELJrq/XelnTb+vdLt0X7Vs2TJJxaUeG/Z3srf3wNux/c4775j3Xd//999/3+fvbd3fvXv3Ngl5/Qzp9mt1nb6nKUnpPJKaz+aVjvNDhw7Jww8/LCVLljSvRd9vPVd7VjjrOVIfb78Hel7ZsmVLkv2r5w09HvR8oO+DniN9/R4FgJBkAUCYmTZtmqVffytXrvR6/6lTp6zIyEirRYsWznk//vijFR0dbTVq1MiaOXOmNW/ePKtr165mPbo+dfDgQWvkyJFm3ttvv2398ssvZtL56sMPP7QcDod11113WbNmzbK+/fZb67bbbjPP9f333zufa9iwYWYdpUuXtp566ilr4cKF1ldffWXu03lXX321Va1aNWvGjBnWnDlzrBtuuMGKioqynn/+eathw4Zm3V9++aVVoUIFq2jRotaZM2eSrNuVvc4qVapYH3zwgTV//nzr3nvvNcstXrzYudxPP/1k5um/tooVK1rly5c3r02X/eKLL6zHHnvMucyaNWusa665xqpVq5Zzf+g8tWPHDrf9p9atW2flyZPHKlOmjPXOO+9YP/zwg/W///3P6tChgxUXF5fse2qvS1/L7bffbn333Xfmcfr6dT88+OCDVvfu3a25c+ea9epz6HKumjRpYibPdeq23HrrreY90Om6666z8ufPbx0/fjzF/frSSy9ZY8eOtWbPnm0tWrTIPG/ZsmWtZs2aOZf5888/rfbt25vH2vtHp3PnznndPzadr8/pyzHTq1cvc3zo+6LH7ccff2xVqlTJ7Jv9+/cneX9d15vc56NgwYJWnTp1rE8//dS87/qZ6NOnj7V582bncrrP9Xjv2bOn9fXXX5t9//LLL1tvvvmmc5mHH37YPOcjjzxitk33UeHCha2SJUtahw4dcntvChQoYOZPmDDBbKs+7+nTp62aNWtahQoVssaMGWM+R7r+2NhYq3nz5lZiYmKKr8Xebz169DDbN2XKFOuqq66yihUr5nYs+PM8uj7dTv086Wf0m2++McePzv/ss898+q7Q59Z9fO2115p9ou9n3759zfLvv/++5a+UjjN7m/U4r1evnnlP9XuladOmVrZs2azt27c717Np0ybzmvUzoN8VCxYsMMdVRESE9cILLyQ5lnSdDzzwgPkM6L4oVaqUeU0XL1706X3R7xf9HOnrf/LJJ53Hih6/48ePN/O7detm5ut3j83bZ2fr1q1W3rx5rXbt2pnbCQkJ5r0rUqSItXfvXp/OGXps6DGrx8rnn39uXoceh7oP9Lb+rd+9+h2fM2dO648//nCu47777jPfRbZff/3VrFOX++ijj5zzW7dubd6HlPTu3dvKlSuXORZ1X+v33SuvvGI+GzZdp66/VatW5rtAP6O1a9c257GlS5c6l3vooYfM90Zy74Erex9Ur17dfI/oeXHjxo0+fW/v27fPfC70uSZPnmw+Q/reZs+e3ZxLU5LSecTfz6Yvx/ktt9xivof0+0C/u3X/6fn1k08+cS5jf37vv/9+c3zr50G3UZ9XjzXX/avfv/q8o0aNMvtGz7G+fo8CQCgiyQQg7FwpyaT0B3jlypWdt/VHjQa4Fy5ccFtOk0TFixc3P1iU/oj0TMTYgbD+SPZMbOjjatSo4fajwg7uNaj1pAG6/ij5559/nPM0wNfldTv0eWwaGOt8/ZHruW7PdebIkcP6+++/nfPOnj1rtld/zCSXZDp8+LC5PW7cOCslVatWdfvBntIPQf1RkC9fPuePbV/Z69J9ab8XSrdN599xxx1uyw8cONDMP3HixBWTTPqD2vVH8W+//Wbm64/mlParK/2ho8eO/pDQ5davX++8r1+/fl4fm5okk+cxoz/GdP4bb7zhNn/37t3mONIf7jb9MaUJzxdffNFKyapVq8w67SSWN0uWLDHLDB06NNlltmzZYpbR5ImrFStWmPnPPPOMc56+LzpPf6C50h9tmuDw/CzrD35dXn9EJufYsWPmuL/77rvd5v/888/msa7Hgj/PYycOXBN4evzod4gmZG3JfVe4vl7dF640caU/gFMjuePM3mb9znNN5Or262vW127T59aEtOvnRmniR/fl0aNH3b4r2rRp47ac/pi2E10psY9nz+NWkwk6XxPpNv1caULATh6l9NnRH/H2d5Z+VvT1aaLM13NGly5drrisvtfx8fEmmTZo0CDn/KlTp5p17Nq1y9weMWKEOSb0u0kTZUoflzt3brdj3xu9yKCJrOTod2CJEiXMd5fr9+HJkydNUq1BgwapTjJpEsV+n/353tZziSaiXM8zavTo0Wa9msBMzXnE38+mL8e5bqeeI1L67tDPuOfxre+tJs06derktn/1ed977z2/v0cBIFTRXA4AvFd5Ov/W5hDaFOCBBx4wt7W0357atGkj+/btu2ITkOXLl8vRo0floYcecnu8Nn3RZh/aLMaztF/7iPJGmx9pcwCblv0rbfLh2keNPf/vv/++4nus69TmDTYt/9emPik9VpsHaJMsbaKmTTy09D81TXlcm4Boc4gOHTqY5gmpoe+HNj/x3AeeHQDb83ft2nXFdepjIyMjnberV6/u037V5mjarEib4+jjo6KipEmTJuY+zyYV6cXzmNFmINpEpHPnzm7HnW6TNvNwbfqo26b3Pf/88yk+hzY50mY+Tz31lGk2ox1Ye7KbnLk2D/L0008/OZuTuNJmnvr+eDYj1eds3rx5ktenzej0+HV9fbfccssVR0LUZkPajMr+XNu0OZ42n0vL82hzGNf+3PT979ixo/ku8bUpjL5Hui9c6bHny+c5NbTZnjblsen2azMe+/l0X+l7ok2C9HvG83tQ7/dsRqrNiz23X/n6GrQpkSs9LnR/t27d2jlPm5bpMenLOvW75T//+Y888cQTMmLECHnmmWdMEzJfeftO1tc/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7jnTv0D//v2dfRz88ssvMmjQINm5c6eMGDEiENsJAABCpE+BMWPGSI8ePaRnz57OfpPmz58vkyZNklGjRiX7uN69e0unTp1MRdJXX33l13Nq59516tSR2bNnS/Hixb2ONJfZiKEAAAhh9MkUmCSTBoj//e9/5f7773fOu+OOO6R69eom8USSCQCA4OawLk3+LK/i4uLc5mfPnt1MruLj42X16tXy9NNPu81v1aqVLF++PNnnmDZtmmzfvl3+97//pSqW2LZtm3z++eemmilYEUMBABB+8VO48bu5nA4HrFcKPWl/CxcvXkyv7QIAAEHWp0DJkiXN6G325K0q6fDhwyZWKFq0qNt8vb1///5kE0SalProo49Mf0ypccMNN8iff/4pwYwYCgCAEJbF+mQ6evSo/PPPP27zNm3aJN26dZMOHTrIxx9/nKr1+h3Jde7c2VyJ01J4V1OmTJEHHnggVRsBAACCv9x79+7dEhMT45ztWcXkyrO5mnZ07a0JmyZetInciy++KBUqVPB9m0Tk999/d/6t1dSPPfaYSWRdd911SUaZ04rrzEYMBQBACMtizeX69etnuhiwczsHDx40/WiWKFFCypUrJ127djVx2oMPPpj+SabBgwc7/9YAUTv5XrBggdx4443OzjY18NTOOgEAQJDz9+rav8tqgsk1yeRNoUKFTJ9KnlVLGrh4VjepkydPyqpVq0wH4Y888oiZl5iYaJJSWtWk8Ubz5s29PpeOQKdxietIt927d3f+bd+n/2qQlBmIoQAACO/4KVhpHke7K7B98MEHUqBAAVm3bp2JwUaPHi1vv/12YJJMGvh5No1T2neCKly4sJm0tAoAAIRvkBQdHW3ihIULF8rdd9/tnK+377zzziTLa9Jqw4YNbvMmTpwoP/74o+ljqWzZssk+144dOyTYEUMBAJBFZLEk0/79+93iLI29NHazuy7QvrdTGrAlTUmmn376ye8VAwCA8AyStHpHr3ppH446Eq02qd+1a5cZAU4NGTJE9uzZY66YRURESLVq1dweX6RIEcmRI0eS+Z5Kly4twY4YCgCALCKLJZliYmLk+PHjznjqt99+M6MD27QS/Pz5836vN3W9awIAgNAV4D4FOnbsKEeOHJHhw4fLvn37TLJozpw5ziBG52nSKT198803XudrgKQJKx11LqWqKAAAgHDqk6levXoy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pWDBgnLnnXc6120/91133SWjR48269dl+vXrJxcuXEj2ObRqqVSpUjJu3DipXLmy9OzZU7p3727WAYTr56JMmTJmW7t06WKeCwAQeKF2riCGQkYItc8FMRSyEpJMCAp6Aqhfv7706tXLlIvqVLJkSfMlrhVDdevWlfXr18ukSZPk3XfflREjRnhdzyeffCIdOnQwJwH9oXvmzBlp1qyZ5MmTR5YsWSLLli0zf996660SHx/vfNxPP/0k27dvN/++//77Mn36dDMl55dffpFWrVq5zbvllltk1apVKZ5AgKz8uQAAZLxQO1cQQyEjhNrnAshKsmX2BgBKrw5ER0dLrly5pFixYs6dMnHiRHNCeOutt8wViEqVKsnevXvlqaeekueff970++K6rDZb+/rrr82Xv31i0GWmTp1qHq+mTZsm+fLlk0WLFjkTRXolQp8jMjLSPEfbtm3lhx9+MCcmb/bv3y9FixZ1m6e39SrI4cOHzVULINw+FwCAjBdq5wpiKGSEUPtcAFkJSSYEtS1btpirEPaXuGrYsKGcOnVK/vnnH9NkTWlfSAcOHDBXE7T81bZ69Wr5888/JW/evG7rPXfunLm6YKtatao5Cdg0SbRhw4YUt811m5RlWV7nA+H0uQAABIdgPlcQQyGzBPPnAsgqSDIhqGnixpdApGbNmrJmzRpzJUHLX+37EhMTzQhwH330UZJ1awfFtqioKLf79PH62OToFRG9Eufq4MGDki1bNtPuGgjHzwUAIHgE67mCGAqZKVg/F0BWQpIJQUNLWhMSEtzmValSxVxJcD0hLF++3Fw9uOqqq5zLlStXTt544w0zVKleNdDyVHX99dfLzJkzpUiRIhITE5Nu26pXQL799lu3eQsWLJA6deokOakA4fK5AABkjlA6VxBDIaOE0ucCyEro+BtBQ0dVWLFihRmdQfs10mx/3759Zffu3dK/f3/5448/TJvoYcOGyeDBg93aTKsKFSqYzvX0xDFw4EAz74EHHpBChQqZUR+WLl1qhs3VESUeffRRUxKbWn369JG///7bbIeW3b733num08DHH388zfsBCNXPhVq3bp2ZtOz80KFD5u/NmzfzpgJAAIXSuYIYChkllD4XihgKWQVJJgQNTdDolQK9wqDlprt27TJXFObMmSO//fab1KhRwwQmPXr0kGeffdbrOipWrCg//vijzJgxQx577DHT2Z+O/KDtq9u1ayeVK1eW7t27y9mzZ9N09aFs2bJmu7SDPy2nfemll2T8+PFyzz33pGEPAKH9uVC1atUyk/ZZ8PHHH5u/dRQXAEDghNK5ghgKGSWUPheKGApZhcOyG6ECAAAAAAAAqUQlEwAAAAAAANKMJBMAAAAAAADSjCQTAAAAAAAA0owkEwAAAAAAANKMJBMAAAAAAADSjCQTAAAAAAAA0owkEwAAAAAAANKMJBMAAAAAAADSjCQTgAzjcDjkq6++Yo8DAAAQPwHIgkgyAfArSZTS1LVrV/YmAAAA8ROAMJUtszcAQOjYt2+f8++ZM2fK888/L//3f//nnJczZ85M2jIAAIDgRPwEIJxQyQTAZ8WKFXNOsbGxpnrJdd7HH38s5cqVk+joaKlYsaJ8+OGHKa5v+PDhUrRoUVm3bp25vXz5cmncuLFJVpUsWVIGDBggp0+fdi5fpkwZGTlypHTv3l3y5s0rpUqVkilTpvAOAgCAoEX8BCCckGQCkC6+/PJLefTRR+Wxxx6TjRs3Su/evaVbt27y008/JVnWsiyz7LvvvivLli2TmjVryoYNG+SWW26Rdu3aye+//24qpfS+Rx55xO2xb7zxhtSpU0fWrl0rffv2lf/85z/yxx9/8C4CAICQQ/wEIKtxWPprDwD8NH36dBk4cKAcP37c3G7YsKFUrVrVrbKoQ4cOphJp9uzZl75wHA757LPP5Ouvv5ZVq1bJwoUL5eqrrzb3denSxVQwTZ482fl4TTI1adLErCNHjhymkqlRo0bOCin9+tKrgy+++KL06dOH9xAAAAQ14icAWR2VTADSxZYtW0yiyZXe1vmuBg0aJL/88ossXbrUmWBSq1evNoFXnjx5nJNWNiUmJsqOHTucy1WvXt35t91c7+DBg7yLAAAg5BA/AchqSDIBSDea9HGllUae81q2bCl79uyR+fPnu83XZJI2sdP+mexp/fr1sm3bNtPPky0qKirJc+pjAQAAQhHxE4CshNHlAKSLypUrm+Zt2uzNph1563xXd9xxh9x+++3SqVMniYyMlPvuu8/Mv/7662XTpk1Svnx53hEAABAWiJ8AZDUkmQCkiyeeeML0waTJohYtWsi3334rs2bNku+//z7JsnfffbfpV+nBBx+UbNmySfv27eWpp56SG2+8Ufr16ye9evWS3LlzmxJy7bdpwoQJvEsAACDLIX4CkNWQZAKQLu666y5588035fXXX5cBAwZI2bJlZdq0adK0aVOvy2tiSZu5aaIpIiLCjCq3ePFiGTp0qOncW5vaaTO5jh078g4BAIAsifgJQFbD6HIAAAAAAABIMzr+BgAAAAAAQJqRZAIAAAAAAECakWQCAAAAAABAmpFkAgAAAAAAQJqRZAIAAAAAAECakWQCAAAAAABAmpFkAgAAAAAAQJqRZAIAAAAAAECakWQCAAAAAABAmpFkAgAAAAAAQJqRZAIAAAAAAICk1f8DvrbaDkXsUdsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import torch\n", "import matplotlib.pyplot as plt\n", "from pathlib import Path\n", "import subprocess, sys, tempfile\n", "repo = next((p for p in (Path.cwd(), *Path.cwd().parents) if (p / 'src').is_dir()), None)\n", "if repo is None:\n", " repo = (Path('/content') if Path('/content').is_dir() else Path(tempfile.gettempdir())) / 'build-Kimi-K3-architecture'\n", " if not (repo / 'src').is_dir():\n", " subprocess.run(['git', 'clone', '--depth', '1', 'https://github.com/mailtotanvir/build-Kimi-K3-architecture.git', str(repo)], check=True)\n", "sys.path.insert(0, str(repo))\n", "\n", "from src.architecture.attn_res import BlockAttentionResiduals\n", "\n", "torch.manual_seed(20260810)\n", "B, L, D, N = 1, 2, 4, 3\n", "attn_res = BlockAttentionResiduals(num_blocks=N, d_model=D)\n", "\n", "# Each row is the pseudo-query used for its matching source tensor. These\n", "# values make the expected depth logits [1, 0, -1] and [0, 2, 1].\n", "with torch.no_grad():\n", " attn_res.query_weights.copy_(torch.tensor([\n", " [1.0, 0.0, 0.0, 0.0],\n", " [0.0, 0.0, 2.0, 0.0],\n", " [0.0, 0.0, -1.0, 1.0],\n", " ]))\n", "\n", "block_outputs = [\n", " torch.tensor([[[1.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0]]]),\n", " torch.tensor([[[0.0, 2.0, 0.0, 0.0], [0.0, 0.0, 2.0, 0.0]]]),\n", " torch.tensor([[[0.0, 0.0, 3.0, 0.0], [0.0, 0.0, 0.0, 3.0]]]),\n", "]\n", "\n", "out, weights = attn_res(block_outputs)\n", "expected_weights = torch.softmax(torch.tensor([\n", " [[1.0, 0.0, -1.0], [0.0, 2.0, 1.0]]\n", "]), dim=-1)\n", "expected_out = sum(\n", " expected_weights[..., block_index, None] * block\n", " for block_index, block in enumerate(block_outputs)\n", ")\n", "\n", "assert out.shape == (B, L, D)\n", "assert weights.shape == (B, L, N)\n", "assert torch.allclose(weights.sum(dim=-1), torch.ones(B, L))\n", "# RMSNorm's default epsilon makes the hand-written logits approximate.\n", "assert torch.allclose(weights, expected_weights, atol=1e-5)\n", "assert torch.allclose(out, expected_out, atol=1e-5)\n", "\n", "print(\"All deterministic AttnRes assertions passed.\")\n", "print(\"Depth weights [token, block]:\")\n", "print(weights[0].detach())\n", "print(\"Output [token, width]:\")\n", "print(out[0].detach())\n", "\n", "# The right panel is an illustrative source RMS summary. The module consumes\n", "# full tensors, not these summaries; RMSNorm makes the depth scores directional.\n", "stacked = torch.stack(block_outputs, dim=2)\n", "source_rms = torch.sqrt(stacked.square().mean(dim=-1))[0].detach()\n", "fig, (ax_weights, ax_sources) = plt.subplots(1, 2, figsize=(12, 4))\n", "images = [\n", " (ax_weights, weights[0].detach().T, \"Depth-softmax weights\", \"weight\"),\n", " (ax_sources, source_rms.T, \"Supplied source RMS (illustrative)\", \"RMS\"),\n", "]\n", "for axis, values, title, colorbar_label in images:\n", " image = axis.imshow(values.numpy(), aspect=\"auto\", cmap=\"viridis\")\n", " axis.set_title(title)\n", " axis.set_xlabel(\"Token\")\n", " axis.set_ylabel(\"Source block\")\n", " axis.set_xticks(range(L), [f\"token {token}\" for token in range(L)])\n", " axis.set_yticks(range(N), [f\"block {block}\" for block in range(N)])\n", " for row in range(N):\n", " for column in range(L):\n", " axis.text(column, row, f\"{values[row, column]:.3f}\", ha=\"center\", va=\"center\", color=\"white\")\n", " fig.colorbar(image, ax=axis, label=colorbar_label)\n", "\n", "fig.suptitle(\"Deterministic miniature: score depth, then mix raw source tensors\")\n", "plt.tight_layout()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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 }