Unfiltered technical write-ups, model implementation notes, and practical machine learning research and random thoughts. Part lab notebook, part technical archive.
| Date | Title | Description | Reading Time | |
|---|---|---|---|---|
|
Sep 17, 2026 | Who Does the Clearing? | Two mechanisms that give the same mean clearance curve, a history-dependent recurrent-event model that separates them, and the design that makes the contrast causal rather than merely predictive. | 24 min |
|
Sep 15, 2026 | CP or Tucker | CP returns components that are, under Kruskal’s condition, the only ones that fit. Tucker returns a basis per mode and a small core, fixed only up to a rotation you can slide between them. The question you are asking decides which answer is useful. | 9 min |
|
Sep 13, 2026 | Probabilistic PCA | Derive the PPCA covariance fit and latent posterior, then compare its shrunk reconstruction with classical PCA on a reproducible sensor example. | 9 min |
|
Sep 13, 2026 | Six Views of PCA | Derive the links between variance, projection error, covariance eigenvectors, and truncated SVD. MovieLens and metabolomics show why the largest-variance direction still needs interpretation. | 31 min |
|
Sep 10, 2026 | GAPDH as a NET suppressor | Li et al. 2023 show that flow through GAPDH suppresses neutrophil extracellular traps through intracellular pH, not extra NADPH. The public ST002477 table cannot carry that claim. Companion to Neutrophil Metabolomes as a Matrix. | 21 min |
|
Sep 10, 2026 | Neutrophil Metabolomes as a Matrix | Seventy-five neutrophil metabolomes, three COVID labels. k-means, Ward, and a diagonal GMM with k=3 do not recover the labels. Averaging the groups and fitting a line through those means is well-defined and the wrong summary. | 18 min |
|
Sep 10, 2026 | A NumPy-like Tensor in Pure Python | A flat list plus a shape tuple is enough for shape, ndim, size, len, reshape, transpose, and indexing — no NumPy. Reshape keeps storage order; transpose does not. | 19 min |
|
Sep 4, 2026 | What the Immune System Sees in an AAV Vector | A recombinant AAV particle carries no gene the immune system can read as therapeutic. Four arms answer it — innate sensing of the shell and the DNA, antibodies that block or tag it, T cells that kill the cells that took it up, and complement — and a route widget here lets you switch each one on and watch the surviving genomes fall. | 17 min |
|
Sep 3, 2026 | Why So Many Matrix Factorizations | Different factorizations exist because they solve different problems: QR for tall least squares, Cholesky for an SPD covariance, LU for a square system that is not SPD, SVD for a rank-k summary or a rectangular inverse. | 16 min |
|
Aug 31, 2026 | Claude Agent SDK in Python | query() and ClaudeSDKClient wrap Claude Code so you do not write the Messages API tool loop by hand. | 11 min |
|
Aug 31, 2026 | Fingerprint Algorithms: From Ridge Formation to On-Device Embeddings | Friction ridges are a prenatal pattern. Identification is the problem of turning that pattern into a comparable digital object — first as minutiae, now as a learned embedding bounded by the sensor. | 46 min |
|
Aug 31, 2026 | Tensor Inverses: Independence, Completion, Identification | You already undo a mixed recording, fill a blank rating, and pick plant settings from a desired output. For a square, full-rank matrix those three jobs share one inverse. A… | 19 min |
|
Aug 30, 2026 | Tensor Inverses in Practice | Four real problems where the operator is a tensor. For each one, this post names the product that applies, takes the inverse in that product, and measures what flattening… | 34 min |
|
Aug 29, 2026 | Claude API with the Anthropic Python SDK |
The official anthropic Python SDK talks to Claude through one method, client.messages.create(). Roles, content blocks, tools, and retrieved documents are fields on that call…
|
12 min |
|
Aug 29, 2026 | Claude Certified Architect, Week 1: The Orchestrator-Worker Loop | Week one of preparing for the Claude Certified Architect – Foundations exam: the four-stage agent lifecycle, a production orchestrator-worker loop that branches on every stop_reason, and the failure modes that separate a demo from a service. | 20 min |
|
Aug 29, 2026 | GitHub vs GitLab: Origins, Dominance, and AI-Native Hosts | GitHub and GitLab differ by who built them, who owns them, and who leads today — and four AI-native platforms are now reshaping git hosting around them. The comparison… | 3 min |
|
Aug 29, 2026 | Uses of Tensor Factorizations | The main application of tensor factorizations is compression: images and video, or the parameter tensors inside a neural net — a VGG conv kernel, a transformer dense map. | 50 min |
|
Aug 28, 2026 | NumPy to JAX: The Array That Learned New Tricks | NumPy stores numbers in arrays whose operations run in compiled code. JAX keeps that array API and adds compilation, automatic differentiation, and accelerator backends. | 3 min |
|
Aug 28, 2026 | Tensor Factorizations and Tensor Inverses | A tensor \(\mathcal{X}\in\mathbb{R}^{I_1\times\cdots\times I_N}\) is an \(N\)-way array. The \(N=2\) case is a matrix: rows and columns only. | 15 min |
|
Aug 27, 2026 | From Dataset to Biological Signature | Golub’s 1999 leukemia data, run end to end: recovering the original train/test split from a CSV that lost its labels, fitting a gene signature without letting the test data leak in, and showing why the test-set error rate is the hard one to get. | 16 min |
|
Aug 27, 2026 | What is a Biological Signature? | A fingerprint identifies a person from a patch of skin. A biological signature does it with molecules — and pulling one out of data takes four steps, of which the last is the one people get wrong. | 2 min |
|
Aug 22, 2026 | The Cheapest Ladder Is Also the Shortest | Maths costs a pencil and tells you when you’re right, which is why it’s full of broke kids. Then the bill arrives at twenty-two — and the way out asks for something a pencil never needed: a quiet room. | 5 min |
|
Aug 19, 2026 | The Matrix That Rotates, Stretches, and Rotates Again | Every matrix turns space, stretches it, and turns it again — and that one fact prices image compression in decibels per byte, predicts when a solver will return garbage, hides inside PCA and topic models, and pulls a voice back out of equal-parts noise. With two widgets you can drive yourself. | 34 min |
|
Aug 19, 2026 | The Anatomy of a Volcano Plot | Why statistical significance does not imply biological importance, how the log2 transform makes the two directions comparable, and how a pair of thresholds turns thousands of noisy hypotheses into a shortlist you can defend. With a screening simulation you drive yourself. | 13 min |
|
Aug 18, 2026 | Five Photos of One Kite, Five Different Shapes | Kendall shape analysis quotients out translation, scale, and rotation (the similarity group). Field photographs of a rigid object introduce perspective, which similarity… | 18 min |
|
Aug 18, 2026 | The Statistical Jackknife | Quenouille’s bias eraser and Tukey’s pseudovalues, worked through four examples: ratio bias in small cohorts, promo-abuse syndicates, censored survival regression, and clinical biomarker stability — with interactive widgets that run in the browser. | 14 min |
|
Aug 14, 2026 | Everyone’s Name on Every Paper | Paper and citation counts credit every name on the author list. They do not measure work done. | 5 min |
|
Aug 14, 2026 | What’s Left When You Take Away Position, Size and Angle | Shape is what remains after removing translation, scale, and rotation from a landmark configuration. The removal steps are deterministic (no fitting). The resulting shape… | 15 min |
|
Aug 13, 2026 | The Directions a Matrix Refuses to Turn | Multiplying a vector by a matrix \(A\) generally rotates and scales it. | 5 min |
|
Aug 12, 2026 | Explainability is Not Causality: What is not Why | Attribution methods localize: they say which part of a fixed model carried a fixed input to a fixed output. Causal claims are bought by intervening. The two fields share a vocabulary — why, because, counterfactual, important — and mean different things by all four. | 8 min |
|
Aug 12, 2026 | Matrix Factorizations as Optimization Problems: QR, SVD, Eigendecomposition, NMF, and Cholesky | A matrix factorization writes \(A\) as a product of simpler matrices (triangular, orthogonal, diagonal, or all-nonnegative). Each standard factorization is also the solution… | 10 min |
|
Aug 10, 2026 | How Causality Works: From Toddlers to Do-Calculus | Perception, covariation, intervention, counterfactuals — children assemble a causal toolkit before school. Pearl’s graphs and Rubin’s potential outcomes are that toolkit written down, and on a growth team’s promo and feature they turn two dashboard numbers into two different decisions. | 15 min |
|
Aug 10, 2026 | Wiring an Eval Pipeline to the Claude API | “Reply with JSON only” is a request, not a guarantee. Structured outputs turn the rubric into a contract the API enforces — and once the verdict is a typed object, the rest of the pipeline is a batch job and two ratios. | 8 min |
|
Aug 10, 2026 | Metagenomics: Reading the Life That Won’t Grow | For a century microbiology studied whatever would grow on a petri dish — a fraction of a percent of what was in the sample. Metagenomics threw away the dish: extract all the DNA at once, sequence it, and let the organisms stay uncultured. | 4 min |
|
Aug 9, 2026 | How Prompt Evaluation Pipelines Work | A demo is a sample of size one, and the qualities you care about — tone, helpfulness, groundedness — have no regex. That leaves another model holding the grading pen, which works only if you measure how often it agrees with you. | 6 min |
|
Aug 9, 2026 | Cascade or Native? What the Voice AI Stack Actually Looks Like in 2026 | Native speech-to-speech models beat cascaded pipelines on latency by seconds. What open native models have not closed is the reasoning gap. The cascade still sells a transcript you can read before the user hears anything, at a price the benchmarks make uncomfortably clear. | 19 min |
|
Aug 8, 2026 | LLM API Pricing Compared: Claude, GPT, Gemini, and the Chinese Challengers (August 2026) | Per-token rates across seven providers as of August 2026 — and the four structural differences (caching, long-context surcharges, modality coverage, output multiples) that move real bills further than the headline number does. | 10 min |
|
Aug 8, 2026 | Waiting, and Not Waiting | The Messages API is one endpoint with two delivery modes — and the difference stops being cosmetic the moment tool calls enter the picture. | 5 min |
|
Aug 6, 2026 | Stop Parsing Prose |
Asking an LLM for JSON in English often returns JSON wrapped in extra text: a preamble, markdown fences, or a trailing remark. json.loads() rejects all of those.
|
4 min |
|
Aug 5, 2026 | The One Thing Always in the Room | If perception is prediction all the way up, the self may be the invariant the hierarchy eventually notices in itself — and the loop that produces it is lossy, so it cannot be run backwards. | 7 min |
|
Aug 5, 2026 | Can You Invert a Recursive Function? | A function is invertible if and only if it is injective: distinct inputs produce distinct outputs. | 3 min |
|
Aug 3, 2026 | Built for Problems It Has Never Seen | Skill at a known task can be bought with data. Sample-efficient generalization to a novel one cannot. That conversion is the human niche, and tools are the physical record of it. | 2 min |
|
Aug 3, 2026 | Your LLM Has No Memory. Everything Else Is Engineering. | An LLM is stateless per call. What we call memory is a set of choices about what goes into the prompt, what gets stored outside it, and when it comes back. | 7 min |
|
Aug 3, 2026 | From Formants to Foundation Models | Every era of TTS moved the unit of generation down a level of abstraction — from rules, to recorded fragments, to parameters, to raw samples, to tokens. You can hear each step. | 13 min |
|
Aug 2, 2026 | LLM Agents from First Principles |
An LLM agent is a while loop with one stochastic step per iteration. Everything else — message history, tool dispatch, output parsing, turn budgets — is deterministic Python…
|
6 min |
|
Jul 31, 2026 | Explainability Is a Localization Problem | Four attribution methods on a misclassified MNIST digit and four classical decompositions of Fisher’s irises, implemented from scratch and checked at build time — set against one framing that covers all eight. | 14 min |
|
Jul 30, 2026 | Nvidia Bought the Team Behind the Library I Contribute To | Nvidia has bought Kumo AI, which employs most of the people who maintain PyTorch Geometric. This is what that acquisition looks like from inside the library. | 5 min |
|
Jul 28, 2026 | The Professor Who Let Us Break R First | Brian Ripley has just shared the 2026 Rousseeuw Prize for building and maintaining R. This is a note on what that work looked like from inside his statistics laboratory… | 5 min |
|
Jul 28, 2026 | Swarms in Worktrees: How Claude Code Agents Work in Parallel | Parallel coding agents sharing one checkout overwrite each other’s edits. Git worktrees give agents separate working directories over shared history, eliminating file-level… | 5 min |
|
Jul 27, 2026 | ‘It Works on My Machine’: The Ladder of Numerical Dependencies | Underneath numerical code sits a ladder of dependencies — architecture, driver, runtime, packages — and pinning one rung leaves every other rung free to move. | 4 min |
|
Jul 26, 2026 | Why the Bayesian Bootstrap? | Rubin’s Dirichlet weights derived from scratch, set against Efron’s multinomial counts, on S&P 500 and IBM returns and on MNIST — with every closed form checked against simulation at build time. | 76 min |
|
Jul 24, 2026 | The Poor Person’s Bayesian | Rubin’s Dirichlet weights, Efron’s multinomial counts, fifteen law schools, and the exact point at which resampling stops being inference on the cheap. | 73 min |
|
Jul 24, 2026 | Skills Ate Commands: What Changed in Claude Code |
Claude Code stores user prompts as markdown under .claude/commands/ (slash commands) or .claude/skills/ (skills). Custom commands merged into skills; the commands reference n…
|
13 min |
|
Jul 24, 2026 | Lost in Translation: How Math Tribes Speak Different Languages (And Why Epidemiologists Hate MSE) | The word calibration names different procedures in statistics, epidemiology, machine learning, and mathematics. Cross-disciplinary work fails when the same term is used… | 12 min |
|
Jul 23, 2026 | From First Principles to Interior Point Methods: The Physics of Constrained Convex Optimization | Convex optimization minimizes a convex objective over a convex feasible set. For such problems: | 16 min |
|
Jul 23, 2026 | LangGraph vs LlamaIndex: One Agent, Two Architectures |
Multi-step LLM workflows need control flow beyond a single chat() call. LangGraph models agents as graph traversal over shared state; LlamaIndex Workflows models them as even…
|
13 min |
|
Jul 23, 2026 | Training vs. Calibrating Epidemiological Models: A First-Principles Guide | Training: minimize prediction error (e.g. MSE) for dynamical parameters. | 46 min |
|
Jul 23, 2026 | Maximum-Margin Classification from First Principles: SVMs as Convex Optimization | A support vector machine (SVM) selects a separating hyperplane by solving a convex optimization problem that maximizes geometric margin. Soft-margin SVMs add slack penalties… | 21 min |
|
Jul 23, 2026 | What TDA Actually Builds: A Filtered Simplicial Complex, Not a Fancy Graph | TDA builds a filtered simplicial complex over a fixed vertex set — not a threshold graph alone. Graphs cannot distinguish a hollow cycle from a filled triangle; simplicial… | 19 min |
|
Jul 23, 2026 | Uses and Abuses of Topological Data Analysis: A Pragmatic Guide | Density methods (k-means, KDE, GMM) answer where mass concentrates. Topological data analysis (TDA) answers connectivity: gaps, loops, tunnels, voids. A filled disk and an… | 15 min |
|
Jul 22, 2026 | Two Ways to Expand the Space: Persistent Homology and Kernel SVMs on the Same Toy Dataset | A disk inside a ring is not linearly separable in \(\mathbb{R}^2\). Persistent homology (unsupervised) reports the annular hole. A kernel SVM (supervised) finds a curved… | 6 min |
|
Jul 22, 2026 | Topological Data Analysis: Finding Clusters, Loops, and Voids Across Scales |
Clustering output depends on a scale hyperparameter (k, eps, dendrogram cut height). Topological data analysis (TDA) indexes every scale at once via a filtration and records…
|
9 min |
|
Jan 8, 2026 | Thoughts on Unsupervised Learning | The unsupervised methods arranged as one family tree, with compression as the trait they share, and clustering as its extreme case. | 3 min |
|
Apr 9, 2025 | AI Engineer vs ML Engineer vs Data Scientist: Roles, Tools, and Code Quality | An AI Engineer, an ML Engineer and a Data Scientist do three different jobs, and the titles blur enough that a job advert, a teammate, or a piece of code can be hard to place. | 6 min |
|
Apr 9, 2025 | Cursor Is VS Code With the Model Inside the Editor | What I found when I installed Cursor to see what the fuss was about: the editor I already used, with completion, inline editing and chat that read the codebase. As of April 2025. | 3 min |
|
Apr 9, 2025 | Model Evaluation Metrics | Two classifiers with identical accuracy, one missing twice as many cancers. A metric is a decision about which errors you will tolerate. | 8 min |
|
Apr 8, 2025 | Classifying PDF Documents with RAG and LLMs | You can classify chunks or classify documents, but not both. The aggregation step you skip past is where the actual modelling decision lives. | 11 min |
|
|
Apr 7, 2025 | Apple Silicon Broke an Assumption the ML Toolchain Was Built On | Why Docker, PyTorch and conda each rub on an ARM Mac, and the native route that avoids most of it. As of spring 2025. | 5 min |
|
Apr 6, 2025 | Hugging Face Hub Python SDK |
Every Hub repo is a git repo, which means every unpinned from_pretrained is a dependency on a moving target.
|
6 min |
|
Apr 6, 2025 | Accelerating Transformers with Hugging Face Optimum | Exporting to ONNX is a compile step: you trade the ability to change the model for a graph a dedicated runtime can optimise. Here is what that trade actually pays. | 7 min |
|
Apr 6, 2025 | Transformers Library for NLP |
pipeline() is three objects behind one call — and fine-tuning is what forces you to take them apart.
|
9 min |
|
Apr 5, 2025 | Introduction to Diffusers by Hugging Face | A diffusion pipeline is four separable parts. Every way of controlling the output — prompts, inpainting, ControlNet — is an intervention on a different one. | 10 min |
|
Apr 4, 2025 | Hugging Face Datasets |
Why load_dataset returns instantly on a dataset larger than your RAM, and what that buys you downstream.
|
8 min |
|
Apr 4, 2025 | Efficient Few-Shot Learning with SetFit from Hugging Face | SetFit trains a classifier from 16 labelled examples in under a minute. On one GLUE task that beats the baseline by 21 points; on another it loses to always guessing. | 8 min |
|
Apr 2, 2025 | Snowflake Bills Storage and Compute Apart, and That Is the Whole Design | How separating storage from compute changes what a warehouse costs and how it scales, with the Python and SQL to drive it. As of spring 2025. | 4 min |
|
Apr 1, 2025 | Prompting Is Still Authorship, and the Checking Is the Cost | An honest account of how I have used AI tools to draft posts on this blog: what the trade bought, what it cost, and what changed when the corpus was reread. | 3 min |
|
Mar 31, 2025 | Airflow Earns Its Keep at the Third Retry | When a scheduled script stops being enough and a workflow orchestrator starts paying for itself: the handful of Airflow concepts that matter, and what each replaces. As of early 2025. | 4 min |
|
Mar 31, 2025 | Models Rot Silently, and Drift Is Not the Same Failure as Bias | Why a deployed model gets worse without changing, the two different ways it fails, and which of AWS’s two SageMaker tools watches which. As of early 2025. | 5 min |
|
Mar 30, 2025 | Soft Prompts vs. Hard Prompts | Initialise a soft prompt from real words and it sits exactly on the vocabulary. Sixty gradient steps later it is somewhere no sentence can reach. | 7 min |
|
Mar 27, 2025 | Exploring Vector Databases: Weaviate vs Pinecone | Weaviate and Pinecone are two vector databases. They store and query vector embeddings, numerical representations of text, images, or audio. That is the index behind semantic… | 4 min |
|
Mar 27, 2025 | PySpark Is for Data That Does Not Fit on One Machine | What Spark does that pandas cannot, how it keeps a distributed computation fast and recoverable, and the small example that shows each mechanism. As of early 2025. | 4 min |
|
Mar 26, 2025 | LangGraph Turns an LLM Pipeline Into a Graph With One Shared State | What a graph of nodes over one mutable state buys over a linear chain: branching, parallel work, and a workflow that remembers where it is. The 2025 tour; the API has moved since. | 4 min |
|
Mar 22, 2025 | dbt Turns a Pile of SQL Scripts Into a Project | What changes when SQL transformations get references, tests, documentation and version control: the dbt setup end to end on Amazon Redshift. As of early 2025. | 5 min |
|
Mar 21, 2025 | An Embedding Makes Similarity a Distance | What text, image and voice embeddings have in common, how each modality learns to place similar things near each other, and what the geometry does and does not promise. | 5 min |
|
Mar 20, 2025 | Hugging Face Tokenizers Library | A tokenizer’s vocabulary is learned, not configured — and when it is learned from too little text, it fails in a way you can read off the output. | 6 min |
|
Mar 16, 2025 | LangChain: Introduction | LangChain 1.x deleted LLMChain and ConversationBufferMemory. What replaced them is not a new API — it is the observation that neither needed to be a class. | 7 min |
|
Mar 16, 2025 | Parameter-Efficient Fine-Tuning with Hugging Face’s peft Library | LoRA trains 0.24% of GPT-2’s parameters and saves to a 1 MB file — the reason that works is a claim about the update, not about the model. | 6 min |
|
Mar 12, 2025 |
Evaluating NLP Models with the Hugging Face evaluate Library
|
The same prediction scores 0.0 and 0.96 depending on which metric you load. evaluate makes that swap one line — which is the danger, not the feature.
|
8 min |
|
Mar 11, 2025 | Databricks Is Managed Spark, and the Extras Are the Reason to Pay | What Databricks adds to a Spark cluster you could run yourself: notebooks on a shared cluster, Delta Lake’s transactions, and MLflow’s run tracking. Working notes, as of early 2025. | 4 min |
|
Mar 3, 2025 | A Docker Image Is a Stack of Diffs, and the Order Decides the Build Time | Why a machine-learning image rebuilds in seconds or in twenty minutes, and a model served from a container end to end. | 6 min |
|
Mar 2, 2025 | Kafka Moves Events, NiFi Routes Them, Flink Computes on Them | Three streaming tools that are constantly mistaken for one another do three different jobs: a durable log, a visual router with provenance, and a stateful processor. Merges three earlier posts. | 6 min |
|
Feb 25, 2025 | Data Types: Structured, Unstructured, and Semi-Structured Data | Different data types, their characteristics, file formats, and applications in modern data processing | 8 min |
|
Feb 21, 2025 | Quarto Workshop | An overview of Quarto, its features, and how it can be used for reproducible scientific writing, blogging, and more. | 3 min |
|
Feb 20, 2025 | Feature Importance After Clustering | Once clustering is complete, understanding which features differentiate each cluster is crucial for interpretation. This blog post explores multiple ways to attribute… | 2 min |
|
Feb 9, 2025 | First Job in Industry | Getting hired in the first job | 1 min |
|
Feb 7, 2025 | Python Books I Recommend, and How to Read One So It Sticks | The Python books I would hand to someone at each level, with what I thought of each, and the one habit that makes a programming book work. | 3 min |
|
Feb 6, 2025 | Reinforcement Learning Splits on One Question: Learn the Value, or Learn the Policy? | A return to reinforcement learning for someone who left it for a while: the pieces of the problem, the two families of method and why they exist, where the field stands beside generative models, and the papers that built it. | 9 min |
|
Feb 4, 2025 | A Method’s Name Is a Contract | What the leading underscore, the decorator and the double underscores each promise to the next person who reads a Python class, and what to call instance, class, static, helper and dunder methods. | 4 min |
|
Feb 3, 2025 | Retrieval-Augmented Generation Is Nearest-Neighbour Search Wired Into the Prompt | What RAG adds to a language model, why the retrieval step bounds the answer, and how a vector store finds the neighbours fast enough to matter. Merges three earlier posts. | 8 min |
|
Feb 2, 2025 | Conda Exists Because Scientific Python Is Not Python | Why pip alone cannot install the numerical stack reliably, what conda does about it, what it costs, and where uv and pixi have moved the line since. As of early 2025. | 4 min |
|
Jan 31, 2025 | Attention Is a Softmax Over Dot Products, and the Divisor Keeps It Trainable | How a transformer decides which tokens matter to each other: the three matrices, the softmax that does the choosing, an interactive look at why the scores are divided by the square root of the width, and the layer in PyTorch. | 6 min |
|
Jan 27, 2025 | Clustering Has No Labels to Tune Against, So the Metric Can Lie | Which clustering hyperparameters can honestly be tuned on a held-out split, what the label-free metrics measure, and a worked case where the silhouette picks the wrong number of clusters with a straight face. | 7 min |
|
Jan 21, 2025 | Markdown: What’s in the Name? | Why it is called markdown, and the design rule hiding in the name. | 1 min |
|
Sep 21, 2024 | R Fits a Model When You Create It; scikit-learn Waits to Be Asked | The same linear regression through both APIs, to the same score, and what the difference in when fitting happens rests on: S3 dispatch on one side, a class with fit and predict on the other. Either style can be imitated in the other language. | 10 min |
|
Sep 20, 2024 | The Test Set Is Spent Once | Why a dataset is cut into training, development and test sets, what leaks the test set before you ever use it, and how to make the split in the common libraries. Merges two earlier posts. | 9 min |
|
Sep 19, 2024 | Model Selection Is Natural Selection, and the Validation Set Is the Habitat | One analogy pushed as far as it goes: models as species, data as the environment, tuning as speciation, and the validation score as fitness. Where it holds, where it breaks, and the one thing it predicts. | 6 min |
|
Apr 22, 2024 | grep Searches the Working Tree, git log Searches Time | A real bug hunt through PyTorch Geometric’s repository, run in April 2024: two strings from a maintainer’s note, and the five commands that find where each one lives, lived, or never was. | 6 min |
|
Apr 11, 2024 | A Sparse Tensor Stores the Nonzeros, and the Saving Has to Be Counted, Not Read Off | COO and CSR on a mesh graph from ModelNet10, in PyTorch: what each format stores, why the obvious memory measurement reports no saving at all, and what a 700-fold matmul speedup did and did not compare. Run in April 2024. | 10 min |
|
Apr 9, 2024 | Make Is for the Commands You Type, CI Is for the Ones You Forget | A Makefile and a GitHub Actions workflow split a project’s chores by who has to remember them, with this blog’s own pipeline as the worked example. | 5 min |
|
Mar 3, 2024 | PyTorch Geometric Installs on Apple Silicon, and Its Test Suite Does Not | A March 2024 record of getting a developer install of PyTorch Geometric onto an M1 Pro: the wheels that just work, the C++ extensions that have to be built from source, and the test run that segfaults on collection. | 7 min |
|
Feb 9, 2024 | Post With Code and Plot | Let’s see if blogging with code and plots works here: | 1 min |
|
|
Feb 6, 2024 | Welcome To Synthetic Musings | This is the first entry in Synthetic Musings, where I write up what I am working through in machine learning, statistics, and the tooling around them. I’m Ravi (@project-delp… | 1 min |
No matching items













































































































