{ "cells": [ { "cell_type": "markdown", "id": "8e27f5ac", "metadata": {}, "source": [ "# Notebook 2 — PyTorch for Biologists (with scikit-learn comparison)\n", "This notebook introduces **PyTorch** for biology students.\n", "\n", "You will learn:\n", "- tensors and devices (CPU/GPU)\n", "- `Dataset` and `DataLoader`\n", "- defining a model (`nn.Module`)\n", "- training loop: forward → loss → backward → optimizer step\n", "- evaluation: accuracy + ROC‑AUC\n", "- saving/loading a model\n", "\n", "We use the breast cancer dataset and compare to a scikit‑learn logistic regression baseline.\n", "\n", "## References (official docs)\n", "- Datasets & DataLoaders: https://docs.pytorch.org/tutorials/beginner/basics/data_tutorial.html\n", "- Training: https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html\n", "- Autograd: https://docs.pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html\n" ] }, { "cell_type": "code", "execution_count": 1, "id": "26199b76", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "device(type='cuda')" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# If needed:\n", "# pip install torch numpy matplotlib scikit-learn\n", "\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "import torch\n", "import torch.nn as nn\n", "import torch.nn.functional as F\n", "from torch.utils.data import Dataset, DataLoader\n", "\n", "from sklearn.datasets import load_breast_cancer\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.metrics import accuracy_score, roc_auc_score, RocCurveDisplay\n", "\n", "torch.manual_seed(0)\n", "np.random.seed(0)\n", "\n", "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", "device\n" ] }, { "cell_type": "markdown", "id": "4d5e910f", "metadata": {}, "source": [ "## 1) Load + split data (train/val/test) and scale using TRAIN only" ] }, { "cell_type": "code", "execution_count": 2, "id": "c8109219", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "((364, 30), (91, 30), (114, 30))" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "data = load_breast_cancer()\n", "X = data.data.astype(np.float32)\n", "y = data.target.astype(np.int64)\n", "\n", "X_trainval, X_test, y_trainval, y_test = train_test_split(\n", " X, y, test_size=0.2, random_state=42, stratify=y\n", ")\n", "X_train, X_val, y_train, y_val = train_test_split(\n", " X_trainval, y_trainval, test_size=0.2, random_state=42, stratify=y_trainval\n", ")\n", "\n", "scaler = StandardScaler()\n", "X_train = scaler.fit_transform(X_train).astype(np.float32)\n", "X_val = scaler.transform(X_val).astype(np.float32)\n", "X_test = scaler.transform(X_test).astype(np.float32)\n", "\n", "X_train.shape, X_val.shape, X_test.shape\n" ] }, { "cell_type": "markdown", "id": "57b3faed", "metadata": {}, "source": [ "## 2) scikit‑learn baseline" ] }, { "cell_type": "code", "execution_count": 3, "id": "cf0fa93f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sklearn test accuracy: 0.9824561403508771\n", "sklearn test ROC-AUC: 0.9957010582010581\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sk_model = LogisticRegression(max_iter=5000)\n", "sk_model.fit(X_train, y_train)\n", "proba = sk_model.predict_proba(X_test)[:,1]\n", "pred = (proba >= 0.5).astype(int)\n", "\n", "print(\"sklearn test accuracy:\", accuracy_score(y_test, pred))\n", "print(\"sklearn test ROC-AUC: \", roc_auc_score(y_test, proba))\n", "\n", "RocCurveDisplay.from_predictions(y_test, proba)\n", "plt.title(\"sklearn baseline ROC curve\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "8e2a498e", "metadata": {}, "source": [ "## 3) PyTorch Dataset + DataLoader" ] }, { "cell_type": "code", "execution_count": 4, "id": "cbaadf15", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(torch.Size([64, 30]), torch.Size([64]), torch.float32, torch.int64)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class NumpyDataset(Dataset):\n", " def __init__(self, X, y):\n", " self.X = torch.from_numpy(X) # float32\n", " self.y = torch.from_numpy(y) # int64\n", " def __len__(self):\n", " return self.X.shape[0]\n", " def __getitem__(self, idx):\n", " return self.X[idx], self.y[idx]\n", "\n", "train_ds = NumpyDataset(X_train, y_train)\n", "val_ds = NumpyDataset(X_val, y_val)\n", "test_ds = NumpyDataset(X_test, y_test)\n", "\n", "train_loader = DataLoader(train_ds, batch_size=64, shuffle=True)\n", "val_loader = DataLoader(val_ds, batch_size=128, shuffle=False)\n", "test_loader = DataLoader(test_ds, batch_size=128, shuffle=False)\n", "\n", "xb, yb = next(iter(train_loader))\n", "xb.shape, yb.shape, xb.dtype, yb.dtype\n" ] }, { "cell_type": "markdown", "id": "4bed10d7", "metadata": {}, "source": [ "## 4) Define a simple neural network (MLP)" ] }, { "cell_type": "code", "execution_count": 5, "id": "901a771b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "MLP(\n", " (net): Sequential(\n", " (0): Linear(in_features=30, out_features=64, bias=True)\n", " (1): ReLU()\n", " (2): Dropout(p=0.2, inplace=False)\n", " (3): Linear(in_features=64, out_features=32, bias=True)\n", " (4): ReLU()\n", " (5): Linear(in_features=32, out_features=2, bias=True)\n", " )\n", ")" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "class MLP(nn.Module):\n", " def __init__(self, n_in):\n", " super().__init__()\n", " self.net = nn.Sequential(\n", " nn.Linear(n_in, 64),\n", " nn.ReLU(),\n", " nn.Dropout(0.2),\n", " nn.Linear(64, 32),\n", " nn.ReLU(),\n", " nn.Linear(32, 2) # logits for 2 classes\n", " )\n", " def forward(self, x):\n", " return self.net(x)\n", "\n", "model = MLP(n_in=X_train.shape[1]).to(device)\n", "model\n" ] }, { "cell_type": "markdown", "id": "b331c4b8", "metadata": {}, "source": [ "## 5) Training loop" ] }, { "cell_type": "code", "execution_count": 6, "id": "967df107", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "epoch 01 | train loss 0.673 acc 0.580 | val loss 0.624 acc 0.956\n", "epoch 02 | train loss 0.598 acc 0.915 | val loss 0.553 acc 0.967\n", "epoch 03 | train loss 0.519 acc 0.937 | val loss 0.470 acc 0.967\n", "epoch 05 | train loss 0.338 acc 0.948 | val loss 0.295 acc 0.956\n", "epoch 10 | train loss 0.112 acc 0.962 | val loss 0.110 acc 0.967\n", "epoch 20 | train loss 0.046 acc 0.992 | val loss 0.068 acc 0.978\n", "epoch 30 | train loss 0.025 acc 0.995 | val loss 0.068 acc 0.978\n" ] } ], "source": [ "criterion = nn.CrossEntropyLoss()\n", "optimizer = torch.optim.Adam(model.parameters(), lr=1e-3)\n", "\n", "def run_epoch(loader, train=True):\n", " model.train() if train else model.eval()\n", " total_loss, correct, total = 0.0, 0, 0\n", "\n", " for xb, yb in loader:\n", " xb = xb.to(device)\n", " yb = yb.to(device)\n", "\n", " if train:\n", " optimizer.zero_grad(set_to_none=True)\n", "\n", " with torch.set_grad_enabled(train):\n", " logits = model(xb)\n", " loss = criterion(logits, yb)\n", " if train:\n", " loss.backward()\n", " optimizer.step()\n", "\n", " total_loss += loss.item() * xb.size(0)\n", " pred = torch.argmax(logits, dim=1)\n", " correct += (pred == yb).sum().item()\n", " total += xb.size(0)\n", "\n", " return total_loss/total, correct/total\n", "\n", "history = {\"train_loss\":[], \"val_loss\":[], \"train_acc\":[], \"val_acc\":[]}\n", "\n", "for epoch in range(1, 31):\n", " tr_loss, tr_acc = run_epoch(train_loader, train=True)\n", " va_loss, va_acc = run_epoch(val_loader, train=False)\n", " history[\"train_loss\"].append(tr_loss); history[\"val_loss\"].append(va_loss)\n", " history[\"train_acc\"].append(tr_acc); history[\"val_acc\"].append(va_acc)\n", " if epoch in [1,2,3,5,10,20,30]:\n", " print(f\"epoch {epoch:02d} | train loss {tr_loss:.3f} acc {tr_acc:.3f} | val loss {va_loss:.3f} acc {va_acc:.3f}\")\n" ] }, { "cell_type": "markdown", "id": "63106f71", "metadata": {}, "source": [ "### Plot learning curves" ] }, { "cell_type": "code", "execution_count": 7, "id": "93a84ce6", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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uhseGSPR4cePVQkJCRIeHm5GRnWk83CPPPKInHvuue77ycnJMmDAAPd9DZnvv/++CYjHGuHU8HnllVea248//rg8//zzsmzZMhOAG6Jh1KVLly7m+TraqwFaR35feukls+9z5841y8GqHj16uH/msccek7vvvlumTp3q3qY/7y2MwPo4wLKIAQAAOBo9jV+XBsh77rlHevXqZZZg1TC5cePG447A6uiti07w0tP+h5cE1KUjqjqy26FDB1MeMHLkSLPd9T6rVq0yJQOu8FqXvu7evXtl1KhRPjuwjMD6OMAyiQsAAO+ICgsxI6FWvbcnHN5NQMPrggUL5KmnnjKn5HUlq1//+tdSXu7MFUdzeNDUutjq6uoGn1tcXCxjxowxl9mzZ5tJYRpc9b7rfVwraDXkWI95CwHWRyghAADAuzSkNeY0vtW0hEA7DDTGd999Z8oBdEKWa0T2559/9uj+bNq0SbKzs03trased/ny5UeM6P7jH/8wtbKHh2MdsdWJZFqne/bZZ4svUELgI5QQAAAApWFv6dKlJogePHjwqCOjSjsIzJ8/35zC1wlW2h2g+hjPbwotG9BQ/cILL8j27dtNfa3W2tal9bYFBQUyceJEE263bNliOhds3rzZPP7www/L008/bWpn9bGVK1ea1/MWAqyvR2BjInz1lgAAwA9pWUBISIj07t3bfbr+aJ555hlJSkqSU0891dSo6mn9QYMGeXR/dB9ef/11eeedd8w+6UislizUlZKSYroP6Aiw1sdqq6//+7//c4/GTpo0ybTyevnll00rLW23pUHWW4Icje370ELoXw86iy4/P98UNPuCfsQ9//iZlFdVy3e/P0cyEn1fKwIAQEtSWloqO3bskM6dO0tkZKTVuwMPHbvG5jRGYH2guLzKhFfFQgYAAADNQ4D1gZyimhl8YSESFe6ZWYoAAACByvIAq41xtZhZh5CHDx9umuweS15enlnpQZco09UgtInuJ598Iv4su7jMXNNCCwAAoPks7TUxb948ueuuu2TmzJkmvGrxrxYn64y2Vq1aHfF87UWmq1PoY++++65kZGTIL7/8Yhr7+rPcEnrAAgAAtIgAqzPrdC3gyZMnm/saZD/++GOZNWuWWQv4cLpd1/H973//6571pqO3/i67poSAEVgAAAAblxDoaKouWzZ69OjanQkONveXLFnS4M9oX7IRI0aYEoL09HTp27evWd/3WM2Ay8rKzIy2uhfrWmiF+/y9AQAAWhrLAqw27tXgqUG0Lr2/f//+Bn9Gm+tq6YD+nNa9PvDAA6Zp7mOPPXbU95kxY4Zpx+C6uFaY8KWcmhKCJAIsAACA/SdxnQhdeULrX1999VXTQHfChAnyhz/8wZQeHM306dNNLzHXZdeuXWJVFwJKCAAAAGxcA5uammpWocjMzKy3Xe+3bt26wZ/RzgNa+6o/59KrVy8zYqslCboM2uG0U4FerOQqISDAAgAA2HgEVsOmjqIuXLiw3gir3tc614acdtppsnXr1nprAP/0008m2DYUXv2Fq4SAAAsAADyhU6dOpntToLK0hEBbaOk6uv/4xz9k48aNcsstt0hxcbG7K8F1111nSgBc9HHtQjB16lQTXLVjgU7i0kld/oxJXAAAAC2kjZbWsB44cEAefPBBUwYwcOBA+eyzz9wTu3bu3Gk6E7joBKzPP/9c7rzzTunfv7/pA6th9r777hN/5qqBZRIXAABAC5jEdfvtt5vFCLTd1dKlS82CBi6LFi2S119/vd7ztbzg+++/l9LSUtm2bZvcf//99Wpi/U15ZbUUllWa27TRAgAgsOlE9LZt29Yrh1Tjx4+XG264wdzWfKP3dUAvNjZWhg4dKl9++eUJvc8PP/xgFn/SOUfahWnkyJGycuXKI1Y3/X//7/+Z99EVUbU96UcffeR+/LvvvpOzzjpLoqOjJSkpySw2lZubK/7A8gDb0rlW4QoJDpL4SOfiCwAAwAscDpHyYmsu+t6NcPnll0t2drZ8/fXX7m1aHqlnoK+++mpzv6ioSMaOHWvmBf34449y/vnny7hx48yZ6cYqLCyUSZMmybfffmsG/rp3725eU7crDdAXXHCBCan//Oc/ZcOGDfLEE0+4BwVXrVolo0aNkt69e5v+/Po6ug/H6r0fMCUEgcC1CldSdJgEBwdZvTsAALRcFSUij7e15r3v3ysSHnPcp+lIpgbHt956ywREpT3udaT07LPPNvcHDBhgLi6PPvqovP/++2ZBJz1z3RjnnHPOESO/iYmJsnjxYrnooovMiO6yZcvMHKQePXqY53Tp0sX9/CeffFKGDBkiL7/8sntbnz59xF8wAuujEVg6EAAAAKUjre+9954pn1SzZ8+WiRMnuuf96AjsPffcY1qFaujUMgINmicyApuZmSlTpkwxI69aQhAfH29e1/UaOsLarl07d3g9nGsE1l8xAutl2fSABQDAN8KinSOhVr13I+mpeIfDYbopaX3rf/7zH/nLX/7iflzD64IFC+Spp56Sbt26SVRUlPz61782Pe8ba9KkSaZU4bnnnpOOHTuanvg6j8j1Gvqax3K8x61GgPWynCLnX1eMwAIA4GVBQY06jW81nTB16aWXmpFX7W/fs2dPGTRokPtxrUu9/vrr5ZJLLjH3deT0559/PqH3+O6778zpf617VboS6cGDB92Pazen3bt3m7akDY3C6uNag/unP/1J/BElBF6WU1JhrgmwAACgbhmBjsDOmjXLPXnLRU/7z58/35zGX716tVx11VVHdC04Hn2NN99805QeaJcnfY+6o6raleDMM8+Uyy67zIz27tixQz799FMzmUxpH37tZHDrrbfKmjVrZNOmTfLKK6/UC8FWIsB6WU6xawTW2uVsAQCA/9BJVsnJybJ582YTUOt65plnzGSvU0891ZQbaPuquiO0jfHaa6+Zllf6c9dee63ccccd0qpVq3rP0TpcLWG48sorTbeBadOmubsM6KjsF198YQL0sGHDTPnBv/71LwkN9Y+T90EOLcIIIAUFBaaYOT8/3xQ0e9tts1fKx2v3ycPjesv1p3X2+vsBABAItB+8jhp27tzZnJJHyzh2jc1pjMB6WURosCRGh0lKLCOwAAAAnuAf48At2DMTBlq9CwAAAC0KI7AAAACwFQIsAAAAbIUACwAAAFshwAIAANsKsGZKLYLDA8eMAAsAAGwnLCzMXJeUlFi9KzhBrmPmOoZNQRcCAABgOyEhIZKYmChZWVnmfnR0tATpUrLw65FXDa96zPTY6TFsKgIsAACwpdatW5trV4iFPWh4dR27piLAAgAAW9IR1zZt2pglUisqKqzeHTSClg00Z+TVhQALAABsTQORJ0IR7INJXAAAALAVAiwAAABshQALAAAAWwkN1Oa5BQUFVu8KAAAA6nDls+MtdhBwAbawsNBct2/f3updAQAAwFHyWkJCghxNkCPA1mCrrq6WvXv3SlxcnE8aHutfEhqWd+3aJfHx8V5/P3AM/BHfA+txDKzHMeDzD3QFjchEGks1vLZt21aCg49e6RpwI7D6YbRr187n76sHigBrLY6B9TgG1uMYWI9jwOcf6OKPk4mONfLqwiQu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gAED5N133613ev/jjz+W/v37S2RkpJxyyimybt26eq/x3nvvSZ8+fSQiIkI6deokTz/9dL3Hy8rK5L777pP27dub53Tr1k1ee+21es9ZsWKFDBkyRKKjo+XUU0+VzZs3++D/PQA0DwEWACyg4fWNN96QmTNnyvr16+XOO++Ua665RhYvXux+zr333mtC6Q8//CBpaWkybtw4qaiocAfPK664QiZOnChr166Vhx9+WB544AF5/fXX3T9/3XXXyZw5c+T555+XjRs3yl//+leJjY2ttx9/+MMfzHssX75cQkND5YYbbvDhpwAATRPkcDgcTfxZAEAT6MhocnKyfPnllzJixAj39htvvFFKSkrkpptukrPPPlvmzp0rEyZMMI/l5ORIu3btTEDV4Hr11VfLgQMH5IsvvnD//LRp08yorQbin376SXr27CkLFiyQ0aNHH7EPOsqr76H7MGrUKLPtk08+kQsvvFAOHTpkRn0BwF8xAgsAPrZ161YTVM8991wzIuq66Ijstm3b3M+rG2418Gog1ZFUpdennXZavdfV+1u2bJGqqipZtWqVhISEyMiRI4+5L1qi4NKmTRtznZWV5bH/rwDgDaFeeVUAwFEVFRWZax0tzcjIqPeY1qrWDbFNpXW1jREWFua+rXW3rvpcAPBnjMACgI/17t3bBNWdO3eaiVV1LzrhyuX77793387NzTVlAb169TL39fq7776r97p6v0ePHmbktV+/fiaI1q2pBYCWghFYAPCxuLg4ueeee8zELQ2Zp59+uuTn55sAGh8fLx07djTPe+SRRyQlJUXS09PNZKvU1FS5+OKLzWN33323DB06VB599FFTJ7tkyRJ58cUX5eWXXzaPa1eCSZMmmUlZOolLuxz88ssvpjxAa2gBwM4IsABgAQ2e2llAuxFs375dEhMTZdCgQXL//fe7T+E/8cQTMnXqVFPXOnDgQPnwww8lPDzcPKbPffvtt+XBBx80r6X1qxp4r7/+evd7vPLKK+b1br31VsnOzpYOHTqY+wBgd3QhAAA/4+oQoGUDGmwBAPVRAwsAAABbIcACAADAVighAAAAgK0wAgsAAABbIcACAADAVgiwAAAAsBUCLAAAAGyFAAsAAABbIcACAADAVgiwAAAAsBUCLAAAAGyFAAsAAACxk/8Pqi86sgovInUAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(7,4))\n", "plt.plot(history[\"train_loss\"], label=\"train loss\")\n", "plt.plot(history[\"val_loss\"], label=\"val loss\")\n", "plt.xlabel(\"epoch\"); plt.ylabel(\"loss\"); plt.legend(); plt.tight_layout(); plt.show()\n", "\n", "plt.figure(figsize=(7,4))\n", "plt.plot(history[\"train_acc\"], label=\"train acc\")\n", "plt.plot(history[\"val_acc\"], label=\"val acc\")\n", "plt.xlabel(\"epoch\"); plt.ylabel(\"accuracy\"); plt.legend(); plt.tight_layout(); plt.show()\n" ] }, { "cell_type": "markdown", "id": "bac047a4", "metadata": {}, "source": [ "## 6) Test evaluation (accuracy + ROC‑AUC)" ] }, { "cell_type": "code", "execution_count": 8, "id": "6bfcd056", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "PyTorch test accuracy: 0.9649122807017544\n", "PyTorch test ROC-AUC: 0.9937169312169313\n" ] }, { "data": { "image/png": "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EwPf7Z0+fdpj+yUiIuuK0oK4mPj6jz/+0OQXDjEgIqKArgEiyeXrr7+WihUr6u2qVauGmRIN2aC4jX5CIiKigAmAAwYMkFatWsmGDRu8WyIiIiJ/CoCo4UGZMmW8WR4iIiL/6wOMbBUIIiKigM0CzZYt20uD4I0bN161TERERP4VANEP6DgTDBERUcAHwHr16jldpJaIiChg+wDZ/0dERJYMgGYWKBERkaWaQLFKAxERUaDw2IK4REREbxIGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisiQGQCIisqSYvi4AUSB7/vy5PH361NfFIHqjxIgRQ2LGjCnRokXz6n4YAIm85N69e3L+/HkxDIPHmMhNwcHBkjp1aokVK5Z4CwMgkZdqfgh++CNOnjy513/JEgUKwzDkyZMncu3aNTl16pRkzZpVokf3Tm8dAyCRF6DZE3/ICH5x48blMSZyA/5mgoKC5MyZMxoM48SJI97AJBgiL2LNjyhqvFXrC7MPr++BiIjIDzEAEhGRJTEAElGUmnaXLFni9SO3ceNG3detW7ds27DfLFmyaKr8V199JTNmzJDEiRN7rQxHjx6VVKlSyd27d722D6upV6+efP/9974uBgMgEYV1+fJladeunWTKlElix44t6dKlkypVqsi6dete+6EqUaKEXLp0SRIlSmTb1rJlS6ldu7acO3dOBg0aJHXr1pVjx455rQw9evTQ45EgQYJw9+XIkUOPEY6ZowwZMsjo0aPDbe/fv78UKFDAL475ggUL9D0gySRv3ryyfPnylz5n3LhxkjNnTk1UyZ49u8yaNStcAtjAgQMlc+bM+rr58+eXlStXhnlM7969ZciQIXL79m3xJdYAicjm9OnTUrhwYVm/fr2MGDFC9u/fryevsmXLSps2bV77kcIYMNS+zGQijK28evWqhIaGSpo0aTQo4UScIkWKV9pPRJMVnD17Vv744w9p0qRJuPu2bNkiDx8+1GA8c+bMN+6Yb926VT799FNp1qyZ7NmzR6pXr66XAwcORPicCRMm6A8C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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "@torch.no_grad()\n", "def predict_proba(loader):\n", " model.eval()\n", " probs_all, y_all = [], []\n", " for xb, yb in loader:\n", " xb = xb.to(device)\n", " logits = model(xb)\n", " probs = torch.softmax(logits, dim=1)[:,1].cpu().numpy()\n", " probs_all.append(probs)\n", " y_all.append(yb.numpy())\n", " return np.concatenate(probs_all), np.concatenate(y_all)\n", "\n", "probs, ytrue = predict_proba(test_loader)\n", "pred = (probs >= 0.5).astype(int)\n", "\n", "print(\"PyTorch test accuracy:\", accuracy_score(ytrue, pred))\n", "print(\"PyTorch test ROC-AUC: \", roc_auc_score(ytrue, probs))\n", "\n", "RocCurveDisplay.from_predictions(ytrue, probs)\n", "plt.title(\"PyTorch MLP ROC curve\")\n", "plt.show()\n" ] }, { "cell_type": "markdown", "id": "90abe3ec", "metadata": {}, "source": [ "## 7) Save / load model weights" ] }, { "cell_type": "code", "execution_count": 9, "id": "396e118d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Saved: mlp_breast_cancer_state_dict.pt\n", "max|diff|: 0.0\n" ] } ], "source": [ "save_path = \"mlp_breast_cancer_state_dict.pt\"\n", "torch.save(model.state_dict(), save_path)\n", "print(\"Saved:\", save_path)\n", "\n", "model2 = MLP(n_in=X_train.shape[1]).to(device)\n", "model2.load_state_dict(torch.load(save_path, map_location=device))\n", "model2.eval()\n", "\n", "@torch.no_grad()\n", "def first_batch_probs(m):\n", " xb, _ = next(iter(test_loader))\n", " xb = xb.to(device)\n", " return torch.softmax(m(xb), dim=1)[:,1].cpu().numpy()\n", "\n", "p1 = first_batch_probs(model)\n", "p2 = first_batch_probs(model2)\n", "print(\"max|diff|:\", float(np.max(np.abs(p1 - p2))))\n" ] }, { "cell_type": "markdown", "id": "1bd9af5a", "metadata": {}, "source": [ "## 8) Where PyTorch is especially useful in biology\n", "- Custom architectures (CNNs for microscopy, Transformers for sequences)\n", "- Multi‑modal models (omics + imaging + clinical metadata)\n", "- Transfer learning and pretrained models\n", "- GPU acceleration for large datasets\n" ] } ], "metadata": { "generated": "2026-01-21 08:28:54.309695", "kernelspec": { "display_name": "base", "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.12.11" } }, "nbformat": 4, "nbformat_minor": 5 }