<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PyTorch on davethehuman.com</title><link>https://davethehuman.com/tags/pytorch/</link><description>Recent content in PyTorch on davethehuman.com</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026 Dave the human</copyright><lastBuildDate>Tue, 13 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://davethehuman.com/tags/pytorch/index.xml" rel="self" type="application/rss+xml"/><item><title>softmax</title><link>https://davethehuman.com/notes/softmax/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://davethehuman.com/notes/softmax/</guid><description>&lt;p&gt;

The &lt;em&gt;softmax&lt;/em&gt; function (also known as &lt;em&gt;&lt;strong&gt;normalized exponential&lt;/strong&gt;&lt;/em&gt;) is a generalization and extension of the &lt;a href="https://davethehuman.com/notes/sigmoid/"&gt;sigmoid&lt;/a&gt; to move from &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;binary classification&lt;/a&gt; to &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;multi-class classification&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It takes a vector of $K$ real numbers (&lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;logits&lt;/a&gt;) and &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;normalizes&lt;/a&gt; it into a &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;probability distribution&lt;/a&gt; consisting of $K$ probabilities proportional to the exponentials of the input numbers.&lt;/p&gt;
&lt;p&gt;For an input vector $\mathbf{z} = (z_1, z_2, \dots, z_K) \in \mathbb{R}^K$, the Softmax function $\sigma(\mathbf{z})_i$ for a specific component $i$ is defined as: &lt;/p&gt;</description></item><item><title>variance (statistics)</title><link>https://davethehuman.com/notes/variance-statistics/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://davethehuman.com/notes/variance-statistics/</guid><description>&lt;p&gt;In statistics, &lt;em&gt;Variance&lt;/em&gt; measures data dispersion around a &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;mean&lt;/a&gt;.&lt;br&gt;
It is a descriptive statistical measure that quantifies how far individual data points deviate from the mean of a dataset.&lt;/p&gt;
&lt;p&gt;Depending on the fact that the dataset represent a full &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;population&lt;/a&gt; or a &lt;a href="https://davethehuman.com/coming-soon/" rel="nofollow"&gt;sample&lt;/a&gt;, the formula is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;$\sigma^2 = \frac{\sum_{i=1}^{N} (x_i - \mu)^2}{N}$ for the &lt;strong&gt;entire population&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;$s^2 = \frac{\sum_{i=1}^{n} (x_i - \bar{x})^2}{n - 1}$ for a &lt;strong&gt;sample&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In numpy, it can be implemented as:&lt;/p&gt;</description></item><item><title>euclidean distance</title><link>https://davethehuman.com/notes/euclidean-distance/</link><pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate><guid>https://davethehuman.com/notes/euclidean-distance/</guid><description>&lt;p&gt;The &lt;em&gt;Euclidean distance&lt;/em&gt; is the measure of the true straight-line distance between two points in a Euclidean space. It is the geometric distance you would measure with a ruler, representing the shortest path between those points.&lt;/p&gt;

&lt;h2 class="relative group"&gt;The Formula
 &lt;div id="the-formula" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#the-formula" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
