{"id":2030,"date":"2025-11-06T11:42:56","date_gmt":"2025-11-06T11:42:56","guid":{"rendered":"https:\/\/philippeadjiman.com\/blog\/?p=2030"},"modified":"2025-11-22T18:35:02","modified_gmt":"2025-11-22T18:35:02","slug":"gpt-from-scratch-2-the-training-set","status":"publish","type":"post","link":"https:\/\/philippeadjiman.com\/blog\/2025\/11\/06\/gpt-from-scratch-2-the-training-set\/","title":{"rendered":"GPT From Scratch #2: The Training Set"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Welcome to Part 2 of our <a href=\"https:\/\/philippeadjiman.com\/blog\/gpt-from-scratch-series\/\">GPT From Scratch series<\/a>, inspired by Karpathy\u2019s&nbsp; <a href=\"https:\/\/www.youtube.com\/watch?v=kCc8FmEb1nY\">Let&#8217;s build GPT: from scratch, in code, spelled out.<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links to previous and upcoming posts of the series:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/10\/24\/gpt-from-scratch-1-intro\/\">Part 1: Intro<\/a>&nbsp;<\/li>\n\n\n\n<li class=\"\">Part 2: The Training set (this post)<\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/10\/gpt-from-scratch-3-the-bigram-model\/\" data-type=\"link\" data-id=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/10\/gpt-from-scratch-3-the-bigram-model\/\">Part 3: The Bigram model<\/a><\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/14\/gpt-from-scratch-4-the-mathematical-trick-behind-self-attention\/\">Part 4: The Mathematical Trick behind Self Attention<\/a><\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/15\/gpt-from-scratch-5-positional-encodings\/\">Part 5: Positional Encodings<\/a><\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/19\/gpt-from-scratch-6-coding-self-attention\/\">Part 6: Coding Self-Attention<\/a><\/li>\n\n\n\n<li class=\"\"><a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/22\/gpt-from-scratch-7-building-a-gpt\/\">Part 7: Building a GPT<\/a> <\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In this post, we\u2019ll focus on building the training set for our model. Although this part might sound less exciting than building the model itself, it is still a crucial (and in my opinion very clever) part of the whole process.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Framing the prediction task<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Before building a training set, you need to frame the prediction task in a proper way. The core capability of chat bots is to be able to predict the next word (or more generally token) given the previous words of the sentence. For example:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"254\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image.png?resize=1024%2C254&#038;ssl=1\" alt=\"\" class=\"wp-image-2031\" style=\"width:478px;height:auto\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image.png?resize=1024%2C254&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image.png?resize=300%2C74&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image.png?resize=768%2C190&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image.png?w=1114&amp;ssl=1 1114w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To us, it is obvious that the next predicted word is very likely \u201ccold\u201d. But the goal is to build a (very) strong model that will be able to do that. Why does it matter? Because once you have that capability, building a very strong chatbot is a matter of \u201cjust\u201d an additional (tricky and important) step around teaching your model to answer questions using reinforcement learning. Let\u2019s keep that for a separate post or series. For now, we\u2019ll focus on building that core capability.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Getting training data<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Often, getting proper training data with labels can be a very costly process. If you e.g. build a model classifying images of dog vs. cat or cancer vs. benign, you\u2019ll need a lot of human labeled data.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In our case, since we want to train a model to guess the next word, we simply need to get well formed sentences (a lot of them), hide the last word, and train the model to guess it! Where to find a lot of well formed sentences? Well, wikipedia, any book, blogs (just like this one), you name it. Finding data here is not really the issue.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"585\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?resize=1024%2C585&#038;ssl=1\" alt=\"\" class=\"wp-image-2041\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?resize=1024%2C585&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?resize=300%2C171&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?resize=768%2C439&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?resize=1536%2C877&amp;ssl=1 1536w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-10.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To illustrate how to build the model, Karpathy is taking all Shakespeare literature as the basis. And for the sake of simplicity, the model is built to predict the next character (and not the next word), but the principles are exactly the same, and the end result is equivalent given that by predicting the next character over and over again, you end up generating words and sentences.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">One Sentence, Multiple Training Examples<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s consider the sentence \u201cToday I put my coat on because it is very cold\u201d. We could consider it as one training example, as in the picture above (i.e. giving the whole sentence except the last word as the context, and tell the model that what it needs to guess is the last word), but we can actually do more. Consider this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"826\" height=\"840\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png?resize=826%2C840&#038;ssl=1\" alt=\"\" class=\"wp-image-2032\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png?w=826&amp;ssl=1 826w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png?resize=295%2C300&amp;ssl=1 295w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-1.png?resize=768%2C781&amp;ssl=1 768w\" sizes=\"auto, (max-width: 826px) 100vw, 826px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">With only one sentence, we end up with not only 1 training example, but with 10!&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That\u2019s a very clever trick. Now let\u2019s see how we can use it to actually implement a training set on real data.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Encoding Shakespeare<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">In his video, Karpathy works with all Shakespeare literature, which is one long text file that can be found <a href=\"https:\/\/raw.githubusercontent.com\/karpathy\/char-rnn\/master\/data\/tinyshakespeare\/input.txt\">here<\/a> .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s print the size of this text and the first few sentences:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"669\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png?resize=1024%2C669&#038;ssl=1\" alt=\"\" class=\"wp-image-2034\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png?resize=1024%2C669&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png?resize=300%2C196&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png?resize=768%2C502&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-3.png?w=1102&amp;ssl=1 1102w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now, the very first step is to encode this into tokens, a process called tokenization. For the purpose of illustrating how to build a toy GPT imitating Shakespeare, Karpathy uses the most simple tokenization possible: encoding each character with just a number.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, we can see that there are 65 distinct characters in that file, (see below), so the tokenization process will be about transforming each of those characters (including space) into its equivalent number between 0 and 64.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"304\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png?resize=1024%2C304&#038;ssl=1\" alt=\"\" class=\"wp-image-2033\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png?resize=1024%2C304&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png?resize=300%2C89&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png?resize=768%2C228&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-2.png?w=1118&amp;ssl=1 1118w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">From there, Karpathy provides the simplest yet working tokenizer by providing the encode and decode lambda function below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"239\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?resize=1024%2C239&#038;ssl=1\" alt=\"\" class=\"wp-image-2036\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?resize=1024%2C239&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?resize=300%2C70&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?resize=768%2C179&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?resize=1536%2C358&amp;ssl=1 1536w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-5.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can see how each character is encoded into a number between 0 and 64 (corresponding to the index of the relevant character in the list above), and then decoding it back to get the original sentence.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As we\u2019ll work with PyTorch or TensorFlow to build GPT, we\u2019ll first need to convert all that textual data into a long tensor containing those encoded numbers. If you don\u2019t know what a <a href=\"https:\/\/www.tensorflow.org\/guide\/tensor\">tensor<\/a> is, for now you can simply think of them as a generalization of a vector to N dimensions. So in our case, our tensor for now can be seen just as a long vector of integers, as illustrated below.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"268\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png?resize=1024%2C268&#038;ssl=1\" alt=\"\" class=\"wp-image-2038\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png?resize=1024%2C268&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png?resize=300%2C79&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png?resize=768%2C201&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-7.png?w=1260&amp;ssl=1 1260w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">As a reminder, this is a very naive encoding (or more precisely, tokenization), and in practice, this is much more sophisticated (another great video from Karpathy details it <a href=\"https:\/\/www.youtube.com\/watch?v=zduSFxRajkE\">here<\/a>) but this will surprisingly be more than enough for illustrating the implementation of GPT from scratch.&nbsp;<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Generating (a lot of) training data<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Now that our data is properly encoded, let\u2019s see the implementation of the cleaver trick we described earlier.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">First, let\u2019s split our data into training and test data. This is done simply by taking the first 90% of characters of the <a href=\"https:\/\/raw.githubusercontent.com\/karpathy\/char-rnn\/master\/data\/tinyshakespeare\/input.txt\">long text file<\/a> of Shakespeare literature as the training data, and the rest as the test data<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"914\" height=\"158\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png?resize=914%2C158&#038;ssl=1\" alt=\"\" class=\"wp-image-2035\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png?w=914&amp;ssl=1 914w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png?resize=300%2C52&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-4.png?resize=768%2C133&amp;ssl=1 768w\" sizes=\"auto, (max-width: 914px) 100vw, 914px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And now the heart of the implementation of the clever data generation trick.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The goal now is to generate one batch of data for the training set (see older post <a href=\"https:\/\/www.philippeadjiman.com\/blog\/2023\/12\/23\/deep-learning-gymnastics-tensor-indexing\/\">here<\/a> where I describe how batches look like in general). So here\u2019s Karpathy\u2019s simple and elegant code for generating the training set:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"333\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png?resize=1024%2C333&#038;ssl=1\" alt=\"\" class=\"wp-image-2037\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png?resize=1024%2C333&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png?resize=300%2C98&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png?resize=768%2C250&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-6.png?w=1334&amp;ssl=1 1334w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s understand what is going on here:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">First we decide the batch size (how many examples we want in each batch) and the block size (how many tokens we want to have as \u201cthe context\u201d in each example).<\/li>\n\n\n\n<li class=\"\">Then to create a batch (of size 4 in our case), you take 4 totally random numbers in the train data, which will be the beginning of each of your example of the batch (the ix index) and you stack together:\n<ul class=\"wp-block-list\">\n<li class=\"\">The 4 block_size (8) characters (4 x 8 characters)<\/li>\n\n\n\n<li class=\"\">The same thing but shifted by one<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li class=\"\">This will create two tensors of size 4&#215;8 each <img decoding=\"async\" loading=\"lazy\" width=\"203\" height=\"22\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAeoAAAA0CAYAAABFLnvRAAAQAElEQVR4AeydB3gUVdeAzyRAAAVCE5AQkSJ8KIhSBFQMRQRBPlT0QUEFK+oPomJXBAtiR1E\/O2DDRlORpoIoAopKL4I0pYgiobeQ\/PPezZ2dLLPJJtndbJLLw9nb25mZe+q9iTtw4ECGAYMD8w6Yd8C8A+YdMO9AbL4DcWL+GQwYDBgMGAwYDBgMxCwGChehjlk0mokZDBgMGAwYDBgMRAYDhlBHBq+mV4MBgwGDAYMBg4GwYMAQ6rCg0bMTk2kwYDBgMGAwYDCQbwwYQp1vFJoODAYMBgwGDAYMBiKHAUOoI4fbwtWzma3BgMGAwYDBQExiwBDqmHwsZlIGAwYDBgMGAwYDPgwYQu3Dg\/ktXBgwszUYMBgwGCg2GDCEutg8arNQgwGDAYMBg4HCiAFDqAvjUzNzLlwYMLM1GDAYMBjIBwYMoc4H8kxTgwGDAYMBgwGDgUhjwBDqSGPY9G8wULgwYGZrMGAwEGMYMIQ6xh6ImY7BgMGAwYDBgMGAGwOGULuxYeIGAwYDhQsDZrYGA8UAA4ZQF4OHbJZoMGAwYDBgMFB4MWAIdeF9dmbmBgMGA4ULA2a2BgN5woAh1HlCm2lkMGAwYDBgMGAwEB0MGEIdHTybUQwGDAYMBgoXBsxsYwYDhlDHzKMwEzEYMBgoKhjIyEiXowcOSHpaWlFZUr7WkX7ooBxOTc1XH\/ltnHH0qHomGenp+e0q6u1jhlBv3LhRVqxYoeCff\/6JOiJiacDt27crPICPTZs2xdLUzFwKEANH7Y1m9erV6t1YuXKlHLAJQQFOp8CH3rNnj8IF38natWsLfD7uCfw4eJBMbHCKTKhzsiIO7rLiFt\/xy0KZUL++fNaksfw5dUqklp9tvxDpyc3PUM\/k+xuuzbZuLBbGBKGePHmyNGzYUJo1a6bg5ptvjkVcRWVOW7ZskZNOOknhAXw0aNBA2KCjMrgZJKYxcN9990nTpk3Vu3HmmWfK6NGjY3q+kZwc30Tt2rUVLvhOGjduLDAxkRgzIyP3vabt2+80Sk8\/6sSLYyR11Spn2bvWrnHiUY1YlqTt2KmGTNu3T4W5\/cnLe5DbMYLVjwlCfcIJJ2SZX3GWFI4\/\/nipWrVqFnykF0JVTZYFFLHExx9\/LGeffbbMnTs3qiurWbNmlvEOHz6cJV0QiSVLlkhKSoq88cYbUR0+Li5OIM7uQcONjx3\/WnLHgyVk0AMl3MOEFE+o4v+GS5Y9LqQ2VEpduUJm9bpMfv\/wA5JFAuJLl3bWYcXnHpdO43xELPt9KVG5ouqhTAC9UZk5\/Hw0IV5SesbL4qVhIpk5jBdYXDCjBsyidevWsnfvXrn11lsDSopfsnz58oK6+\/333y9+iy8kK37nnXfkl19+kWnTpkV1xrfddpukpqZKfVuNGNWBsxnsm2++kQULFsirr76aTa3wF1mWJbNnz1bPIfy9i8Ab3z0sXt74RqRWjdyL1KUrV1bTKp1sM1f2XFUihJ\/t8+fKjh\/my7r33guhduGoUqVZS6l12cVyUp8rpWb7DgU26eNqJqmx3UyUygjhp2oVkV+2WtL7zjj5408rhBbhrRIThJolxcfHS2kX50VecYYyZcoU5+XH9Nq1huPgwYNRn2dCQoKULFky6uMGGzAjUx+IvThYnUjmH3dc6NJqbuYxdlwJ+fgnX4seXXNPqBMq+Qj1cUm1fJ2E+Jtx1DdWXtWzIQ4T1WrHn5QsZz37orQY\/qRUaPifqI7tHqxs0okqmVDFproqFvrPua2PSiNbSbJxr8iTo6KvFShgQh06okxNg4FwYiAtLU3Wr1+v1Ne\/\/\/67HDlyJJzdF6q+duzYoey7CxculOXLl8uuXbsKZP77bNvh0qVLBfj3339FMwFM5tChQwQhAfbrNWvWCGp5NHUhNXJV2rfPkoEv+zKubC1Sr07uvYRLVcxUs9ao7usoRn7T9u+XncuXypEQnjEOWPv++ENQx\/+7ZJHs37pFyCuopRzZu0f+XbZE9m\/eLBmoPHI5kYRMc0RCpUq5bCk2cywyoLePiRr7XYasXBWX6z7y0yAso7311ltyyimnCFKghuTkZOWRyeQWLVqknD50GWFlWzX05ptvUuwJfGzjxo2TAQMGqLb017t3b3nuueeEj9izUQFnYiO74IILsuCBtTJ3Ng49vZdeeklYP2UawN8f9keh6wSGc+bMEZyJUmx7IG27desmQ4cOlZUrVwZWDVsaFTzPLjfw119\/hW38wI4grmPHjpWrrrpKwCl4uOKKK+Q9W03IRt6kSRMH9zgYeW3SbN4XXnihlCtXTho1aiQdO3aU0047TTA5XHbZZRLMe3j37t0CQec5QtiYG975pAOBfMqjARDVF198Ua655hqFE3Bw0003ybvvvpst8wEuX3jhBaF+UlKS4KR27rnnSvPmzaV69eoCjla5nIDca0GTAJPDujfbmyZl4IR0IPAOuQkudd1A2YcffqjmUcWWdFq2bCkA9vjTTz9dqdTPOussSUxMzFHNzTvwxBNPCH4erIt2+Huwh\/D83ONmF58yw78t9ujs25yzq+9VVr5uXZVd8dTGKszuJ\/3wIYEg7tmwTg5u36aqHkrdKaQDASIlmVoMVTHz56D93U3v3FE+Ta7lALZuiul\/7fvvyJxrr5ZJDRvI110ulMmNT5O5\/a8XL4K3a\/UqWXDnQBl\/cm2ZenYb+cre077pdpF8aT8H8ugrIwfGdumzT8mkM5o4c2FepHf\/5ncsY26BsOPXX2Rqu\/OcdouHPyJ7fl8js\/pcIZPt7\/WbC7vKl61byeRmTWXLt7ZdIrCDbNIVG52qSivUq6fC3P5075LuNPnfmHgnHo2I\/43Mx2jLli2TQCLz999\/i\/7Qt27d6hBtPcx+m7P76adM3ZLOzAx\/++03YdO89tprBWLO8Qv6mzBhgjzwwAPKRjdjxozM2tELchoJQg1BDazH3PWGRtmGDRuE9RPXAP7w+NZpd\/jQQw8JDMDIkSOVPZC2X3\/9tTz55JOC9y8bLoyNu01+4xAlPM7xH8gNQPzCPRfWwoYPUe3fv798+umnAk7Bw6RJk+SGG26QFi1aCESCuoB+Z4gDEIRhw4YJm\/esWbPIUlC2bFkV8vPFF18oByWYAdIatm3bJtWqVVMEHQIAsacMpzLSgYDXPu8wdSIJvGus+5577hHmAk7AATb0G2+8UTl5BfOEhpDfe++9WXDmnis4OuOMM8SL6YCQ8pxZ98svv6ya8SxIBwLv0AcffKDqBP5A3C+++GLp16+f5zxYy+23364kY9rq\/YS4F8BoPPLII8cUsYdcffXVx+R7ZSCovewyD5\/dyr85e9UPlgeB7rlxkzS4\/sZgVZz8md27KoI4ve15subVN1Q+HsqkAwEitXHyBFXH\/XNk727Zs2K1O0vZug\/+vV1m9e4li+57QLZ\/5X\/vqbj1y+ny1\/dziDrAeedZvS6XPz6Z6OQFRuhr5RuvBWZnSe9YvNjxstYFrOmgrb3Raa\/w8I5\/ZN\/v65wi8DG9XXvZMed7J48Iff1w1TWyfd5ckiFB3Sv7CM+kSvOWIdUPrFS+XIZcc66lskfPia5UHRZCzQb41VdfKa5YrcL+wfGFj9COKiLzyiuvEFVwySWXKJUjhEdlBPxAtKZOnapykQ5wVEGSRookk03hv\/\/9r\/z4448kYwbg5CEQDz\/8sDOnDh06KFXeeeed5+QhCc+ePdtJs+kttl9siIiT6YpAiEmy\/meffVZJGRAs8oB77Q1Xb5ikwwFI+nnpBykXj9y8tA3WBrU0jBtOS9SBGDz22GNKu3LLLbeQlWWj532EUJ588smqjB+c80aMGEFUedVDPDivD7GAwL3++uuiiTa4nT9\/vqrLD7jQZaRzAuqWjoK\/Bd8I3wrj8Q6g2QIvvE\/MEYe3Nm3ayM6dvmMp5GlITExUURzTYPi+++47panaYDORaG5Uof2DtG4HWf4jgWfJyCFRoUKFY2rAOA0cOFCmT5\/ulD311FMyc+ZMgUlAMq5VK6t9F0neqRwkwnpg6BEewI\/GBeN8\/33Wzd6ri7kL4gWnIcr6tbWEzZl4niBEJ7IyJ\/psp6GOUapc+WOqlqtbXzp9O1va2Yzrfwbf7pR\/16+v7FywUKWTr+wlrV57VRrdd6\/g5AYkNmioyvSPVaqUJCT61PY4f7V5603pau+zl9imhHaTJkq5Rg1U1RUjnpSD\/\/yt4l4\/Z496RVImjJeUTz+RNu+O9arimVe9fUfpOG2aJPXonqW8fv8bpMPUL6XT7FnSZNgQp2zx44878ZAiIT6TYH11bOvXsEyeGhbyGWyoLPlhGQm1IcdV+Bg0sYG4sDkyGpvm4MGDiQrEhg0FSZANUGV6\/KCy+vnnnwVijlqPs9WffPKJkhx09euvvz7mLn2AOAwaNEgRA+Y5b9484fiZZfk4MfIg6O4jaGyuqL4pCwaYAVg\/hAl8PP\/88wJ+wBNtkKqySk\/k5h1OtDcPTAxoQ3IDMCqW5V9r3mfgbwkR1VLs\/fffr5i8O++8U3gnYFwo03igFYTcvcmjzUDqpox6EGGYSO2IxPNAnf75559TRcHll18uEBMSEJq\/bNUihB2A+JFPn6QDASkU1Tx1Ig0wgjx3mMMrr7xSwAvvHO8DY8PUgjPibmD9rAncQTBRefM9ojlAg9OuXTtVnb5UxPUzZcoU0WumLkXgVee5Q1TzfPPUccP48eMFgkoez2vjxo3KzHXOOedIq1athG\/o22+\/FfdzlBz+QaQ5MtelSxepa6ueU1JSxM1oYMLJoQtZtcb\/7nZK8W\/KObXLT\/m5b42Vi1f\/pqDRvXerriCiOs8dXmpLmzU6nK\/qBP6UP7muVD6zmSQ29Kl4Kd+1ZKlUbtNKutnay5YjnpakLl2l0c23StfvflBQulp1qjlgWXHSefpMgTDj\/HXi+RdImeo1JC6htN13c2n2+BNO3b0b1jvxwEhJmzlDcq3SspVUbdYisDhommNUibaK+ngXk9308cfk9PuHCFqK8nXqySn9bnAIOetL278vaH\/hLmjV3H8mfnkU79gJC6HWyEhMTJTPPvtM3BvZUNuOChFnw+DjRy0XirTx9ttvKxui7luHF110kejNAdUYH6Yui5WQ9WnpjXUHqlIhAOCF+bJJodYmHgyQlnr06HFMMdIC+NQF2Pp0PBwhGzfPNDdQokSJcAydpQ+9ocMEQnQCx2CDDsSxuwM3sYHxgwlxl+s47y0EmjRS9p9\/\/klUAWNC2IGEhASVR0g6EDjBoCpE4Yfzy9h23UOVsqUivhHWQ\/6YMWMkNTWVaBaAwYZ4YUqAseadfOaZZwSmEOaFypQTusGyLNFr5h2hjHde57lD5kJ5IKCq13m8wzCzOq3DGjVqKIm7bKZ5Qoe6PDBkzfgeuPNhQHQabYGOBws3+R+5JCVFh1BbliXxZcr4oJTv3YovmeBL6\/zM0Mqlx\/8JHdtJ29HvSGkPggxRFo9\/SNVphw\/L1jmzZN0nH8mKn7qgpgAAEABJREFUV0bJ8lEjZe07Y2wb+nanhbKXO6nIRer2vuqYzqvbmkqduf+vbToa8bB6Nf878WsU724JK6EGS3z83DQGUSaNWg1ixabBx6k\/bMqCAR8k9shg5X369HGK8FJ1EjEU6dmzpyMNsAG6HZtmz56tbM1MF5taXFz2jwEnOup6AVID0gxlv\/76K0FYADXj47ZaCWkrN\/Daa9nbroJNLlg+9u4ffvhBFV966aUSjAi2bdtW1fH6wZtZ5w\/NZBxhHr2Ad1TXzckmqusVVNi3b1+BmHmND57QOOgytFo6TgiDm2JLnPgfoE2AGeRbhdhdd911orULfLvUDzfgY0GfMF\/YsYl7ARoqbPEw7l6SubsNDJs7TTzBZqp0O3xIyMsOftvgL61SMd2fKKSxNi\/9TxH8UKeP49nyF56Tz049Veb2uVp+uXOwrBjxlKx8+llZ9OBDMv+m\/k5X6Uf90qWTGeZIlZS2gpQd2G2lxk38WWnRvU+9bR3f0BzV2rXL8iUi\/Js9hcjj4HDjcObu5nws5LvzgsXdXLBXHTxCdX7gBqTzCzpEkkClzTzY7HDeIY40PWzYMKLKEaxTp04qnt2Pe71e9TAjkI+dkTAcgLaC+SOx5QZQWWJTDscc6MNtIkCyJ88LIEwweF5lOMbpfNaF7TYY6HqEqLwJYxXq2urd7OaGU5suX79+vY4KGgYYYW3zh8DhtIVdmGeOCj0YLp1O8hHBA5tvgi5OtQkCYXZAHbz7c9o\/eAe8+uFb9Mr3ylvuItSVfKZar2qFJq9ELm5Fy8hIl5+HDpGVzz7vrC\/58kul0b33yOmPPiINBw2Uimc1d8qiEYkr4e1dHRdfKhrDe45Ru4Y\/e8vWQkyocXDp3LmzfzV2DJUl3pd2NMf\/OR05wgaoO8mJiOl6BRFiB9Q2tgcffFB5erulaQi2ZeX8oN3r9VoHdmHyA69UJC+vUK9ePcGvAM\/73AAMWjgv5GBz1hoDiGuw9eAxrzf\/wDpugoW2h9u0sgMkOJyR8G4O7MuX9v1yxMkXK5hfPOGzGxlvdV2O7VnH0SroOGYFHBmHDx+u7MLYuPEhQbrWdUIJ0cCEUo86qKc1IxDsOBz1og2cekJK0uOWLu1Xc+q8aIVHjxyK1lDOOKkrlsvG9z5Q6RO7XSj\/XbpMWj4zUhrd8n9S\/5p+ctodd0mHbLzBVcNi8GMraZxV7j3gRCMaCbtEzYaJgws2PmyoSLzdunVTixgwYIC4vb9VpscPbXGU8ihSWe6rG3MiTkOGDBHO1GpAxac6icIPBEtveBARzvtCnBkalR94Ip4TaDWkVz1U\/zBGlOVEWKgTKmCiePTRRwVv8txAJK6B1WYUvP+9bKYZ9g7Lsb1ga3O\/I9hPUfdmBy1atFDOSMH6wx5LWU4MFHUiCThr4qwVbAxsz7pMq5dhLmBEyOdkBo5XlnUss8h3S52cANs9dfhmCUMBy7Kkffv2qipzyYnhwPzBe06oGkXox56WaLUmQ6RGSa3JWBriMm3QBzdt1llRC3cuX+6M1ezR4YJDmJORGeG8dma02Aab\/WZ6qVYlOmgIK6GGg0eShnAgBXEuFYkStW+PHj3UiuDYcVxRiWx+OFtJf4FVuLUIz2edD8HT8cAQ4vj000+rM9xInUCdOpkGhsDKEUp3795dnfumezZGrW58+OGHxbKO3SCpFwh33XWXuO2suhzvWs7L6jSXVOh4UQqR7PV6ILD81SjeMa6tRMrGdp2dIx2EV7fH3u5Wp+t8HXJcC3voyJEjlQZE57vDChUqqCSmBi\/iQf+cgEB6h4lQlSPww\/sNbhgvsHuOn2l7O9+ItmW75xPMp4F5jxo1KrBLz7TbHOFWr+vK6enpyh9j3Lhx6j5\/na\/3A9KDBg0KenoDWzrnuTGH6fXQJlLQyHdPieq+IAh1yXLl1Nj8cAkKoRsybPX0jkW\/yqbJEyUtzN7O6a4rcfes\/909rIof2b1bFj50n4oX55\/lG\/yrr3ZCdLQuYSHUbBhsmNhbsQGyDKRHvTkggXCciHwAqRZ7mPZEzbAlIrhqNl\/KAfrBNgVRZ9PjTCTSsVtqDOYtSnsgcCNC3Yb9jbJoAXYz1Iru8XCsS0lJcWdliSOdBEo0XObA+VbwwGUvSLlISeCdxhwVyq5P6hRWQCLGsU3PH0aN42x4CuMQBk50mVeIZod3jjKYNfA0a9Ys56pMbKakcb7ijDBaAXDtJb3TBzdmEfKceLYc\/+J9\/eijjwRGoFKlSgIh6tWrlwQ+R9rlFXCGYhzG1X3wnXGkCWYYdT6qbJzDcAjTddwmp5K2xAbhpgxpFrzgrIcKGk0Vdxwwb8o1gAf3t6nzCXkOhMDdd9+tzrNTl2eCYxp\/vhZ8Yz6ZNGkS1RTwHSLNk6Auc2J89oGtW7cKZ55ZB7Z01kw9vZ8QB3huSNrEAeJo9IgDMFG05fmQxouf50E+aS+oc5I\/9++\/\/fFoxcrV8XMKi594TLiZ7MC2rbLl229k2XNPy7T27WSWzfz\/OGCgbJ4+zZkWRBvVNdeD7l631skn7YZdq1YGvQa0wimnOO1+fvB+2TB5gj3+RqHf1W++LlPOO0e2TZvp1Nmzfp3sXrNGjroIvNh7OQyGe8ydK5Y5bXavXauuMNXl9H30gF9\/DC3Am3z\/Zp\/7\/aHt\/8iu1ask\/ZD\/Xn0Yhl2rVzp9pq5aLdzk5mREMHL4sCXaPNKoqkhCQiEh1Lz0SM1smHwUGkccOdI3j3HhAt6buowQb+cmTZrYzzVD4OAhOm6Omc0VBoCNhE2PDQTpmLYANl88q4kHA5xm3GVsHNg83XnRiLMhsR49VnbSNJtJcnKysG5dv2rmn71EygMPXPaCJAV+qMORNZyAiBdVuOOOO2TixIkCsxW4Rpyhcrr8BiLCO0lbzg6jfeCqTFT82G9JjxkzhmIFEKtmzZqpeOAPpw7084RQY8\/nXe7bt2+WP\/cI8QmnBgc\/D8ZxE2rmBvOBZqVr167CCQG3yps486OehqFDh+qowAhjgoEZwqcCokmhNjcQR4sBQYaIknYDkq6+9QsNGvOjLu8p\/goQberz3GBQiQOWZSkzGDgizd7B+A0aNBBwdv7556sb6CgDYDZSUlKIKmBDZ09hHJVh\/6CFw8FOaxhwgmQ+WovF2mCy6Muu7vm\/di3\/xrvg57DIMZ7jBMus1OR04aIRyrd88aVwM9mUli2FW7hWjXzRubWrROWKUtl1Pvnb3r3kq86d1fWgy4ePoLkCrgt1w8xOnWSjLY2rwoCfKi3OkiopbVXunhWrZeGA2+zxz1H9Ln3kUUnbsVMqNmsqjE2l1S+Mkhkd2gvXhZIGtv80X92y5h5zTs\/LKVKw6IEH1Rx1OXNePOJxVcbPlhnThdvXNn08nqTsWrJUZtrvwqq331LpDFujAMMw7\/rrVZqfH2+9VT63acmRfXtJRhSWrPBrQZv7+ZqIjknn+X4TOVqEtEdnboB4swmSx0fKB0PcDbSzLEvdUezOpy3SARsibd1lfOyoHLFJWpYfae46Os6HqeOEbKSEBQHaE5pjRKw72BwSExOdY126zuzZs2Xo0KHOJSo6HwI1evRoQZLjWJzOL6ohZhWkrUWLFqnLMiDcECk0JzA3et28kzquQ95F6mPX1YyPLtMh+fgQQMjBK0d7dJk75Nwyx4tgFAPfT9L4YnDDFu8wEqy7bX7iaJjc7ZH8wQXvlDufOIwG3u4Qb9JugOBxeQ7rdecTx59k8eLF6v50dznfJGujjhvQGOF3ggbCXV\/XYR6ovSHYEGCdTwijBB5Rs3v1TR0YUhz7YEBIa7Asy7Fz6zxCGCiNc7Qj5AVCsHzqNTnVfyRr\/Ew\/0aYsGsBRpOaPPSH\/GXyHuj0scMzkXpdJ6zfflIt+WCDH2wy9Lq90xpk6mmOYULmyZx0rPl5a28xA7av7HFNeOrmmNH1iuLT\/dJKcdvsdWcrdfyGsdNUTHEKepVI2ibJJSU5p2aSaTlxHYAzKVqumkpYVJxU8TgpUbtNK4uJLqDqR\/Jk1x09zup4fvfcj34TasiyZNGmSsjHByWpAxcQfOwBpbHhwtbpMh2yalHO8SOcR0hY7IBwxdlhuXmLzRNXFhw0XT7vsgHPLqPR0HdTmEEGdjmbIJTBIDIyJVG9Z\/odNnhuQ+Fk\/eNDABsdNU0g0AI524AWcsBFaVvD+3H0XhThHbdC+oKWAcCNVQSy2bdvmLI86TsIVsSxLkMDAIQQfjQtmFQg9afKRvGGAXM08o7xLqJt5DjxbngnEiDRXYaKO9mIYPDsLMROJUb8ThEis4II14FQG0ebdQdMCoxHsYheGgyCj7uYdgqGlLd8XBByJGPU9+GAcgH5hUGgbCOCf74v6qJnRpK1bt07ZpJkHGrGymZeWeLXlhkF8A2iPCYLriGHAUlNTBYdGpOTAdqSZK3NzA89BO7ixRneZjnsxL\/QH1DwxQwZ3JybqKtGNm7LfIn01w\/sLsT514O3S7fv50t2WKM+fOVO6Llwol27YKC2fek5qdrpAuCDFPeoZQ4ZJz01\/hAQ1zvPdOudur+MJlSoLjMJFNjPcbsrnkjJxglxkM27MpV7vq8SyiXm9q\/tmGaf+Nf10c+F2tB6\/LslSntO8Gt7gP5vN7WOB9emv9iU9nTHavTfumP7bffiJxEf42t50m4cb+4Vvrz3peJGOKXaGM6vIRqL\/FuZyPZblk7jZPDWnHEoX2nar67IZ6Hg0Q7xsUXUzJupENnDieQWkFqQGvJfz2kdRbIdtVq+L+8Z1PFgIoW3atKkgjTZs2FBIB6ubXb5lWYKExjOBkFmW70POrk0kymBOINpIvpYV2hxow3eFhE3b3HxfwdYAgYdBx54MAQ9Wzyufd5vrQzGjwYDB4HvVi3TetX2OOkNMcf0lLSczipFStoatQoOGUuaEagIBj9bQEOzKjZtKFVu9nlCxUrSGjelxliyLc+zTd12bIaVKFSKJOlYx65amUZ+xCRTEXFG3InExNnZ1QgN5xwDSIt7FSJD8WUOkMGz3+DzQK88ZwkvcgMFAXjBQK8kvVb\/yscj+A6ExPnkZK7ptzGj5wcD74\/1ybY8u0ZOmmbN\/ZFJFCPCQ1cvBm1fHIx3ivINzDlIK0L+\/X62D2hsVYaTnUFT7hzgjMSK9Vq9eXUnBSILYR\/WaucI0HJKh7s+ExRMD113lk6rx8J32VZHdJovnw83DqjdvseTVTIf39x8SqVAhetI00y2ybyBEcd68ecIRlOxsdSAhnDB+\/HhBmscmDyAB6v7Jx3MdW5nOM2HoGLAsS\/0xCK8WOBniBIXt2qu8IPO4MxzHsvwADpQFuYbiNnZSzQz57CnfZvz5DCNRF8Tzj6Ux5y7wkUr8F7p3SYv61HyjR33YyA9oWZZgg3RfdhH5UUXwGsYJjj\/N6AUwDnggR2MuRW0MPNs5hoU5ASclvIlxXOK4Ek6GOEHF4pqR8nFgyg9wR0Esrq0oz6ndOUdl4dh0ufW66Nre7hAAAADuSURBVKo5izJOC+vaWjXLkBnPp8uQe6JPpMFZkSXULK4gAGLBsTIua\/CCaDMOBYGDSI6Jyhtvb7zd8SbGcQlP+UiOmd++uS6T2+XyA8Zkkt+nkLf2DeqnS\/OmhlDnDXtFp1Vycrq0PitdbPkvyKIim20IdWTxa3o3GBAupMHZLT\/gtsMblBoMGAwULwwYQl28nrdZrcGAwYDBgMFAIcNAuAl1IVu+ma7BgMGAwYDBgMFAbGPAEOrYfj5mdgYDBgMGAwYDxRwDxZtQF\/OHb5ZvMGAwYDBgMBD7GDCEOvafkZmhwYDBgMGAwUAxxsD\/AwAA\/\/\/p2W9UAAAABklEQVQDADuH4gwQzMSOAAAAAElFTkSuQmCC\">:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"816\" height=\"436\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png?resize=816%2C436&#038;ssl=1\" alt=\"\" class=\"wp-image-2040\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png?w=816&amp;ssl=1 816w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png?resize=300%2C160&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-9.png?resize=768%2C410&amp;ssl=1 768w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"\">Behind this is hiding 32 examples to learn from! Here are the first 8:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"1024\" height=\"284\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png?resize=1024%2C284&#038;ssl=1\" alt=\"\" class=\"wp-image-2039\" srcset=\"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png?resize=1024%2C284&amp;ssl=1 1024w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png?resize=300%2C83&amp;ssl=1 300w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png?resize=768%2C213&amp;ssl=1 768w, https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/image-8.png?w=1040&amp;ssl=1 1040w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">And that\u2019s it, we now have a way to generate a lot of training data to train a GPT from scratch.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Next, we\u2019ll talk about a very naive model, that will give very poor results but that will set the ground for the real game.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">See you in Part 3: <a href=\"https:\/\/philippeadjiman.com\/blog\/2025\/11\/10\/gpt-from-scratch-3-the-bigram-model\/\">The Bigram Model<\/a> .<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Don&#8217;t understate the importance of building a proper training set. It is a critical part of the process, and in GPT&#8217;s case, a beautifully cleaver one as well. <\/p>\n","protected":false},"author":1,"featured_media":2043,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[18,46,14],"tags":[48,47,49],"class_list":["post-2030","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deep-learning","category-gpt","category-pytorch","tag-deep-learning","tag-gpt","tag-pytorch"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/philippeadjiman.com\/blog\/wp-content\/uploads\/2025\/11\/gpt-2.png?fit=510%2C307&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/2030","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/comments?post=2030"}],"version-history":[{"count":10,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/2030\/revisions"}],"predecessor-version":[{"id":2251,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/posts\/2030\/revisions\/2251"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/media\/2043"}],"wp:attachment":[{"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/media?parent=2030"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/categories?post=2030"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/philippeadjiman.com\/blog\/wp-json\/wp\/v2\/tags?post=2030"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}