$$
d(p, q) = \sqrt{\sum_{i=1}^{n} (q_i - p_i)^2}
$$&lt;p&gt;In a 2D Space, for two points $P_1(x_1, y_1)$ and $P_2(x_2, y_2)$: &lt;/p&gt;</description></item><item><title>Dataloader</title><link>https://davethehuman.com/notes/dataloader/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://davethehuman.com/notes/dataloader/</guid><description>&lt;p&gt;The &lt;em&gt;DataLoader&lt;/em&gt; is a PyTorch data primitive that allows to manage how a &lt;a href="https://davethehuman.com/notes/dataset/"&gt;Dataset&lt;/a&gt; is loaded onto a model.
In &lt;a href="https://davethehuman.com/notes/llm/"&gt;LLM&lt;/a&gt;s tasks, it is usually included in a funcion with the &lt;a href="https://davethehuman.com/notes/tokenizer/"&gt;tokenizer&lt;/a&gt; so that the input data is already processed to be ingested by the model, e.g.:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;create_dataloader_v1&lt;/span&gt;(txt, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;						 batch_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;						 max_length&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;256&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; stride&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;128&lt;/span&gt;, &lt;span style="color:#75715e"&gt;#number of positions the input shifts across batches&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; shuffle&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; drop_last&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;, 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; num_workers&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; tokenizer &lt;span style="color:#f92672"&gt;=&lt;/span&gt; tiktoken&lt;span style="color:#f92672"&gt;.&lt;/span&gt;get_encoding(&lt;span style="color:#e6db74"&gt;&amp;#34;gpt2&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dataset &lt;span style="color:#f92672"&gt;=&lt;/span&gt; GPTDatasetV1(txt, tokenizer, max_length, stride)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dataloader &lt;span style="color:#f92672"&gt;=&lt;/span&gt; DataLoader(
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; dataset,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; batch_size&lt;span style="color:#f92672"&gt;=&lt;/span&gt;batch_size,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; shuffle&lt;span style="color:#f92672"&gt;=&lt;/span&gt;shuffle,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; drop_last&lt;span style="color:#f92672"&gt;=&lt;/span&gt;drop_last, &lt;span style="color:#75715e"&gt;#if True, drops the last batch if shorter than batch_size - to prevent loss spikes during training&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; num_workers&lt;span style="color:#f92672"&gt;=&lt;/span&gt;num_workers &lt;span style="color:#75715e"&gt;#n. of CPU processes to use &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; )
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; dataloader&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Dataset</title><link>https://davethehuman.com/notes/dataset/</link><pubDate>Mon, 21 Sep 2026 00:00:00 +0000</pubDate><guid>https://davethehuman.com/notes/dataset/</guid><description>&lt;p&gt;The &lt;em&gt;Dataset&lt;/em&gt; is a PyTorch data class that allows to manage how the individual rows are fetched and then loaded into the model by the &lt;a href="https://davethehuman.com/notes/dataloader/"&gt;DataLoader&lt;/a&gt;.
In &lt;a href="https://davethehuman.com/notes/llm/"&gt;LLM&lt;/a&gt;s tasks, it is usually included in a funcion with the &lt;a href="https://davethehuman.com/notes/tokenizer/"&gt;tokenizer&lt;/a&gt; so that the input data is already processed to be ingested by the model, e.g.:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GPTDatasetV1&lt;/span&gt;(Dataset):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__init__&lt;/span&gt;(self, txt, tokenizer, max_length, stride):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;input_ids &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;target_ids &lt;span style="color:#f92672"&gt;=&lt;/span&gt; []
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; token_ids &lt;span style="color:#f92672"&gt;=&lt;/span&gt; tokenizer&lt;span style="color:#f92672"&gt;.&lt;/span&gt;encode(txt) &lt;span style="color:#75715e"&gt;#this tokenizes the entire text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; i &lt;span style="color:#f92672"&gt;in&lt;/span&gt; range(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, len(token_ids) &lt;span style="color:#f92672"&gt;-&lt;/span&gt; max_length, stride): &lt;span style="color:#75715e"&gt;#sliding window&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; input_chunk &lt;span style="color:#f92672"&gt;=&lt;/span&gt; token_ids[i:i &lt;span style="color:#f92672"&gt;+&lt;/span&gt; max_length]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; target_chunk &lt;span style="color:#f92672"&gt;=&lt;/span&gt; token_ids[i&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;:i&lt;span style="color:#f92672"&gt;+&lt;/span&gt;max_length&lt;span style="color:#f92672"&gt;+&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;input_ids&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(torch&lt;span style="color:#f92672"&gt;.&lt;/span&gt;tensor(input_chunk))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;target_ids&lt;span style="color:#f92672"&gt;.&lt;/span&gt;append(torch&lt;span style="color:#f92672"&gt;.&lt;/span&gt;tensor(target_chunk))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__len__&lt;/span&gt;(self):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; len(self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;input_ids)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;__getitem__&lt;/span&gt;(self, idx):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;input_ids[idx], self&lt;span style="color:#f92672"&gt;.&lt;/span&gt;target_ids[idx]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Among the common args we find the &lt;a href="https://davethehuman.com/notes/batch-size/"&gt;batch size&lt;/a&gt;, the &lt;a href="https://davethehuman.com/notes/stride/"&gt;stride&lt;/a&gt; and &lt;a href="https://davethehuman.com/notes/max_length/"&gt;max_length&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>