<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Archived Posts on The Learning Loom</title><link>https://shrsv.github.io/post/</link><description>Recent content in Archived Posts on The Learning Loom</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 10 Apr 2025 20:41:21 +0530</lastBuildDate><atom:link href="https://shrsv.github.io/post/index.xml" rel="self" type="application/rss+xml"/><item><title>Market Capitalization</title><link>https://shrsv.github.io/p/market-capitalization/</link><pubDate>Thu, 10 Apr 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/market-capitalization/</guid><description>&lt;p&gt;I was browsing some Bitbucket API documentation somewhere
when I read something like - &lt;em&gt;Atlassian IPO&amp;rsquo;d with a market
capitalization of 4.37 Billion&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I wanted to make sense of that sentence a bit more than I
already did.&lt;/p&gt;
&lt;p&gt;Obvious - but worth stating for the record: Atlassian builds
Bitbucket.&lt;/p&gt;
&lt;p&gt;Atlassian was publicly listed on NASDAQ on December 10, 2015.&lt;/p&gt;
&lt;p&gt;The symbol for the company was the memorable word - &lt;em&gt;TEAM&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And just in case you wish to know - NASDAQ stands for:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;National Association of Securities Dealers Automated Quotations&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That was a serious &lt;em&gt;WTF&lt;/em&gt; moment for me.&lt;/p&gt;
&lt;p&gt;Anyway - turns out I don&amp;rsquo;t know anything about:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Atlassian&lt;/li&gt;
&lt;li&gt;NASDAQ&lt;/li&gt;
&lt;li&gt;Or market&lt;/li&gt;
&lt;li&gt;Or capitalization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But I do know one thing: 4,370,000,000 &amp;ndash; That&amp;rsquo;s a &lt;strong&gt;huge&lt;/strong&gt; number&lt;/p&gt;
&lt;p&gt;Here&amp;rsquo;s a visualization I drew for myself:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/viz.png"
width="483"
height="600"
srcset="https://shrsv.github.io/p/market-capitalization/viz_hu_b1580468b121ae1.png 480w, https://shrsv.github.io/p/market-capitalization/viz_hu_106a3ddaaa7be26d.png 1024w"
loading="lazy"
alt="The number"
class="gallery-image"
data-flex-grow="80"
data-flex-basis="193px"
&gt;&lt;/p&gt;
&lt;p&gt;Then I googled for TEAM, and found its stock market history.&lt;/p&gt;
&lt;p&gt;I went to the very beginning, Day 1. And saw this:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/day1.png"
width="875"
height="538"
srcset="https://shrsv.github.io/p/market-capitalization/day1_hu_111fc0f121a7ac8f.png 480w, https://shrsv.github.io/p/market-capitalization/day1_hu_34c5d2ad29578b50.png 1024w"
loading="lazy"
alt="Day 1"
class="gallery-image"
data-flex-grow="162"
data-flex-basis="390px"
&gt;&lt;/p&gt;
&lt;p&gt;So I figure &lt;code&gt;28 * 17M&lt;/code&gt; should give the market capitalization - but then no. That&amp;rsquo;s an order of magnitude lesser than expected.&lt;/p&gt;
&lt;p&gt;Turns out - that is merely the &lt;em&gt;trading volume&lt;/em&gt; for the day; that is N number of shares were outstanding - up for the grabs - and only a percentage of that ended up getting traded:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/tv.png"
width="1050"
height="196"
srcset="https://shrsv.github.io/p/market-capitalization/tv_hu_9af0af1b8d7e4a7d.png 480w, https://shrsv.github.io/p/market-capitalization/tv_hu_996bac9e198d7722.png 1024w"
loading="lazy"
alt="Trading Volume"
class="gallery-image"
data-flex-grow="535"
data-flex-basis="1285px"
&gt;&lt;/p&gt;
&lt;p&gt;Tried trawling for data elsewhere, different sites, different places, stil not getting the numbers I need.&lt;/p&gt;
&lt;p&gt;Finally - in the NASDAQ site saw some relevant data:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/nd.png"
width="731"
height="799"
srcset="https://shrsv.github.io/p/market-capitalization/nd_hu_c6a508cd5704f32c.png 480w, https://shrsv.github.io/p/market-capitalization/nd_hu_8cd34eb9c606f1d4.png 1024w"
loading="lazy"
alt="NASDAQ details"
class="gallery-image"
data-flex-grow="91"
data-flex-basis="219px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.nasdaq.com/market-activity/ipos/overview?dealId=979107-79756" target="_blank" rel="noopener"
&gt;src&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Tried pluggin and chugging a few numbers - no luck.&lt;/p&gt;
&lt;p&gt;Finally I went to the source at &lt;a class="link" href="https://www.sec.gov/Archives/edgar/data/1650372/000104746915009143/a2226831z424b4.htm" target="_blank" rel="noopener"
&gt;SEC filing&lt;/a&gt; and found the following:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/sec.png"
width="1133"
height="443"
srcset="https://shrsv.github.io/p/market-capitalization/sec_hu_13f8d6d981d35243.png 480w, https://shrsv.github.io/p/market-capitalization/sec_hu_700acf80bf1ba8cc.png 1024w"
loading="lazy"
alt="SEC Listing"
class="gallery-image"
data-flex-grow="255"
data-flex-basis="613px"
&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;52,872,107 + 155,803,022 = 208,675,129
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;So that&amp;rsquo;s the number of shares available - making up of &lt;em&gt;Class A&lt;/em&gt; and &lt;em&gt;Class B&lt;/em&gt; shares.&lt;/p&gt;
&lt;p&gt;I didn&amp;rsquo;t go into much details on this differrentiation - but there&amp;rsquo;s voting differences, etc - which is beside the point now. Many of the data trawling sites seem to get this wrong.&lt;/p&gt;
&lt;p&gt;Anyway - now that I know the necessary details, I could calculate market capitalization:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;market capitalization = total number of outstanding shares x share price at close of day
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;market capitalization = 208,675,129 * 28 = 5,842,903,612
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Now - that&amp;rsquo;s 5.8 Billion. And that matches the news:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/market-capitalization/mv.png"
width="1019"
height="343"
srcset="https://shrsv.github.io/p/market-capitalization/mv_hu_964e2f3b0b3b0295.png 480w, https://shrsv.github.io/p/market-capitalization/mv_hu_e4246f4dc1042272.png 1024w"
loading="lazy"
alt="The Market Value"
class="gallery-image"
data-flex-grow="297"
data-flex-basis="713px"
&gt;&lt;/p&gt;</description></item><item><title>Betting &gt; Believing</title><link>https://shrsv.github.io/p/betting-gt-believing/</link><pubDate>Wed, 26 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/betting-gt-believing/</guid><description>&lt;h2 id="the-power-of-betting-in-decision-making"&gt;The Power of Betting in Decision-Making
&lt;/h2&gt;&lt;h3 id="navigating-uncertainty"&gt;Navigating Uncertainty
&lt;/h3&gt;&lt;p&gt;In real-world decision-making, uncertainty is a constant. Whether it’s a project deadline, a hiring choice, or a career move, information is often incomplete or unclear. Waiting for perfect clarity isn’t always an option—time runs out, resources dwindle, and complexity can overwhelm.&lt;/p&gt;
&lt;p&gt;Many rely on &lt;em&gt;believing&lt;/em&gt;—trusting intuition, assumptions, or the opinions of others—to guide them. While this approach can provide an initial sense of direction, it falls short when the stakes are high or the context is unique. A more effective strategy is &lt;em&gt;betting&lt;/em&gt;: making calculated decisions based on evidence and outcomes.&lt;/p&gt;
&lt;h3 id="a-lesson-in-misjudgment"&gt;A Lesson in Misjudgment
&lt;/h3&gt;&lt;p&gt;Once, I was deep into a project with a looming deadline. I did some quick mental math and convinced myself, “It’s tight, but we’ve got this.” Riding a wave of optimism, I skimmed progress updates and reassured myself that things were on track.&lt;/p&gt;
&lt;p&gt;Then the deadline arrived—and the project was nowhere near completion. The issue wasn’t my team’s performance; it was my own failure to verify assumptions against reality. I had &lt;em&gt;believed&lt;/em&gt; instead of &lt;em&gt;inspected&lt;/em&gt;, and it cost us dearly.&lt;/p&gt;
&lt;h3 id="why-believing-falls-short"&gt;Why Believing Falls Short
&lt;/h3&gt;&lt;p&gt;Believing feels natural. It’s tempting to trust gut feelings, conventional wisdom, or someone else’s word. However, this method has critical weaknesses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Untested Assumptions:&lt;/strong&gt; Unverified beliefs create blind spots.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;High Stakes:&lt;/strong&gt; Relying on trust alone can magnify risks in crucial moments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unique Contexts:&lt;/strong&gt; Standard solutions often don’t fit specific challenges.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Examples highlight these pitfalls:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hiring:&lt;/strong&gt; A candidate’s resume may shine, but without a test project, a poor fit can slip through.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projects:&lt;/strong&gt; Optimistic projections can obscure real progress if milestones aren’t tracked.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Career Moves:&lt;/strong&gt; A role might seem perfect, but the reality can be vastly different.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Believing can offer direction, but it falters under scrutiny. A more concrete approach is needed.&lt;/p&gt;
&lt;h3 id="how-betting-takes-the-lead"&gt;How Betting Takes the Lead
&lt;/h3&gt;&lt;p&gt;Betting isn’t about reckless gambles; it’s about measured risks and tangible outcomes. It acknowledges uncertainty and transforms it into an advantage. Here’s why it works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Commitment Sharpens Focus:&lt;/strong&gt; Investing resources—time, effort, or money—forces clarity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Results Teach:&lt;/strong&gt; Every bet provides feedback, refining future decisions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action Trumps Hesitation:&lt;/strong&gt; Betting prevents paralysis and promotes forward movement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reality Rules:&lt;/strong&gt; Measurable outcomes ground decisions in fact, cutting through bias.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Practical applications demonstrate its effectiveness:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Hiring:&lt;/strong&gt; Assign a trial project. Success justifies hiring; failure limits risk.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Projects:&lt;/strong&gt; Set a milestone—like a prototype in two weeks. Hit it and proceed; miss it and reassess.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Career Moves:&lt;/strong&gt; Test a new role through a short contract. If it fits, commit; if not, pivot with minimal loss.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Betting converts vague hopes into structured experiments, yielding clarity through action.&lt;/p&gt;
&lt;h3 id="a-historical-perspective-pascals-wager"&gt;A Historical Perspective: Pascal’s Wager
&lt;/h3&gt;&lt;p&gt;This mindset isn’t new. The 17th-century philosopher Blaise Pascal framed belief in God as a bet:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Believe, and God exists:&lt;/strong&gt; Immense reward.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Believe, and God doesn’t:&lt;/strong&gt; Minor loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don’t believe, and God exists:&lt;/strong&gt; Major loss.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Don’t believe, and God doesn’t:&lt;/strong&gt; Small gain.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pascal argued that betting on belief made sense—the potential upside outweighed the downside. This logic extends beyond faith: weigh potential gains and losses, then act decisively under uncertainty.&lt;/p&gt;
&lt;h3 id="using-bets-to-overcome-deadlocks"&gt;Using Bets to Overcome Deadlocks
&lt;/h3&gt;&lt;p&gt;Decisions rarely come with full certainty, yet action is unavoidable. Believing may inspire ideas, but it fails when precision matters. Betting—acting with intent, measuring results, and adapting—handles uncertainty far better. It’s a tool for progress, turning ambiguity into opportunity.&lt;/p&gt;
&lt;p&gt;When teams or leaders face decision paralysis, betting can break the deadlock. It’s not about reckless risk-taking; it’s about structured progress:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;For Leaders:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Demonstrates confidence by committing to a direction.&lt;/li&gt;
&lt;li&gt;Cuts through hesitation with thoughtful choices.&lt;/li&gt;
&lt;li&gt;Example: Setting a bold goal to align and energize a team.&lt;/li&gt;
&lt;li&gt;Encourages responsibility and decisiveness.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;For Teams:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Moves from debate to action.&lt;/li&gt;
&lt;li&gt;Provides clear targets and accountability.&lt;/li&gt;
&lt;li&gt;Fosters learning—even from failure.&lt;/li&gt;
&lt;li&gt;Keeps momentum going.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;In Uncertainty:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Selects a single option when too many exist.&lt;/li&gt;
&lt;li&gt;Tests small ideas before full commitment.&lt;/li&gt;
&lt;li&gt;Turns confusion into growth opportunities.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Betting isn’t about perfection—it’s about progress. It helps leaders make decisive choices, strengthens team cohesion, and prevents stagnation. The next time you’re stuck, try placing a bet: define a goal, commit to an action, and learn from the outcome.&lt;/p&gt;
&lt;p&gt;It may just work better than endless debates about “beliefs.”&lt;/p&gt;</description></item><item><title>I Disagree With Jeff Bezos</title><link>https://shrsv.github.io/p/i-disagree-with-jeff-bezos/</link><pubDate>Sat, 22 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/i-disagree-with-jeff-bezos/</guid><description>&lt;p&gt;It’s not every day that I find myself at odds with someone like Jeff Bezos (on a matter of principle, of course).&lt;/p&gt;
&lt;p&gt;The man who built Amazon into a global phenomenon once said, &lt;strong&gt;“Good intentions don’t work. Mechanisms do.”&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;At first glance, it’s a compelling statement—practical, grounded, and appealing to the results-driven crowd
in business and economic worlds.&lt;/p&gt;
&lt;p&gt;But the more I reflect on it, the more I disagree.&lt;/p&gt;
&lt;p&gt;I will argue here that intentions, far from being irrelevant, are foundational to improving
the quality of human existence.&lt;/p&gt;
&lt;p&gt;My reasons - in short - are as follows:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Intent is about us - humans; effect is about the world at large.&lt;/li&gt;
&lt;li&gt;Intent is spiritual or psychological in nature; effect is economic or physical in nature (usually).&lt;/li&gt;
&lt;li&gt;Intent is often a relatively long-term phenomenon; mechanism is usually more short-term.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="a-bit-of-history"&gt;A bit of history&amp;hellip;
&lt;/h2&gt;&lt;p&gt;Look at the sages, prophets, and spiritual traditions that have guided humanity for millennia.&lt;/p&gt;
&lt;p&gt;From Buddhist monks to the wise teachers of ancient India, they’ve all emphasized one thing: &lt;em&gt;get your intent right&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;Because intent is tightly coupled to the quality of your consciousness - which,
in the long run, determines actions that lead to the individual and the world&amp;rsquo;s
future.&lt;/p&gt;
&lt;p&gt;Contrast this with the economic perspective, where intentions are dismissed as fluff.&lt;/p&gt;
&lt;p&gt;Economists and business people often argue that what matters are effects—tangible results, second-order consequences, and measurable outputs.&lt;/p&gt;
&lt;p&gt;And mechanisms, they say, are what drive success.&lt;/p&gt;
&lt;p&gt;But I think this view misses something fundamental.&lt;/p&gt;
&lt;h2 id="putting-the-idea-through-the-common-sense-filter"&gt;Putting the idea through the &amp;ldquo;common sense&amp;rdquo; filter
&lt;/h2&gt;&lt;p&gt;Let’s test this idea with a simple scenario.&lt;/p&gt;
&lt;p&gt;Imagine you’re facing a brain tumor, and you need a neurosurgeon.&lt;/p&gt;
&lt;p&gt;You have two options: one is a brilliant technician with a criminal background, whose intentions you distrust; the other is less technical but genuinely committed to your well-being.&lt;/p&gt;
&lt;p&gt;Who do you choose?&lt;/p&gt;
&lt;p&gt;Most of us, I suspect, would pick the latter.&lt;/p&gt;
&lt;p&gt;Why?&lt;/p&gt;
&lt;p&gt;Because we instinctively know - intent matters.&lt;/p&gt;
&lt;p&gt;We instinctively sense that someone who doesn’t have our best interests at heart—no matter how skilled—can’t be trusted with something as precious as our life.&lt;/p&gt;
&lt;p&gt;Mechanisms alone don’t cut it when the stakes are personal.&lt;/p&gt;
&lt;h2 id="time-horizon"&gt;Time Horizon
&lt;/h2&gt;&lt;p&gt;Now, let’s widen the lens.&lt;/p&gt;
&lt;p&gt;Consider the longest-standing organizations in history: churches, temples, spiritual lineages, educational institutions, and service-oriented groups.&lt;/p&gt;
&lt;p&gt;These entities have endured for decades, centuries, even millennia—often thriving regardless of economic conditions.&lt;/p&gt;
&lt;p&gt;Take the Shankaracharya tradition in India, a lineage of wisdom that has persisted for over a thousand years.&lt;/p&gt;
&lt;p&gt;It’s not built on economic principles, which are inherently dynamic and unstable, but on an unchanging commitment to truth and human upliftment.&lt;/p&gt;
&lt;p&gt;What do these organizations have in common?&lt;/p&gt;
&lt;p&gt;They operate on what I call the “Intent Principle” rather than the “Effect Principle.”&lt;/p&gt;
&lt;p&gt;Their focus isn’t solely on short-term outputs or market fluctuations; it’s on a deeper, enduring purpose.&lt;/p&gt;
&lt;p&gt;And that purpose—rooted in goodwill and noble intent—carries them through storms that topple profit-driven systems.&lt;/p&gt;
&lt;h2 id="maybe-intent-in-itself-can-be-seen-as-part-of-larger-mechanism"&gt;Maybe Intent In Itself Can Be Seen As Part of Larger Mechanism
&lt;/h2&gt;&lt;p&gt;Of course, I’m not saying mechanisms don’t matter.&lt;/p&gt;
&lt;p&gt;A well-designed system can amplify the impact of good intentions.&lt;/p&gt;
&lt;p&gt;But intent isn’t separate from the mechanism—it’s part of it, especially in human organizations.&lt;/p&gt;
&lt;p&gt;When we sense that someone doesn’t wish us well or lacks consideration, we pull away.&lt;/p&gt;
&lt;p&gt;That’s the genesis of disorder, distrust, and collapse.&lt;/p&gt;
&lt;p&gt;Conversely, when intent is genuine and inspiring, it binds people together, fueling cooperation and resilience.&lt;/p&gt;
&lt;p&gt;Intent is the foundation; mechanisms are the structure built upon it.&lt;/p&gt;
&lt;h2 id="the-durability-of-intent"&gt;The Durability of Intent
&lt;/h2&gt;&lt;p&gt;Economic systems, by their nature, are concrete but fleeting.&lt;/p&gt;
&lt;p&gt;They rise and fall with markets, technologies, and trends.&lt;/p&gt;
&lt;p&gt;Intent, on the other hand, is abstract yet enduring.&lt;/p&gt;
&lt;p&gt;A noble thought—a commitment to benefit others, to serve a country, or to enhance well-being—can survive generations.&lt;/p&gt;
&lt;p&gt;It’s not easily destroyed, even under adverse circumstances.&lt;/p&gt;
&lt;p&gt;History shows this: the goodwill and aspirations of our ancestors continue to inspire us long after their physical creations have crumbled.&lt;/p&gt;
&lt;p&gt;Think about it: no truly noble thought ever dies.&lt;/p&gt;
&lt;p&gt;It plants seeds that bloom into future actions, often in ways we can’t predict.&lt;/p&gt;
&lt;p&gt;Mechanisms, being rigid and material, eventually break down.&lt;/p&gt;
&lt;p&gt;Intent, being fluid and timeless, adapts and persists.&lt;/p&gt;
&lt;h2 id="a-life-built-on-intent"&gt;A Life Built on Intent
&lt;/h2&gt;&lt;p&gt;So, where does this leave us?&lt;/p&gt;
&lt;p&gt;I believe good intentions matter more than mechanisms—not because they’re a substitute for results, but because they’re the firm ground on which all lasting results rest.&lt;/p&gt;
&lt;p&gt;A steadfast commitment to an inspiring intent is the best way to make the most of our lives, both for ourselves and for others.&lt;/p&gt;
&lt;p&gt;It’s what drives us and our associates through decades, even lifetimes.&lt;/p&gt;
&lt;p&gt;It’s what survives beyond us.&lt;/p&gt;
&lt;p&gt;Jeff Bezos might disagree, and the economists might scoff.&lt;/p&gt;
&lt;p&gt;But I’d rather take my cues from the sages who’ve stood the test of time.&lt;/p&gt;
&lt;p&gt;Get your intent right, and the mechanisms will follow.&lt;/p&gt;
&lt;p&gt;That’s the real power of intent.&lt;/p&gt;</description></item><item><title>Organizations That Last</title><link>https://shrsv.github.io/p/organizations-that-last/</link><pubDate>Fri, 21 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/organizations-that-last/</guid><description>&lt;p&gt;&lt;img src="https://shrsv.github.io/p/organizations-that-last/image.png"
width="568"
height="378"
srcset="https://shrsv.github.io/p/organizations-that-last/image_hu_e8bf63772fae5ff7.png 480w, https://shrsv.github.io/p/organizations-that-last/image_hu_89d6e5590db815ba.png 1024w"
loading="lazy"
alt="The Kailasa Temple"
class="gallery-image"
data-flex-grow="150"
data-flex-basis="360px"
&gt;&lt;/p&gt;
&lt;p&gt;Some organizations stand the test of time, lasting &lt;strong&gt;centuries or even millennia&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;They don’t chase &lt;em&gt;rapid growth&lt;/em&gt;, which often leads to collapse.&lt;/p&gt;
&lt;p&gt;Think of a company like &lt;strong&gt;WeWork&lt;/strong&gt;,&lt;br&gt;
that expanded too fast and fell apart due to &lt;em&gt;mismanagement&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In contrast, some of these enduring groups focus on &lt;strong&gt;purpose&lt;/strong&gt;, &lt;strong&gt;stability&lt;/strong&gt;, and &lt;strong&gt;community&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;For example, small family-owned businesses often endure because they prioritize &lt;em&gt;legacy&lt;/em&gt; over profit.&lt;/p&gt;
&lt;p&gt;They grow slowly, staying rooted in their communities, and pass their work through generations.&lt;/p&gt;
&lt;p&gt;Take &lt;strong&gt;Kongo Gumi&lt;/strong&gt; in Japan: founded in &lt;em&gt;578 AD&lt;/em&gt;, this construction firm built Buddhist temples for over &lt;strong&gt;1,400 years&lt;/strong&gt; across 40 generations before being absorbed in 2006.&lt;/p&gt;
&lt;p&gt;Or consider &lt;strong&gt;Antinori&lt;/strong&gt;, an Italian wine producer since &lt;em&gt;1385&lt;/em&gt;, now in its 26th generation, thriving by blending tradition with modern techniques.&lt;/p&gt;
&lt;p&gt;Then there are monasteries and convents, built on &lt;em&gt;spiritual missions&lt;/em&gt; that don’t bend to trends.&lt;/p&gt;
&lt;p&gt;They’re often self-sufficient, growing their own food or making goods like wine, and their isolation keeps them steady.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Monastery of Saint Catherine&lt;/strong&gt; in Egypt, founded in &lt;em&gt;565 AD&lt;/em&gt;, has survived invasions thanks to its remote spot at the foot of Mount Sinai.&lt;/p&gt;
&lt;p&gt;Similarly, the &lt;strong&gt;Abbey of Monte Cassino&lt;/strong&gt; in Italy, started in &lt;em&gt;529 AD&lt;/em&gt; by Saint Benedict, has been rebuilt after destruction—like during WWII—because its &lt;em&gt;purpose&lt;/em&gt; endures.&lt;/p&gt;
&lt;p&gt;Educational institutions also stand out for their longevity.&lt;/p&gt;
&lt;p&gt;They meet a core human need: the pursuit of &lt;strong&gt;knowledge&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;With strong governance, endowments, and alumni support, they adapt while staying true to their mission.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;University of Al-Qarawiyyin&lt;/strong&gt; in Morocco, founded in &lt;em&gt;859 AD&lt;/em&gt;, is the world’s &lt;em&gt;oldest university&lt;/em&gt;, evolving from a madrasa into a modern institution.&lt;/p&gt;
&lt;p&gt;In the UK, the &lt;strong&gt;University of Oxford&lt;/strong&gt; has been teaching since &lt;em&gt;1096&lt;/em&gt;, balancing tradition with academic excellence to remain a global leader.&lt;/p&gt;
&lt;p&gt;Broader religious institutions, beyond monasteries, also last, tied to &lt;em&gt;spiritual&lt;/em&gt; and &lt;em&gt;cultural roles&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;They often own assets like land and have global networks for support.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Catholic Church&lt;/strong&gt;, established in the &lt;em&gt;1st century AD&lt;/em&gt;, has weathered wars and schisms with its centralized authority in the Vatican.&lt;/p&gt;
&lt;p&gt;In India, the &lt;strong&gt;Advaita Vedanta&lt;/strong&gt; tradition, founded by &lt;em&gt;Adi Shankaracharya&lt;/em&gt; in the &lt;em&gt;8th century AD&lt;/em&gt;, continues to thrive.&lt;/p&gt;
&lt;p&gt;Shankaracharya established four mathas (monastic centers) in &lt;strong&gt;Sringeri&lt;/strong&gt;, &lt;strong&gt;Dwarka&lt;/strong&gt;, &lt;strong&gt;Puri&lt;/strong&gt;, and &lt;strong&gt;Joshimath&lt;/strong&gt; to preserve his non-dualistic philosophy, and these institutions still guide spiritual seekers today, rooted in ancient texts and practices.&lt;/p&gt;
&lt;p&gt;In Japan, the &lt;strong&gt;Ise Grand Shrine&lt;/strong&gt;, a Shinto site, has been rebuilt every 20 years for over &lt;strong&gt;1,300 years&lt;/strong&gt;, a ritual that keeps its spirit alive.&lt;/p&gt;
&lt;p&gt;Guilds and trade associations offer another angle. They protect professions, set standards, and build community, adapting over time to stay relevant.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Worshipful Company of Goldsmiths&lt;/strong&gt; in the UK, founded in &lt;em&gt;1327&lt;/em&gt;, still regulates the goldsmith trade today.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Hanseatic League&lt;/strong&gt;, a network of merchant guilds from the 13th to 17th centuries in Europe, shaped trade practices that echo in modern organizations.&lt;/p&gt;
&lt;p&gt;Charitable foundations endure by focusing on &lt;em&gt;long-term missions&lt;/em&gt;, backed by endowments and stable governance.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Rockefeller Foundation&lt;/strong&gt;, started in &lt;em&gt;1913&lt;/em&gt;, has funded global health and education for over a century, tackling issues like climate change.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Wellcome Trust&lt;/strong&gt; in the UK, since &lt;em&gt;1936&lt;/em&gt;, uses its £30 billion endowment to support medical research, including the &lt;strong&gt;Human Genome Project&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Finally, indigenous and tribal organizations show remarkable resilience, rooted in &lt;em&gt;culture&lt;/em&gt; and &lt;em&gt;land&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Iroquois Confederacy&lt;/strong&gt; in North America, formed around &lt;em&gt;1142 AD&lt;/em&gt;, unites six nations and still operates today, its governance even influencing the U.S. Constitution.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;San People&lt;/strong&gt; of Southern Africa have maintained their communal structures for &lt;strong&gt;thousands of years&lt;/strong&gt;, passing traditions through oral storytelling.&lt;/p&gt;
&lt;p&gt;What ties these organizations together? A &lt;strong&gt;clear mission&lt;/strong&gt;, &lt;strong&gt;strong community ties&lt;/strong&gt;, and a focus on &lt;em&gt;sustainability&lt;/em&gt; over reckless growth.&lt;/p&gt;
&lt;p&gt;They prove that lasting impact comes from &lt;strong&gt;purpose&lt;/strong&gt; and &lt;strong&gt;patience&lt;/strong&gt;, not chasing scale at all costs.&lt;/p&gt;</description></item><item><title>Structure And Meaning</title><link>https://shrsv.github.io/p/structure-and-meaning/</link><pubDate>Thu, 20 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/structure-and-meaning/</guid><description>&lt;p&gt;&amp;ldquo;Up, down, up, down, up, down, &amp;hellip;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;What comes next?&lt;/p&gt;
&lt;p&gt;You know the answer - it is &amp;ldquo;Up&amp;rdquo;&lt;/p&gt;
&lt;p&gt;How did you know it?&lt;/p&gt;
&lt;p&gt;Your mind inferred some sort of structure, and made a guess&lt;/p&gt;
&lt;p&gt;I mean - we do not know - what truly &lt;em&gt;will&lt;/em&gt; come next.&lt;/p&gt;
&lt;p&gt;But we are pretty sure - due to the repetition - and we expect it to be &amp;ldquo;up&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;There could be a breakage of pattern, but the fact that
we expected an outcome - that hints at underlying structure.&lt;/p&gt;
&lt;p&gt;Look at your favorite music&lt;/p&gt;
&lt;p&gt;There is a structure to that - and one almost waits for one&amp;rsquo;s
favorite parts of the music. At least I do.&lt;/p&gt;
&lt;p&gt;So - our feeling of &amp;ldquo;familiarity&amp;rdquo; hints at what makes things
meaningful to us.&lt;/p&gt;
&lt;p&gt;Consider something like the following:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#34;asfdklj;2341p0vmlaksfjdalksdjf;la;sdjfalksdjdfklaj;sdfkja;sdkfa
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aslfja;sdkfja;sldkfj;kafa;sdflkaksjdf;lakj23049i2034233490--0-0=---
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Something random like that - doesn&amp;rsquo;t hold our attention much.&lt;/p&gt;
&lt;p&gt;You skip through such stuff.&lt;/p&gt;
&lt;p&gt;Why? Because we cannot figure out - &amp;ldquo;What does it mean?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;So the biggest point of our life is that we get a feeling
of familiarity - that we get meaning.&lt;/p&gt;
&lt;p&gt;We may be wrong sometimes as well - that&amp;rsquo;s part of the adventure but that sense of familiarity is what keeps us interested in
music, story, problems.&lt;/p&gt;
&lt;p&gt;The possibility of becoming familiar is the most alluring part
of music.&lt;/p&gt;
&lt;p&gt;Likewise, it is difficult for us to keep any interest in things
that seem random, things that we cannot seem to comprehend, and
things which we think we will &lt;em&gt;never&lt;/em&gt; understand or become familiar with.&lt;/p&gt;
&lt;p&gt;So - to be interested - we must perceive at least part of the underlying
structure of the thing, and hope that you can unravel more, test yourself
moe.&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s important.&lt;/p&gt;
&lt;p&gt;I am building organiazations, such as &lt;a class="link" href="https://hexmos.com" target="_blank" rel="noopener"
&gt;Hexmos&lt;/a&gt; and software
tools like &lt;a class="link" href="https://hexmos.com/liveapi" target="_blank" rel="noopener"
&gt;LiveAPI&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Our goal with the tools and teams that we build is - to aim to construct
interesting, alluring and satisfying structures.&lt;/p&gt;
&lt;p&gt;Another observation - I&amp;rsquo;ve had is - a person who seems not to be able
to find their place in the world - feels disoriented, becomes
more and more of a madman by the day.&lt;/p&gt;
&lt;p&gt;Look at any strongly religious person - you will rarely see them
depressed and dejected beyond comprehension - the reason being - their
&lt;em&gt;mind is structured under a scheme&lt;/em&gt;. There is a structured organization to their mind, so it
is not falling apart.&lt;/p&gt;
&lt;p&gt;A mind that is so sceptical - that it is unable to build any structure
at all - cannot survive - because it is too unstable, too random - too
free.&lt;/p&gt;
&lt;p&gt;From a psychological, or mental level, excess freedom of &amp;ldquo;anything is possible&amp;rdquo;
means - insufficient structure - leads to lack of meaning, purpose and a constant
sense of &amp;ldquo;falling apart&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;So we want good structure - along with a sense of adventure to unravel more of it.
That is what gives meaning to human life.&lt;/p&gt;</description></item><item><title>A Few Things About Macronutrients</title><link>https://shrsv.github.io/p/a-few-things-about-macronutrients/</link><pubDate>Mon, 17 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/a-few-things-about-macronutrients/</guid><description>&lt;p&gt;In this post, I continue the exploration from the &lt;a class="link" href="https://shrsv.github.io/p/your-body-is-mostly-just-a-big-battery/" &gt;past post&lt;/a&gt;,
where I was trying to learn a bit more about the human body
from the very basics.&lt;/p&gt;
&lt;h2 id="macronutrients-et-cetera"&gt;MacroNutrients, Et Cetera
&lt;/h2&gt;&lt;p&gt;First, we take in food - as solids/liquids.&lt;/p&gt;
&lt;p&gt;And that food is broken down into different macronutrients (and other components):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;proteins: body-building nutrients, found in meat, eggs, beans&lt;/li&gt;
&lt;li&gt;carbohydrates: sugars &amp;amp; starches, found in bread, rice, pasta&lt;/li&gt;
&lt;li&gt;triglycerides: fats - found in oils, butter, fatty foods&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most of the generally consumed food items have different proportions of the 3 macro nutrients - proteins, carbohydrates, triglycerides.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Food&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Protein (%)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Carbohydrates (%)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Triglycerides (Fats) (%)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Other (Water, Fiber, Vitamins, Minerals etc.) (%)&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bread (white)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8–9%&lt;/td&gt;
&lt;td&gt;45–50%&lt;/td&gt;
&lt;td&gt;3–4%&lt;/td&gt;
&lt;td&gt;37–44%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Rice (cooked, white)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;2–3%&lt;/td&gt;
&lt;td&gt;28–30%&lt;/td&gt;
&lt;td&gt;0.3%&lt;/td&gt;
&lt;td&gt;67–70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pasta (cooked)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;5–6%&lt;/td&gt;
&lt;td&gt;25–30%&lt;/td&gt;
&lt;td&gt;1–2%&lt;/td&gt;
&lt;td&gt;62–69%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Meat (chicken breast, cooked)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;30–32%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;3–4%&lt;/td&gt;
&lt;td&gt;64–67%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Eggs&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;12–13%&lt;/td&gt;
&lt;td&gt;1–2%&lt;/td&gt;
&lt;td&gt;10–11%&lt;/td&gt;
&lt;td&gt;74–77%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Beans (cooked, kidney beans)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;8–9%&lt;/td&gt;
&lt;td&gt;22–25%&lt;/td&gt;
&lt;td&gt;0.5–1%&lt;/td&gt;
&lt;td&gt;65–70%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Fruits (e.g., apple, banana)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.5–1%&lt;/td&gt;
&lt;td&gt;10–15%&lt;/td&gt;
&lt;td&gt;0.1–0.5%&lt;/td&gt;
&lt;td&gt;84–89%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vegetables (e.g., carrots, broccoli)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1–3%&lt;/td&gt;
&lt;td&gt;5–10%&lt;/td&gt;
&lt;td&gt;0.1–0.5%&lt;/td&gt;
&lt;td&gt;86–94%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Milk (whole)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;3–4%&lt;/td&gt;
&lt;td&gt;4–5%&lt;/td&gt;
&lt;td&gt;3–4%&lt;/td&gt;
&lt;td&gt;87–90%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cheese (cheddar)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;25%&lt;/td&gt;
&lt;td&gt;2–3%&lt;/td&gt;
&lt;td&gt;33–35%&lt;/td&gt;
&lt;td&gt;37–40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Butter&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.5%&lt;/td&gt;
&lt;td&gt;0–1%&lt;/td&gt;
&lt;td&gt;80–82%&lt;/td&gt;
&lt;td&gt;17–19%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cooking Oil (e.g., olive oil)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;td&gt;100%&lt;/td&gt;
&lt;td&gt;0%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Some observations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Macronutrients are only one of the many components in the food we eat&lt;/li&gt;
&lt;li&gt;Water, fibers, vitamins and minerals also appear in significant amounts on many of our food items&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-few-things-about-macronutrients/image.png"
width="1112"
height="964"
srcset="https://shrsv.github.io/p/a-few-things-about-macronutrients/image_hu_8328ff9ad3168922.png 480w, https://shrsv.github.io/p/a-few-things-about-macronutrients/image_hu_7d0604838891f03.png 1024w"
loading="lazy"
alt="Energy Generation System"
class="gallery-image"
data-flex-grow="115"
data-flex-basis="276px"
&gt;&lt;/p&gt;
&lt;h2 id="some-raqs-rarely-asked-questions-for-the-curious"&gt;Some RAQs (Rarely Asked Questions) for the Curious
&lt;/h2&gt;&lt;h3 id="how-carbohydrates-and-glycogen-are-connected"&gt;How Carbohydrates and Glycogen are Connected?
&lt;/h3&gt;&lt;p&gt;Carbohydrates and glycogen are intrinsically linked in human metabolism.&lt;/p&gt;
&lt;p&gt;Carbohydrates, found in foods like grains, fruits, and vegetables, are broken down into glucose—a primary energy source.&lt;/p&gt;
&lt;p&gt;Excess glucose is converted into glycogen, a polysaccharide, for storage in the liver and skeletal muscles.&lt;/p&gt;
&lt;p&gt;This stored glycogen can be rapidly mobilized to maintain blood glucose levels during fasting or provide energy during physical activity.&lt;/p&gt;
&lt;p&gt;Thus, glycogen serves as the body&amp;rsquo;s method of storing carbohydrates for future energy needs.&lt;/p&gt;
&lt;h3 id="how-are-glycogen-and-glycerol-are-different-they-sound-similar-and-so-are-confusing"&gt;How are glycogen and glycerol are different? They sound similar and so are confusing
&lt;/h3&gt;&lt;p&gt;Glycogen and glycerol, despite their similar-sounding names, are distinct substances with different structures and functions in the body.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Glycogen&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt;: A highly branched polysaccharide composed of numerous glucose molecules linked together.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function&lt;/strong&gt;: Serves as the primary storage form of glucose in animals, fungi, and bacteria. It is stored mainly in the liver and muscle tissues and can be rapidly mobilized to meet energy demands.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Glycogen" target="_blank" rel="noopener"
&gt;en.wikipedia.org&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Glycerol&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Structure&lt;/strong&gt;: A three-carbon molecule that is chemically similar to sugar; it can be thought of as half of a glucose molecule.&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://learn.genetics.utah.edu/content/metabolism/gwords/" target="_blank" rel="noopener"
&gt;learn.genetics.utah.edu&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Function&lt;/strong&gt;: Acts as the backbone for triglycerides (fats) by binding with three fatty acids. During fat metabolism, triglycerides are broken down into fatty acids and glycerol, which can then be used for energy production or gluconeogenesis (the synthesis of glucose from non-carbohydrate sources).&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://en.wikipedia.org/wiki/Fatty_acid_metabolism" target="_blank" rel="noopener"
&gt;en.wikipedia.org&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In summary, while glycogen is a large, branched polymer of glucose serving as a storage form of energy, glycerol is a simple three-carbon molecule that forms the backbone of triglycerides and plays a role in lipid metabolism. Their structural differences underpin their distinct functions within the body&amp;rsquo;s energy management systems.&lt;/p&gt;
&lt;p&gt;In summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Glycogen&lt;/strong&gt;: Think of &amp;ldquo;glycogen&amp;rdquo; as the body&amp;rsquo;s &amp;ldquo;glucose generator.&amp;rdquo; It is a large, branched molecule made up of glucose units and serves as the primary storage form of glucose in the body, mainly found in the liver and muscles.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Glycerol&lt;/strong&gt;: Remember &amp;ldquo;glycerol&amp;rdquo; as the &amp;ldquo;lipid link.&amp;rdquo; It is a simple three-carbon molecule that forms the backbone of triglycerides, the main constituents of body fat in humans and other animals.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Your Body is Mostly Just a Big Battery</title><link>https://shrsv.github.io/p/your-body-is-mostly-just-a-big-battery/</link><pubDate>Sat, 15 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/your-body-is-mostly-just-a-big-battery/</guid><description>&lt;p&gt;I was recently reading &lt;a class="link" href="https://karpathy.github.io/2020/06/11/biohacking-lite/" target="_blank" rel="noopener"
&gt;Biohacking Lite&lt;/a&gt; by Andrej Karpathy, particularly the section called &lt;strong&gt;The Four Batteries of Your Body&lt;/strong&gt;. For the first time in my life, health-related topics are starting to make sense to me because Karpathy explains them from first principles.&lt;/p&gt;
&lt;h3 id="tldr"&gt;TLDR
&lt;/h3&gt;&lt;p&gt;This is my TLDR after an hour of studying the topic. Any mistakes or misunderstandings are my own, and I may update this as my knowledge improves.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Most of the human body is just battery storage that runs itself.&lt;/li&gt;
&lt;li&gt;There are different types of batteries to power various activities:
&lt;ul&gt;
&lt;li&gt;A quick, short-term battery that wakes up fast but finishes quickly.&lt;/li&gt;
&lt;li&gt;An on-demand, medium-term battery that wakes up a bit slower but works longer.&lt;/li&gt;
&lt;li&gt;A serious-effort, long-term battery that wakes up even slower but works much, much longer.&lt;/li&gt;
&lt;li&gt;A danger zone where your vital organs become the battery (!).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;At the end of the day, most of your body is just a big battery.&lt;/li&gt;
&lt;li&gt;All the batteries are used to convert ADP to ATP, which in turn powers all bodily activities.&lt;/li&gt;
&lt;li&gt;Short-term and medium-term batteries activate quickly but are mostly anaerobic (running without oxygen).&lt;/li&gt;
&lt;li&gt;The long-term battery is mostly aerobic (operating with oxygen).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-detailed-version"&gt;The Detailed Version
&lt;/h3&gt;&lt;p&gt;The human body is like an iPhone with a battery pack. The only difference is that this battery pack can charge beyond 100% with an almost infinite capacity to keep adding to it.&lt;/p&gt;
&lt;p&gt;The modern environment is filled with all sorts of foods and drinks around us, creating an oversupply of food. So, the charging outlet is always there, paired with this &amp;ldquo;always hungry&amp;rdquo; battery pack.&lt;/p&gt;
&lt;p&gt;The technical terms for the important battery packs are: Adipose tissue &amp;amp; Triglycerides (fat).&lt;/p&gt;
&lt;p&gt;These are stockpiled and sometimes synthesized, leading to increased volume. Stockpiling made sense in historic times when there were no guarantees about when one could get the next meal. However, with an abundance of food available today, this storage capacity is working against us.&lt;/p&gt;
&lt;h3 id="from-adp-to-atp"&gt;From ADP to ATP
&lt;/h3&gt;&lt;p&gt;While there are many ways to stock up on adipose tissue and triglycerides, there’s only one way they get consumed: to synthesize ATP from ADP. ATP stands for adenosine triphosphate, and ADP stands for adenosine diphosphate.&lt;/p&gt;
&lt;p&gt;ATP is very important for the body because it is the universal currency through which internal work gets done:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Transporting molecules across cell membranes.&lt;/li&gt;
&lt;li&gt;Untying DNA against hydrogen bonds.&lt;/li&gt;
&lt;li&gt;Moving myosin to operate muscles.&lt;/li&gt;
&lt;li&gt;Assisting with protein synthesis.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At any point in time, there’s only a very small amount of ATP available. ADP is attached to a phosphate group to become ATP. When the phosphate group is detached, energy is released to perform any work.&lt;/p&gt;
&lt;p&gt;So, that’s the &lt;em&gt;universal work&lt;/em&gt; done by the body to accomplish higher-level goals. To convert ADP to ATP, there are four types of batteries available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Super short-term battery&lt;/li&gt;
&lt;li&gt;Short-term battery&lt;/li&gt;
&lt;li&gt;Long-term battery&lt;/li&gt;
&lt;li&gt;Lean body mass&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="super-short-term-battery-the-phosphocreatine-system"&gt;&lt;strong&gt;Super Short-Term Battery: The Phosphocreatine System&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;This system provides an immediate but very limited energy buffer, allowing ATP to be rapidly regenerated. Many athletes take creatine supplements to enhance this buffer.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stores phosphate groups attached to creatine.&lt;/li&gt;
&lt;li&gt;Enables &lt;strong&gt;quick, localized recycling of ADP into ATP&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Has an &lt;strong&gt;extremely small capacity&lt;/strong&gt;, so it’s not a major factor in overall energy storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="short-term-battery-glycogen-24-hours"&gt;&lt;strong&gt;Short-Term Battery: Glycogen {24 Hours}&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;Glycogen is the body’s primary &lt;strong&gt;short-term energy store&lt;/strong&gt;, located in the liver and muscles. It provides about &lt;strong&gt;2,000 kcal&lt;/strong&gt;, roughly &lt;strong&gt;one day’s worth of energy at basal metabolic rate (BMR)&lt;/strong&gt;. However, it is inefficient due to its &lt;strong&gt;low energy density and high water retention&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Storage Locations:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Liver:&lt;/strong&gt; ~120g&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skeletal muscle:&lt;/strong&gt; ~400g&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blood glucose:&lt;/strong&gt; ~4g&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Energy Yield:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;4 kcal per gram&lt;/strong&gt; of glycogen.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total glycogen energy:&lt;/strong&gt; ~2,000 kcal.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Efficiency Issues:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Glycogen binds &lt;strong&gt;~3g of water per gram&lt;/strong&gt;, making it a &lt;strong&gt;poor long-term storage medium&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="long-term-battery-adipose-tissue-fat-50-80-days"&gt;&lt;strong&gt;Long-Term Battery: Adipose Tissue (Fat) {50-80 Days}&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;Fat is the body’s &lt;strong&gt;main high-capacity energy reserve&lt;/strong&gt;, storing significantly more energy than glycogen. It is &lt;strong&gt;more than twice as energy-dense as carbohydrates&lt;/strong&gt; and can sustain the body for &lt;strong&gt;weeks or even months&lt;/strong&gt; if needed.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Energy Density:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Fat:&lt;/strong&gt; &lt;strong&gt;9 kcal per gram&lt;/strong&gt; (vs. glycogen’s 4 kcal/g).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Example Calculation (from my 2019 data):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Body weight:&lt;/strong&gt; 200 lbs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fat mass:&lt;/strong&gt; 40 lbs = &lt;strong&gt;18,000g&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total energy in fat:&lt;/strong&gt; 18,000g × 9 kcal/g = &lt;strong&gt;162,000 kcal&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Survival estimate:&lt;/strong&gt; 162,000 kcal ÷ 2,000 kcal/day = &lt;strong&gt;~81 days&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Comparisons for Scale:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Equivalent to &lt;strong&gt;678 sticks of dynamite&lt;/strong&gt; (1 MJ ≈ 239 kcal).&lt;/li&gt;
&lt;li&gt;Nearly enough energy to fully charge a 100 kWh Tesla battery twice!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="last-resort-battery-lean-body-mass"&gt;&lt;strong&gt;Last Resort Battery: Lean Body Mass&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;When fat reserves are depleted, the body &lt;strong&gt;breaks down muscle tissue for energy&lt;/strong&gt;—a last-ditch survival mechanism.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Occurs &lt;strong&gt;only in extreme fasting or starvation&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Uses &lt;strong&gt;muscle proteins&lt;/strong&gt; as the primary fuel source, converting them into glucose or ketones.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;This process weakens the body over time&lt;/strong&gt;, making it highly undesirable.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-your-body-uses-energy"&gt;&lt;strong&gt;How Your Body Uses Energy&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;Your body constantly &lt;strong&gt;charges and discharges&lt;/strong&gt; all four energy stores at different rates, depending on your activity and food intake.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;After Eating (e.g., a Cookie):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The cookie is broken down into &lt;strong&gt;glucose&lt;/strong&gt;, which enters the bloodstream.&lt;/li&gt;
&lt;li&gt;If there is &lt;strong&gt;excess glucose&lt;/strong&gt; (as there usually is with cookies), your body:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Stores it as glycogen&lt;/strong&gt; in the &lt;strong&gt;liver and muscles&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rarely&lt;/strong&gt;, if glucose is in extreme excess, converts it to &lt;strong&gt;fat&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;During Exercise (e.g., Jogging):&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;First 3 seconds:&lt;/strong&gt; The &lt;strong&gt;phosphocreatine system&lt;/strong&gt; (1) provides immediate energy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Next 8-10 seconds:&lt;/strong&gt; Glycogen (2) is used &lt;strong&gt;anaerobically&lt;/strong&gt; (without oxygen).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Longer duration:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Glycogen (2) and fat (3) become the main energy sources.&lt;/li&gt;
&lt;li&gt;These rely on &lt;strong&gt;aerobic metabolism&lt;/strong&gt;, which takes longer to activate but provides sustained energy.&lt;/li&gt;
&lt;li&gt;Your body increases &lt;strong&gt;heart rate, breathing, and oxygen transport&lt;/strong&gt; to keep up.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;In Starvation or Carb Deprivation:&lt;/strong&gt; The body eventually resorts to &lt;strong&gt;breaking down muscle (4) for energy&lt;/strong&gt;, a last-resort survival mechanism.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="the-computer-memory-analogy-brilliant-stuff"&gt;The Computer Memory Analogy (Brilliant Stuff)
&lt;/h3&gt;&lt;p&gt;This &lt;strong&gt;energy hierarchy&lt;/strong&gt; can be compared to a computer’s &lt;strong&gt;memory hierarchy&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phosphocreatine System (1) → L1/L2 Cache&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;fastest and most immediate&lt;/strong&gt; energy source, but with &lt;strong&gt;very limited&lt;/strong&gt; capacity.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anaerobic Glycolysis (2) → RAM&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Offers &lt;strong&gt;quick access&lt;/strong&gt;, but has &lt;strong&gt;limited storage&lt;/strong&gt; and is less efficient.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aerobic Metabolism (3) → Disk Storage&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Provides &lt;strong&gt;high capacity&lt;/strong&gt; and &lt;strong&gt;efficiency&lt;/strong&gt;, but is &lt;strong&gt;slower to access&lt;/strong&gt; due to the need for oxygen and the transport of fatty acids from adipose tissue.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Just like in computing, &lt;strong&gt;moving energy around is costly&lt;/strong&gt;, so the body prioritizes &lt;strong&gt;faster but smaller&lt;/strong&gt; energy stores before tapping into &lt;strong&gt;slower but larger&lt;/strong&gt; reserves.&lt;/p&gt;</description></item><item><title>Two Word Decisions</title><link>https://shrsv.github.io/p/two-word-decisions/</link><pubDate>Fri, 14 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/two-word-decisions/</guid><description>&lt;p&gt;I&amp;rsquo;ve always been interested in decisions—two ways, really.&lt;/p&gt;
&lt;p&gt;I wanted to make better decisions.&lt;/p&gt;
&lt;p&gt;I wanted to make decisions in a better manner.&lt;/p&gt;
&lt;p&gt;When it comes to making decisions better, what I care about is &lt;strong&gt;conserving energy&lt;/strong&gt; while still getting a &lt;strong&gt;decision done and executed&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In my &lt;a class="link" href="https://shrsv.github.io/p/1741889488" &gt;previous post&lt;/a&gt;, I explained how &lt;strong&gt;vagueness is the enemy of action&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In this post, I’ll share a trick to fight against vagueness and fight for clarity.&lt;/p&gt;
&lt;h2 id="your-willpower-is-limited"&gt;Your Willpower Is Limited
&lt;/h2&gt;&lt;p&gt;We know that willpower is a scarce resource—like a battery that gets drained throughout the day as we make decisions and take actions.&lt;/p&gt;
&lt;p&gt;Every decision we make taxes this willpower battery.&lt;/p&gt;
&lt;p&gt;And sometimes, we get stuck—overthinking, worrying, or somehow unable to proceed smoothly.&lt;/p&gt;
&lt;p&gt;This usually happens when we’re faced with some sort of &lt;em&gt;problem&lt;/em&gt;, big or small.&lt;/p&gt;
&lt;p&gt;Especially when &lt;em&gt;stuck&lt;/em&gt; on something, inaction can be fatal.&lt;/p&gt;
&lt;p&gt;As noted earlier, &lt;a class="link" href="https://shrsv.github.io/p/1741024971" &gt;learning is movement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;My general experience has been that I have high self-control and willpower in the mornings, when the battery is full.&lt;/p&gt;
&lt;p&gt;But as the day progresses, my powers wane, and evenings and nights become more vulnerable.&lt;/p&gt;
&lt;p&gt;I’m more likely to waste time, break good eating habits, slouch in my posture, or falter in other ways due to this lack of willpower.&lt;/p&gt;
&lt;h2 id="how-to-get-unstuckwithout-taxing-your-willpower"&gt;How to Get Unstuck—Without Taxing Your Willpower
&lt;/h2&gt;&lt;p&gt;Not only do we want to get unstuck and move on to the next action—which will give us more clues to solve the problem at hand—but we also want to do it without draining our willpower reserves.&lt;/p&gt;
&lt;p&gt;When we’re stuck, what we need is a nudge toward something slightly better.&lt;/p&gt;
&lt;p&gt;Say I’m considering grabbing some unhealthy food, breaking my intermittent fast, or something like that.&lt;/p&gt;
&lt;p&gt;If I’m fortunate enough to notice the moment, I can try to make my next choice a &lt;em&gt;conscious two-word decision&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Health, or Taste?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Just two words. I’m asking myself: Will I let myself be guided by my desire for health or my desire for taste?&lt;/p&gt;
&lt;p&gt;Or take another example—I could &lt;em&gt;consume one more social media post or YouTube video, or I could organize my thoughts and put them into writing&lt;/em&gt;. I can ask myself:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Consume, or Create?&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="its-perfectly-fine-to-choose-the-worse-option-consciously"&gt;It’s Perfectly Fine to Choose the “Worse” Option Consciously
&lt;/h2&gt;&lt;p&gt;The point of the two-word decision is conscious decision-making. When we’re about to make a potentially harmful choice, it’s like &lt;em&gt;prompting ourselves with a question&lt;/em&gt;—and if the answer is yes, that’s fine, because it’s a deliberate choice.&lt;/p&gt;
&lt;p&gt;Here are some decisions I’ve made:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rest, or Exercise?&lt;/li&gt;
&lt;li&gt;Entertainment, or Business?&lt;/li&gt;
&lt;li&gt;Sleep, or Walk?&lt;/li&gt;
&lt;li&gt;Slump, or Sit Straight?&lt;/li&gt;
&lt;li&gt;Worry, or Act?&lt;/li&gt;
&lt;li&gt;Twitter, or Book?&lt;/li&gt;
&lt;li&gt;Assume, or Calculate?&lt;/li&gt;
&lt;li&gt;Trust, or Verify?&lt;/li&gt;
&lt;li&gt;Rest Now, or Solve the Problem?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="a-few-technicalities"&gt;A Few Technicalities
&lt;/h2&gt;&lt;p&gt;These are things I personally find helpful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Try to notice just as you’re about to do something unproductive.&lt;/li&gt;
&lt;li&gt;Put the potentially harmful option first (Option 1), then think of a slightly better or more inspiring alternative (Option 2).&lt;/li&gt;
&lt;li&gt;There’s no right or wrong decision here—as long as it’s conscious.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-bottom-line"&gt;The Bottom Line
&lt;/h2&gt;&lt;p&gt;Two-word decisions can nudge you toward better choices in a better way. Give them a try and let me know if they help you.&lt;/p&gt;</description></item><item><title>Vagueness is the Enemy of Action</title><link>https://shrsv.github.io/p/1741889488/</link><pubDate>Thu, 13 Mar 2025 18:11:28 +0000</pubDate><guid>https://shrsv.github.io/p/1741889488/</guid><description>&lt;p&gt;I wasted some time today—I realized it when I looked back at how the time slipped away.&lt;/p&gt;
&lt;p&gt;Naturally, I wondered: what went wrong here?&lt;/p&gt;
&lt;p&gt;My mind churned for a bit, wrestling with the question, until an answer popped up: &lt;em&gt;vague thoughts&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;See, I’d been chasing &lt;em&gt;correct&lt;/em&gt; judgment, aiming for &lt;em&gt;correct&lt;/em&gt; thoughts.&lt;/p&gt;
&lt;p&gt;In that pursuit of getting it right, I ended up making things more &lt;em&gt;complex&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;And that complexity? It spiraled so far that I deluded myself—straying from the simple approach I could’ve taken.&lt;/p&gt;
&lt;p&gt;After mulling it over, a kind of &lt;strong&gt;Grid of Action&lt;/strong&gt; sprang to mind, and here’s how it looks:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Vague and Wrong&lt;/em&gt; → No action&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Vague and Correct&lt;/em&gt; → No action&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Simple and Wrong&lt;/em&gt; → Action&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Simple and Correct&lt;/em&gt; → Action&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now, someone might object: “If it’s vague, how can it be judged as correct or wrong?”&lt;/p&gt;
&lt;p&gt;Fair point—it’s tricky to pin down something so hazy.&lt;/p&gt;
&lt;p&gt;But that’s the thing: both possibilities exist in that murkiness.&lt;/p&gt;
&lt;p&gt;Whether it leans right or wrong in effect, it doesn’t matter—it’s a useless exercise either way. Why? Because no action comes of it.&lt;/p&gt;
&lt;p&gt;So, here’s the takeaway: if we want to &lt;em&gt;do&lt;/em&gt;, to stay engaged, to move, to experience life, we’ve got to keep our thoughts simple at all times.&lt;/p&gt;
&lt;p&gt;Complexity isn’t the enemy—it can be tackled—but it’s best surmounted through a thousand simple steps.&lt;/p&gt;
&lt;p&gt;Each one needs to be manageable, something we can actually grip, if we’re going to act at all.&lt;/p&gt;
&lt;p&gt;So complexity is not the enemy, but vagueness definitely is - that of action.&lt;/p&gt;</description></item><item><title>About HippoRAG</title><link>https://shrsv.github.io/p/about-hipporag/</link><pubDate>Wed, 12 Mar 2025 20:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/about-hipporag/</guid><description>&lt;p&gt;These are some LLM-assisted exploration notes from the paper &lt;a class="link" href="https://arxiv.org/pdf/2405.14831" target="_blank" rel="noopener"
&gt;HippoRAG: Neurobiologically Inspired
Long-Term Memory for Large Language Models&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="the-multi-hop-problem-in-rags"&gt;The Multi-Hop Problem in RAGs
&lt;/h2&gt;&lt;p&gt;The idea of &amp;ldquo;hops&amp;rdquo; are important in RAG.&lt;/p&gt;
&lt;p&gt;Consider this example.&lt;/p&gt;
&lt;p&gt;Question 1:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Who wrote Hamlet?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;→ The answer (Shakespeare) is in one document.*&lt;/p&gt;
&lt;p&gt;Question 2:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Which university did the president of OpenAI attend?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Step 1: Retrieve information on who the president of OpenAI is (e.g., Greg Brockman).&lt;/li&gt;
&lt;li&gt;Step 2: Retrieve information on which university Greg Brockman attended (e.g., MIT).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-hipporag-achieves-a-single-step-multi-hop-retrieval"&gt;How HippoRAG Achieves a Single-Step Multi-Hop Retrieval
&lt;/h2&gt;&lt;p&gt;Traditional RAG solutions, such as IRCoT (Iterative Retrieval Chain-of-Thought) depend on &lt;em&gt;iterative retrieval&lt;/em&gt; - kind of like looking up docs in a loop.&lt;/p&gt;
&lt;p&gt;With HippoRAG, two mechanisms are combined to compress these multiple hops into one:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Building a knowledge graph (KG)&lt;/strong&gt; where concepts and relationships are indexed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Using Personalized PageRank (PPR)&lt;/strong&gt; to retrieve relevant paths across multiple documents in one query.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The benefits of the above combination makes HippoRAG:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Faster&lt;/strong&gt; (avoids iterative retrieval)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;More accurate&lt;/strong&gt; (find connections that isolated retrieval steps miss)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cheaper&lt;/strong&gt; (reduce API calls and computation)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-hipporag-builds-its-knowledge-graph-kg"&gt;How HippoRAG Builds Its Knowledge Graph (KG)
&lt;/h2&gt;&lt;p&gt;HippoRAG constructs a &lt;strong&gt;schemaless knowledge graph&lt;/strong&gt; from a text corpus by leveraging &lt;strong&gt;large language models (LLMs)&lt;/strong&gt; for &lt;strong&gt;Open Information Extraction (OpenIE)&lt;/strong&gt; and retrieval encoders for linking entities. This process enables &lt;strong&gt;multi-hop reasoning in a single retrieval step&lt;/strong&gt;.&lt;/p&gt;
&lt;h4 id="1-offline-indexing-building-the-graph"&gt;&lt;strong&gt;1. Offline Indexing (Building the Graph)&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;This step is analogous to how the &lt;strong&gt;human neocortex encodes memory&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Extract Knowledge Graph Triples&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses an &lt;strong&gt;instruction-tuned LLM&lt;/strong&gt; (e.g., GPT-3.5) to &lt;strong&gt;extract subject-predicate-object triples&lt;/strong&gt; from text.
&lt;ul&gt;
&lt;li&gt;Example:&lt;br&gt;
&lt;strong&gt;Input Passage:&lt;/strong&gt; &amp;ldquo;Steve Jobs co-founded Apple in 1976.&amp;rdquo;&lt;br&gt;
&lt;strong&gt;Extracted Triples:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;(Steve Jobs, co-founded, Apple)&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;(Apple, founded_in, 1976)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Create Graph Nodes &amp;amp; Edges&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodes&lt;/strong&gt; = extracted &lt;strong&gt;entities (noun phrases)&lt;/strong&gt; (e.g., &lt;em&gt;Steve Jobs, Apple&lt;/em&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edges&lt;/strong&gt; = relationships between entities (e.g., &lt;em&gt;co-founded&lt;/em&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Synonymy Linking (Parahippocampal Processing)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;retrieval encoders&lt;/strong&gt; (e.g., &lt;strong&gt;Contriever, ColBERTv2&lt;/strong&gt;) to &lt;strong&gt;identify similar entities&lt;/strong&gt; (e.g., &amp;ldquo;USA&amp;rdquo; = &amp;ldquo;United States&amp;rdquo;).&lt;/li&gt;
&lt;li&gt;Creates &lt;strong&gt;extra edges&lt;/strong&gt; to connect synonyms, improving retrieval robustness.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Store the Graph&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The final &lt;strong&gt;knowledge graph&lt;/strong&gt; consists of:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nodes (Entities)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Edges (Relations &amp;amp; Synonyms)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Passage Mapping&lt;/strong&gt; (Each node is linked to the original text passage for retrieval)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="2-online-retrieval-querying-the-graph"&gt;&lt;strong&gt;2. Online Retrieval (Querying the Graph)&lt;/strong&gt;
&lt;/h3&gt;&lt;p&gt;This step mimics the &lt;strong&gt;hippocampus retrieving memories&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;✅ &lt;strong&gt;Extract Query Named Entities&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The LLM identifies &lt;strong&gt;key entities&lt;/strong&gt; in the query.&lt;/li&gt;
&lt;li&gt;Example: &lt;em&gt;&amp;ldquo;Which Stanford professor works on Alzheimer&amp;rsquo;s?&amp;rdquo;&lt;/em&gt;
&lt;ul&gt;
&lt;li&gt;Query Entities: &lt;code&gt;{Stanford, Alzheimer’s}&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Find Related Nodes in the Knowledge Graph&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uses &lt;strong&gt;retrieval encoders&lt;/strong&gt; to find &lt;strong&gt;graph nodes most similar&lt;/strong&gt; to the query entities.&lt;/li&gt;
&lt;li&gt;Example: The query &lt;code&gt;{Stanford, Alzheimer’s}&lt;/code&gt; matches the node &lt;code&gt;{Thomas Südhof}&lt;/code&gt; in the KG.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Personalized PageRank (PPR) for Multi-Hop Retrieval&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Runs &lt;strong&gt;Personalized PageRank (PPR)&lt;/strong&gt; on the graph using query nodes as &lt;strong&gt;starting points&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Spreads probability over &lt;strong&gt;connected nodes&lt;/strong&gt;, enabling &lt;strong&gt;multi-hop reasoning&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Example:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;{Stanford}&lt;/code&gt; → &lt;code&gt;{Thomas Südhof}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;{Alzheimer’s}&lt;/code&gt; → &lt;code&gt;{Thomas Südhof}&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Final Retrieval:&lt;/strong&gt; Thomas Südhof is a Stanford professor working on Alzheimer’s.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;✅ &lt;strong&gt;Retrieve &amp;amp; Rank Passages&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;most relevant passages&lt;/strong&gt; are selected based on PPR scores.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="how-hipporag-uses-pagerank-to-order-results"&gt;&lt;strong&gt;How HippoRAG Uses PageRank to Order Results&lt;/strong&gt;
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Convert Text to a Graph&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extract &lt;strong&gt;entities&lt;/strong&gt; (nodes) and &lt;strong&gt;relationships&lt;/strong&gt; (edges).&lt;/li&gt;
&lt;li&gt;Example:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(Stanford, employs, Thomas Südhof)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;(Thomas Südhof, researches, Alzheimer’s)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Find Relevant Nodes&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;If the query is: &lt;em&gt;&amp;ldquo;Which Stanford professor studies Alzheimer&amp;rsquo;s?&amp;rdquo;&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;The query &lt;strong&gt;matches&lt;/strong&gt; &lt;code&gt;{Stanford, Alzheimer’s}&lt;/code&gt; in the graph.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run Personalized PageRank (PPR)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Give high starting scores to query nodes&lt;/strong&gt; (&lt;code&gt;Stanford&lt;/code&gt; and &lt;code&gt;Alzheimer’s&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Spread scores to connected nodes&lt;/strong&gt; (e.g., &lt;code&gt;Thomas Südhof&lt;/code&gt; gets a high score).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Rank Passages by PageRank Score&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Passages mentioning &lt;code&gt;Thomas Südhof&lt;/code&gt; get &lt;strong&gt;top rank&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Less relevant passages rank &lt;strong&gt;lower&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/about-hipporag/image.png"
width="1143"
height="377"
srcset="https://shrsv.github.io/p/about-hipporag/image_hu_249d6dc0537d4047.png 480w, https://shrsv.github.io/p/about-hipporag/image_hu_7e5485c6581f5719.png 1024w"
loading="lazy"
alt="alt text"
class="gallery-image"
data-flex-grow="303"
data-flex-basis="727px"
&gt;&lt;/p&gt;
&lt;h3 id="why-this-works"&gt;&lt;strong&gt;Why This Works&lt;/strong&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Finds indirect connections&lt;/strong&gt; (multi-hop retrieval).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ranks based on real-world relevance&lt;/strong&gt; rather than keyword matching.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast, since it&amp;rsquo;s done in one step.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>RAG: Not a Silver Bullet?</title><link>https://shrsv.github.io/p/1741723293/</link><pubDate>Tue, 11 Mar 2025 20:01:33 +0000</pubDate><guid>https://shrsv.github.io/p/1741723293/</guid><description>&lt;h2 id="a-few-ideas-about-rag"&gt;A Few Ideas About RAG
&lt;/h2&gt;&lt;p&gt;As I keep pouring in efforts to build &lt;a class="link" href="https://hexmos.com/liveapi/" target="_blank" rel="noopener"
&gt;LiveAPI&lt;/a&gt;, I get new ideas on how to make it better from time to time.&lt;/p&gt;
&lt;p&gt;There is a constant feeling that maybe we should have some sort of Chatbot on top of the structured API information we generate at scale.&lt;/p&gt;
&lt;p&gt;People say:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Nobody reads documentation these days&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;I don&amp;rsquo;t think anyone will read docs anymore&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Nobody cares about documentation. Code is documentation&amp;rdquo;&lt;/p&gt;
&lt;p&gt;And so on.&lt;/p&gt;
&lt;p&gt;What they also sort of imply is that - we just want to ask a Chatbot or be surfaced with the relevant information automagically in the right place at the right time.&lt;/p&gt;
&lt;h2 id="we-may-build-a-chatbot---at-some-point-in-the-future"&gt;We may build a Chatbot - at some point in the future
&lt;/h2&gt;&lt;p&gt;But for now - this post will be about one of the approaches to building Chatbots that seems to be making noise across places like Hacker News - called &amp;ldquo;RAG&amp;rdquo;&lt;/p&gt;
&lt;p&gt;RAG stands for Retrieval Augmented Generation&lt;/p&gt;
&lt;p&gt;The LLM in its primordial state is like our long-term memory or impressions. It sort of has a vague recollection of facts, ideas and sentiments. But it has to be grounded with something more concrete - before a specific answer can be given.&lt;/p&gt;
&lt;p&gt;RAG is about - helping the LLM remember better, while also helping it transform current or specific information into the framework of its answers.&lt;/p&gt;
&lt;h2 id="rag-flaws---still-too-literal"&gt;RAG Flaws - Still too literal
&lt;/h2&gt;&lt;p&gt;I&amp;rsquo;ve heard from multiple quarters - with those having comparatively deeper knowledge on the topic that RAGs often underperform.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Just tag your docs with keywords - don&amp;rsquo;t bother with RAG&amp;rdquo;&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;ve heard the above opinion expressed multiple times.&lt;/p&gt;
&lt;p&gt;Consider the following case mentioned on an &lt;a class="link" href="https://news.ycombinator.com/item?id=42174829" target="_blank" rel="noopener"
&gt;HN Thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There&amp;rsquo;s a textual records of various activities performed day to day by a bunch of people.&lt;/p&gt;
&lt;p&gt;Now we are curious - &amp;ldquo;Guess the occupation of person X&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The augmentation happens purely based on the keywords present in this question.&lt;/p&gt;
&lt;p&gt;Imagine now person X has been going to various chemistry conferences, etc but her occupation is not mentioned anywhere.&lt;/p&gt;
&lt;p&gt;Pure RAG approaches most probably will fail here because they cannot connect &amp;ldquo;attends chemistry conference&amp;rdquo; to &amp;ldquo;occupation&amp;rdquo; - because the keywords are sort of different&lt;/p&gt;
&lt;h2 id="what-is-the-way-around"&gt;What is the way around?
&lt;/h2&gt;&lt;p&gt;For things like above - we fall back to the old search and information retrieval mechanisms.&lt;/p&gt;
&lt;p&gt;We build a semantic graph - putting related nodes together.&lt;/p&gt;
&lt;p&gt;We do PageRank, or similar alternatives.&lt;/p&gt;
&lt;p&gt;We essentially do search first.&lt;/p&gt;
&lt;p&gt;The LLM layer is mostly good for &amp;ldquo;summarizing&amp;rdquo; the findings.&lt;/p&gt;
&lt;p&gt;So - the role of something like RAG becomes much more limited, or sometimes even irrelevant.&lt;/p&gt;
&lt;p&gt;Many AI apps may end up with Search followed by Summarization.&lt;/p&gt;</description></item><item><title>Rosenblatt's Perceptron (WIP)</title><link>https://shrsv.github.io/p/rosenblatts-perceptron-wip/</link><pubDate>Sun, 09 Mar 2025 23:41:21 +0530</pubDate><guid>https://shrsv.github.io/p/rosenblatts-perceptron-wip/</guid><description>&lt;p&gt;In &lt;strong&gt;Smithsonian National Museum of American History&lt;/strong&gt; - the following device
is visible:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/1.jpg"
width="600"
height="473"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/1_hu_da9d93a3881dfb7a.jpg 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/1_hu_43f6f500e490b738.jpg 1024w"
loading="lazy"
alt="rosenblatt perceptron in museum"
class="gallery-image"
data-flex-grow="126"
data-flex-basis="304px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/2.jpg"
width="600"
height="472"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/2_hu_34ffaf7e119b61ab.jpg 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/2_hu_f82eb0f2590f3273.jpg 1024w"
loading="lazy"
alt="S (Stimuli), A (Association), R (Response)"
class="gallery-image"
data-flex-grow="127"
data-flex-basis="305px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://americanhistory.si.edu/collections/object/nmah_334414" target="_blank" rel="noopener"
&gt;(src)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The device is called the &lt;strong&gt;Mark I Perceptron&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;It was built in 1957.&lt;/p&gt;
&lt;p&gt;The chief person behind construction of this device was &lt;a class="link" href="https://en.wikipedia.org/wiki/Frank_Rosenblatt" target="_blank" rel="noopener"
&gt;Frank Rosenblatt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The device had 3 parts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Stimuli receptor monitor (S)&lt;/li&gt;
&lt;li&gt;Association machinery (A)&lt;/li&gt;
&lt;li&gt;Response mechanism (S)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;This is almost a mechanical equivalent of what Minsky sort of talks
about in his &lt;a class="link" href="http://aurellem.org/society-of-mind/som-5.3.html" target="_blank" rel="noopener"
&gt;&lt;em&gt;Society of Mind&lt;/em&gt;&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/3.png"
width="332"
height="210"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/3_hu_90c47bb819a25f49.png 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/3_hu_daa6739f6d7e9fdb.png 1024w"
loading="lazy"
alt="Minsky’s Description"
class="gallery-image"
data-flex-grow="158"
data-flex-basis="379px"
&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;This diagram depicts our sensory machinery as sending information to the brain, wherein it is projected on some inner mental movie screen. Then, inside that ghostly theater, a lurking Self observes the scene and then considers what to do. Finally, that Self may act — somehow reversing all those steps — to influence the real world by sending various signals back through yet another family of remote-control accessories.
&amp;ndash; Marvin Minsky, The Society of Mind&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;And this is Rosenbaltt tweaking the perceptron:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/4.jpg"
width="497"
height="617"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/4_hu_f24684692f348bdc.jpg 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/4_hu_679e6e60d6caccd.jpg 1024w"
loading="lazy"
alt="Rosenbaltt Working with Perceptron"
class="gallery-image"
data-flex-grow="80"
data-flex-basis="193px"
&gt;&lt;/p&gt;
&lt;p&gt;You can see the &lt;a class="link" href="https://www.nytimes.com/1958/07/08/archives/new-navy-device-learns-by-doing-psychologist-shows-embryo-of.html" target="_blank" rel="noopener"
&gt;NYT&lt;/a&gt; reporting that the navy claimed the device
would eventually:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;the embryo of an electronic computer today that it expects will be able to walk, talk, see, write, reproduce itself and be conscious of its existence.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/6.png"
width="402"
height="552"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/6_hu_9bab941d4f716721.png 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/6_hu_23649921c65880b4.png 1024w"
loading="lazy"
alt="The Prediction"
class="gallery-image"
data-flex-grow="72"
data-flex-basis="174px"
&gt;&lt;/p&gt;
&lt;p&gt;All these things aside, we will try to cull some ideas from Rosenblatt&amp;rsquo;s original paper - accessible at &lt;a class="link" href="https://www.ling.upenn.edu/courses/cogs501/Rosenblatt1958.pdf" target="_blank" rel="noopener"
&gt;The Perceptron: A Probabilistic Model for Information Storage and Organization in the Brain&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="memory-is-the-foundation-for-higher-level-capabilities-but-what-is-it"&gt;Memory is the foundation for higher-level capabilities (but What is it?!)
&lt;/h2&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/memory.png"
width="450"
height="195"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/memory_hu_a3aa068bdb179f7.png 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/memory_hu_64332409e1b3268f.png 1024w"
loading="lazy"
alt="The role of memory"
class="gallery-image"
data-flex-grow="230"
data-flex-basis="553px"
&gt;&lt;/p&gt;
&lt;h2 id="the-3-questions-and-rs-area-of-focus"&gt;The 3 Questions (And R&amp;rsquo;s Area of Focus)
&lt;/h2&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/rosenblatts-perceptron-wip/focus.png"
width="477"
height="255"
srcset="https://shrsv.github.io/p/rosenblatts-perceptron-wip/focus_hu_15793160488ce3bb.png 480w, https://shrsv.github.io/p/rosenblatts-perceptron-wip/focus_hu_81cb09f09310a875.png 1024w"
loading="lazy"
alt="Focus Area"
class="gallery-image"
data-flex-grow="187"
data-flex-basis="448px"
&gt;&lt;/p&gt;
&lt;h2 id="how-is-stimulus-represented-in-storage"&gt;How is Stimulus represented in Storage?
&lt;/h2&gt;&lt;p&gt;R considers options on how storage may work - based on existing scholarship. The interesting scholarly decision happens right here - he picks the right architecture, the right bet so to speak.&lt;/p&gt;
&lt;h3 id="the-critical-insight-r-makes-a-bet-on-the-nature-of-memory"&gt;The Critical Insight: R Makes a Bet On the Nature of Memory
&lt;/h3&gt;&lt;p&gt;Position A: Coded Representational Memory (Essentially - expecting an isolated storage of memory)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The first suggests that storage of sensory information is in the form of coded representations or images, with some sort of one-to-one mapping between the sensory stimulus and the stored pattern. According to this hypothesis, if one understood the code or &amp;lsquo;wiring diagram&amp;rsquo; of the nervous system, one should, in principle, be able to discover exactly what an organism remembers by reconstructing the original sensory patterns from the &amp;lsquo;memory traces&amp;rsquo; which they have left, much as we might develop a photographic negative, or translate the pattern of electrical charges in the &amp;lsquo;memory&amp;rsquo; of a digital computer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Position B: Connectionist Memory&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The alternative approach, which stems from the tradition of British empiricism, hazards the guess that the images of stimuli may never really be recorded at all, and that the central nervous system simply acts as an intricate switching network, where retention takes the form of new connections, or pathways, between centers of activity. In many of the more recent developments of this position (Hebb&amp;rsquo;s &amp;lsquo;cell assembly,&amp;rsquo; and Hull&amp;rsquo;s &amp;lsquo;cortical anticipatory goal response,&amp;rsquo; for example) the &amp;lsquo;responses&amp;rsquo; which are associated to stimuli may be entirely contained within the CNS itself. In this case, the response represents an &amp;lsquo;idea&amp;rsquo; rather than an action.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Essentially - the difference in position is about direct recording vs indirect &amp;ldquo;impressions&amp;rdquo;.&lt;/p&gt;
&lt;h3 id="rosenblatts-rationale-for-selecting-a-connectionist-model-over-coded-representation"&gt;Rosenblatt&amp;rsquo;s Rationale for Selecting a Connectionist Model (over Coded Representation)
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Biology:&lt;/strong&gt; Coded representation is &lt;em&gt;precise&lt;/em&gt;, &lt;em&gt;definite&lt;/em&gt;, and &lt;strong&gt;rigid&lt;/strong&gt; &amp;ndash; almost machine-like. Rosenblatt appreciated that different organisms remember things differently - learning from the same source! These individual variations in storage encouraged him to reject coded representation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simplicity:&lt;/strong&gt; Of the options available, the connectionist model is simpler and economical. So he favored such a model.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Probabilistic Pattern Matching:&lt;/strong&gt; Rosenblatt noticed that humans and other creatures can match and work with images in diferent configurations, lighting, etc. That means - we are able to generalize the detection of objects upto an extent, classify them, and so on. He expected a more flexible model, rather than a rigid model to be able to perform this sort of work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Recall is natural and direct in connectionist model:&lt;/strong&gt; In the coded method - learning or retrieving information requires a special lookup process. In connectionist model, learning is merely response pathway, given a stimulus. A simpler model to get the same function.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stronger Mathematical Basis:&lt;/strong&gt; R embraced probabilistic models over deterministic ones from earlier (such as McCulloh-Pitts). He demonstrates how a random configuration of connections is able to achieve recognition (or learning).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Less Idealized, More biological model:&lt;/strong&gt; He critiques earlier models - from McCulloh and Minsky - calling them too structured or algorithmic, whereas biological learning is &lt;strong&gt;stochastic&lt;/strong&gt;. Connectionism better aligns with real-world learning.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In short - R betted on &lt;strong&gt;adaptive learning&lt;/strong&gt; over &lt;strong&gt;rigid storage&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;R shows that learning and memory are not different things - the connectionist model as a simpler model - collapses storage and learning into one!&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Mastery's Price: Paid in Life Itself</title><link>https://shrsv.github.io/p/1741373607/</link><pubDate>Fri, 07 Mar 2025 18:53:27 +0000</pubDate><guid>https://shrsv.github.io/p/1741373607/</guid><description>&lt;h2 id="mastery-demands-payment-in-life-units"&gt;Mastery Demands Payment in Life Units
&lt;/h2&gt;&lt;p&gt;Let&amp;rsquo;s think a bit about the 10,000 hour rule.&lt;/p&gt;
&lt;p&gt;It says that &lt;em&gt;mastery&lt;/em&gt; in a serious discipline demands a minimum
focused investment of around 10,000 hours in &lt;em&gt;deliberate practice&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Deliberate practice means - finding benchmark behaviors, breaking
them down, and performing them consistently to get nearer
to perfection.&lt;/p&gt;
&lt;p&gt;10,000 hours roughly breaks down like this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;9 years of effort, given 3 hours per day, 365 days a year&lt;/li&gt;
&lt;li&gt;13 years of effort, given 2 hours per day, 365 days a year&lt;/li&gt;
&lt;li&gt;27 years of effort, given 1 hour per day, 365 days year&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These are staggering numbers - when we look at how short our lives
are.&lt;/p&gt;
&lt;p&gt;Half our lives - we are either sleeping or working on maintenance
tasks.&lt;/p&gt;
&lt;p&gt;The other half - we&amp;rsquo;re trapped in various maladies and difficulties&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;and rarely give sufficient time and energy to deliberately get
better at something.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For most humans - mastering even 1 serious discipline is a lifetime
achievement.&lt;/p&gt;
&lt;p&gt;The vast majority of humans reach their graves having mastered not
a single serious discipline in their lives.&lt;/p&gt;
&lt;p&gt;That means, the vast majority of humans have never experienced
peak performance within themselves, they have never known what
it means to fulfill even a portion of their real potentials.&lt;/p&gt;
&lt;h2 id="why-should-we-care-about-mastery"&gt;Why should we care about &amp;ldquo;Mastery&amp;rdquo;?
&lt;/h2&gt;&lt;p&gt;It may sound like a vague word invented by people with too much time
sometimes on their hands.&lt;/p&gt;
&lt;p&gt;But really - it isn&amp;rsquo;t.&lt;/p&gt;
&lt;p&gt;There are two sides to &amp;ldquo;Mastery&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;First - the less important side: The social side.&lt;/p&gt;
&lt;p&gt;A masterful performance is usually judged in a social context.&lt;/p&gt;
&lt;p&gt;In any era - we have the top scientists, sportsmen, politicians,
actors, and so on.&lt;/p&gt;
&lt;p&gt;We have the historical greats, Newton, Einstein, Beethoven, and on
and on.&lt;/p&gt;
&lt;p&gt;We all know their names.&lt;/p&gt;
&lt;p&gt;They were much, much better than their contemporaries. Some of them
were better than anyone ever in their fields of expertise.&lt;/p&gt;
&lt;p&gt;It is sort of a social peak - and masters are at the top - in
their areas of expertise.&lt;/p&gt;
&lt;p&gt;But as I said - there are two sides to &amp;ldquo;Mastery&amp;rdquo;, and the social
side - of being at the top of list is of lesser importance.&lt;/p&gt;
&lt;h2 id="the-more-important-side-of-mastery"&gt;The More Important Side of &amp;ldquo;Mastery&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;The more important side of &amp;ldquo;Mastery&amp;rdquo; is that - it hits at the
core of what it means to be a human.&lt;/p&gt;
&lt;p&gt;You may look at the animal kingdom - you&amp;rsquo;ll find no adult animal practicing
getting better in any area of life, and trying to master it.&lt;/p&gt;
&lt;p&gt;There is no such effort.&lt;/p&gt;
&lt;p&gt;In humans - we can see a higher state and try for it. We understand
this term called &amp;ldquo;potential&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;You know that if you keep practicing, and trying, you will eventually
get better - and the experience of life will change for you.&lt;/p&gt;
&lt;p&gt;That is the key driver for Mastery.&lt;/p&gt;
&lt;p&gt;And most importantly? The &lt;em&gt;experience of mastery cannot be bought or
sold in the market&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Once you&amp;rsquo;ve mastered something - the experience you get out of it -
is solely your own. When performing - what you go through psychologically
cannot be counted through numbers.&lt;/p&gt;
&lt;p&gt;Nobody can buy your experience. Sure, they may hire you, they may associate
with you - but nobody can buy the experience of mastery.&lt;/p&gt;
&lt;p&gt;One struggles for a decade or more - and pay a hefty price in &lt;strong&gt;time, effort
and emotions&lt;/strong&gt; &amp;ndash; all for a simple experience of mastery.&lt;/p&gt;
&lt;p&gt;And no rich person, or a powerful person, can buy or grab it for themselves.&lt;/p&gt;
&lt;p&gt;The only currency through which mastery can be obtained is life itself.&lt;/p&gt;
&lt;h2 id="what-mastery-stands-for-in-human-life"&gt;What Mastery Stands For in Human Life
&lt;/h2&gt;&lt;p&gt;The desire and effort for mastery in any area of human life stands for
intelligence, the human capacity for envisioning better states, and working
for it.&lt;/p&gt;
&lt;p&gt;It is waking up the inner human within the animal, and to help it guide
towards a higher potential.&lt;/p&gt;
&lt;p&gt;That is what Mastery means, and it is worth having a few words in our
vocabularies to remind ourselves of such a great potential.&lt;/p&gt;</description></item><item><title>Leadership: Action That Inspires</title><link>https://shrsv.github.io/p/1741287251/</link><pubDate>Thu, 06 Mar 2025 18:54:11 +0000</pubDate><guid>https://shrsv.github.io/p/1741287251/</guid><description>&lt;h2 id="a-definition-of-leadership"&gt;A Definition of Leadership
&lt;/h2&gt;&lt;p&gt;These days the word &lt;em&gt;leadership&lt;/em&gt; has become loaded with
many meanings, explanations, and imagery across various
media.&lt;/p&gt;
&lt;p&gt;But in its essence - leadership simply means &lt;em&gt;to lead&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The roots of the word &lt;em&gt;lead&lt;/em&gt; emerge from an Old English word &lt;em&gt;laeden&lt;/em&gt;
which means &amp;ldquo;to go first, to guide&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Therefore - leadership is closely tied to:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Taking action&lt;/li&gt;
&lt;li&gt;Taking action &lt;em&gt;before others&lt;/em&gt; (such that others &lt;em&gt;follow&lt;/em&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;There is an inherent sense of adventure - in &amp;ldquo;going first&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;But an even more important aspect of this is that - the direction
and action of the leader - encourage others to follow suit.&lt;/p&gt;
&lt;p&gt;Therefore in its elemental form: &lt;strong&gt;Leadership is action that inspires
further action in others&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="how-to-identify-leadership-potential"&gt;How to Identify Leadership Potential
&lt;/h2&gt;&lt;p&gt;While leadership at its core is about taking action and inspiring
others to do the same - let&amp;rsquo;s take a step back.&lt;/p&gt;
&lt;p&gt;Why does anyone take action?&lt;/p&gt;
&lt;p&gt;In day to day life, we see two types of actions:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Asking&lt;/li&gt;
&lt;li&gt;Proposing&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Usually - you are asking because you&amp;rsquo;re not sure what needs doing.&lt;/p&gt;
&lt;p&gt;Or maybe you don&amp;rsquo;t want to put in the work necessary to settle on
a direction.&lt;/p&gt;
&lt;p&gt;Getting more certainty often demands more action!&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re low on energy or tired - you&amp;rsquo;re unlikely to make demands on
yourself
to get clarity or conviction.&lt;/p&gt;
&lt;p&gt;So those lacking conviction or those unwilling to act by themselves to
acquire conviction are usually the ones asking.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;Shall I do X to solve Y?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hidden under the questions like the above - we see that there&amp;rsquo;s no
conviction,
only a low-effort desire to find out what needs doing.&lt;/p&gt;
&lt;p&gt;However, the ones who lead aren&amp;rsquo;t asking these sorts of questions.&lt;/p&gt;
&lt;p&gt;Instead - they are doing the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;They&amp;rsquo;re experimenting and figuring things out to build personal
conviction.&lt;/li&gt;
&lt;li&gt;Once they have conviction - they are making proposals to others.&lt;/li&gt;
&lt;li&gt;They may seek inputs, suggestions, or support from others - but they are
in action, moving the agenda forward.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In short, future leaders are working to acquire conviction and then propose:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&amp;ldquo;We must do X to solve Y. I will start with doing a part of X. Do you have
any suggestions on my proposal? Would you like to join me in this effort?&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at the amount of extra effort needed to make a proposal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Studying the situation&lt;/li&gt;
&lt;li&gt;Taking action to deepen understanding&lt;/li&gt;
&lt;li&gt;Developing conviction&lt;/li&gt;
&lt;li&gt;Making a proposal to others&lt;/li&gt;
&lt;li&gt;Take comments, criticism, and include others in the agenda&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="leadership-in-practice"&gt;Leadership in Practice
&lt;/h2&gt;&lt;p&gt;So what does it take to lead?&lt;/p&gt;
&lt;p&gt;One must continuously study the field and situation.&lt;/p&gt;
&lt;p&gt;And one must take action to validate one&amp;rsquo;s ideas and develop conviction.&lt;/p&gt;
&lt;p&gt;The conviction must then be used to fuel a compelling proposal.&lt;/p&gt;
&lt;p&gt;Finally, the proposal must be refined with the inputs from others&amp;hellip;&lt;/p&gt;
&lt;p&gt;And this will lead to a group acting together.&lt;/p&gt;
&lt;p&gt;But it all starts with an individual&amp;rsquo;s desire and willingness to act first.&lt;/p&gt;</description></item><item><title>Practical Focus: Saying "Not Now" Instead of "No"</title><link>https://shrsv.github.io/p/1741201733/</link><pubDate>Wed, 05 Mar 2025 19:08:53 +0000</pubDate><guid>https://shrsv.github.io/p/1741201733/</guid><description>&lt;p&gt;People often say, &amp;ldquo;Focus is about saying No.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;But experience tells us it is hard to say &amp;ldquo;no&amp;rdquo; to things we want to do.&lt;/p&gt;
&lt;p&gt;And every &amp;ldquo;no&amp;rdquo; that you muster chips away at your limited supply of willpower.&lt;/p&gt;
&lt;p&gt;So, how can we make focus practical?&lt;/p&gt;
&lt;p&gt;That is, what does it mean to arrange for practical focus?&lt;/p&gt;
&lt;p&gt;Replace &amp;ldquo;no&amp;rdquo; with &amp;ldquo;not now.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;How?&lt;/p&gt;
&lt;p&gt;Many people have spoken and written about &amp;ldquo;time blocking.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;The essence of &amp;ldquo;time blocking&amp;rdquo; is not to say &amp;ldquo;no,&amp;rdquo; but rather to adapt the phrase &amp;ldquo;not now.&amp;rdquo;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Yes, you can watch a movie. But not now.&lt;/li&gt;
&lt;li&gt;Yes, you can kill time on YouTube. But not now.&lt;/li&gt;
&lt;li&gt;Yes, you can respond to chat/email. But not now.&lt;/li&gt;
&lt;li&gt;Yes, you can worry about 1000 things not going the way you want. But not now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See how simple it is?&lt;/p&gt;
&lt;p&gt;You don&amp;rsquo;t have to outright reject a low-value activity.&lt;/p&gt;
&lt;p&gt;You just have to delay it.&lt;/p&gt;
&lt;p&gt;And many times, if you succeed in delaying it, you&amp;rsquo;ll also succeed in rejecting it.&lt;/p&gt;
&lt;p&gt;In more positive terms, time blocking means the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A duration (4 hours of time, starting now)&lt;/li&gt;
&lt;li&gt;The most important thing that deserves your focus&lt;/li&gt;
&lt;li&gt;A defensive fortification mantra called &amp;ldquo;not now&amp;rdquo; directed at every distraction&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>A Simple Tool To Quickly Find API Entry Points Across All Your Repositories</title><link>https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/</link><pubDate>Wed, 05 Mar 2025 23:43:58 +0530</pubDate><guid>https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/</guid><description>&lt;p&gt;Imagine you’re deep in a coding session, cruising through your repository, when bam—you hit an API reference that stops you cold.&lt;/p&gt;
&lt;p&gt;You’ve got no idea where it lives, and now you’re stuck.&lt;/p&gt;
&lt;p&gt;Sound familiar? That’s the pain I want to talk about today, and how a tool I’ve been tinkering with—LiveAPI—tackles it head-on.&lt;/p&gt;
&lt;p&gt;This isn’t just about saving time; it’s about keeping your flow intact and your sanity in check.&lt;/p&gt;
&lt;p&gt;Let’s break it down.&lt;/p&gt;
&lt;h2 id="the-problem"&gt;The Problem
&lt;/h2&gt;&lt;p&gt;Picture this: you’re in &lt;strong&gt;repository R1&lt;/strong&gt;, poking around in &lt;strong&gt;file F1&lt;/strong&gt;, line &lt;strong&gt;L1&lt;/strong&gt;, and you spot a call to some API route—like &lt;code&gt;/users/{id}/profile&lt;/code&gt;. Cool, but where does it come from? Is it in this repo? Another one? You’ve got a hunch it’s &lt;em&gt;somewhere&lt;/em&gt; in your sprawling codebase, but pinning it down feels like searching for a needle in a haystack.&lt;/p&gt;
&lt;p&gt;Here’s what usually happens:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You grep through the current repo. Nothing.&lt;/li&gt;
&lt;li&gt;You vaguely recall seeing it in &lt;strong&gt;repository R2&lt;/strong&gt;, maybe in &lt;strong&gt;file F2&lt;/strong&gt;, around &lt;strong&gt;line L2&lt;/strong&gt;—but you’re not sure.&lt;/li&gt;
&lt;li&gt;You dig through docs (if they exist), Slack threads, or—worst case—ping a colleague who’s just as busy as you.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This isn’t just annoying; it’s a &lt;strong&gt;flow killer&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;You’re yanked out of your groove, wasting minutes (or hours) chasing down a single endpoint.&lt;/p&gt;
&lt;p&gt;Sometimes you figure it out, sometimes you don’t, but either way, it’s a disruption.&lt;/p&gt;
&lt;p&gt;Multiply that by dozens of APIs across multiple repos, and you’ve got a productivity nightmare.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Pain Point&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Impact&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unclear API location&lt;/td&gt;
&lt;td&gt;Breaks focus, slows momentum&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vague recollection&lt;/td&gt;
&lt;td&gt;Extra mental load to recall&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manual hunting&lt;/td&gt;
&lt;td&gt;Time sink, inconsistent results&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bothering colleagues&lt;/td&gt;
&lt;td&gt;Delays, team friction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="how-liveapi-solves-the-problem"&gt;How LiveAPI Solves the Problem
&lt;/h2&gt;&lt;p&gt;Enter &lt;strong&gt;LiveAPI&lt;/strong&gt;, a tool built to cut through this mess.&lt;/p&gt;
&lt;p&gt;It’s not some lightweight script—it’s an &lt;strong&gt;infrastructure-scale solution&lt;/strong&gt; designed to map out all your REST backend APIs across every repository you throw at it.&lt;/p&gt;
&lt;p&gt;Whether you’ve got dozens, hundreds, or even thousands of repos, LiveAPI’s got your back.&lt;/p&gt;
&lt;p&gt;Here’s the magic:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Broad coverage&lt;/strong&gt;: We support the &lt;strong&gt;top 15 languages&lt;/strong&gt; and &lt;strong&gt;60+ frameworks&lt;/strong&gt;. Python with Flask? Java with Spring? Node.js with Express? You name it, we handle it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Real-time tracking&lt;/strong&gt;: LiveAPI watches your repos for changes. If an endpoint gets updated, added, or axed, it stays in sync—no stale data here.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fast search&lt;/strong&gt;: Need to find &lt;code&gt;/users/{id}/profile&lt;/code&gt;? Type it in, and LiveAPI spits out the exact endpoint, parameters, and even a description if you’ve got one documented.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Source code links&lt;/strong&gt;: One click, and you’re at the exact file and line—like jumping from &lt;strong&gt;R1, F1, L1&lt;/strong&gt; to &lt;strong&gt;R2, F2, L2&lt;/strong&gt; without breaking a sweat.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think of it like a GPS for your APIs.&lt;/p&gt;
&lt;p&gt;Instead of fumbling through repos or bugging your teammate, you get a clean, instant path to the source.&lt;/p&gt;
&lt;p&gt;Here’s a quick example of what you might see:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Search Query&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Result&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;/users/{id}/profile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;GET endpoint, returns user profile&lt;/td&gt;
&lt;td&gt;&lt;code&gt;R2/F2#L2&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;POST /auth/login&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Authenticates user, returns token&lt;/td&gt;
&lt;td&gt;&lt;code&gt;R3/F5#L12&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPI.png"
width="1000"
height="634"
srcset="https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPI_hu_47e7b8f3e8426190.png 480w, https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPI_hu_e017e1e2ca7c2872.png 1024w"
loading="lazy"
alt="Where is My API"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="378px"
&gt;&lt;/p&gt;
&lt;p&gt;This is one of the visuals I’ve got—it’s a crisp look at how LiveAPI ties an endpoint to its origin in one glance.&lt;/p&gt;
&lt;h2 id="roadmap-to-improve-developer-experience"&gt;Roadmap to Improve Developer Experience
&lt;/h2&gt;&lt;p&gt;LiveAPI’s already pretty handy, but we’re not stopping there.&lt;/p&gt;
&lt;p&gt;Here’s what’s cooking to make it even better:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Intelligent chat&lt;/strong&gt;: Search is great, but what if you could &lt;em&gt;talk&lt;/em&gt; to your API map? We’re exploring a chat interface where you can ask things like, “Which endpoints handle user auth?” and get a conversational breakdown. It’s about building on your infrastructure, not just finding it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IDE extensions&lt;/strong&gt;: Imagine right-clicking an API call in your editor and pulling up its details without leaving your context. We’re working on plugins for VS Code, IntelliJ, and others to make that a reality.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Accuracy &amp;amp; reliability&lt;/strong&gt;: We’re testing and tweaking every day. The goal? Make sure LiveAPI catches every endpoint, every change, every time—no misses, no lag.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The focus is on keeping it seamless.&lt;/p&gt;
&lt;p&gt;You shouldn’t have to think about the tool; it should just work when you need it.&lt;/p&gt;
&lt;h2 id="how-liveapi-solves-the-entry-point-problem-reiterate"&gt;How LiveAPI Solves the Entry Point Problem (Reiterate)
&lt;/h2&gt;&lt;p&gt;Let’s circle back to that core headache: finding where your APIs live.&lt;/p&gt;
&lt;p&gt;LiveAPI doesn’t just slap a band-aid on it—it &lt;strong&gt;rewrites the game&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;By indexing every REST endpoint across all your repos, it turns a scattered hunt into a single, confident click.&lt;/p&gt;
&lt;p&gt;Say you’re staring at that &lt;code&gt;/users/{id}/profile&lt;/code&gt; call again. With LiveAPI:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Punch it into the search.&lt;/li&gt;
&lt;li&gt;See the endpoint, its params, and a link to &lt;strong&gt;R2, F2, L2&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Jump straight there—no grep, no guesswork, no Slack pings.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPISolution.png"
width="1000"
height="634"
srcset="https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPISolution_hu_cd4eaa9193d5397a.png 480w, https://shrsv.github.io/p/a-simple-tool-to-quickly-find-api-entry-points-across-all-your-repositories/WhereIsMyAPISolution_hu_258cb3a522a491b8.png 1024w"
loading="lazy"
alt="Where is My API - LiveAPI Knows"
class="gallery-image"
data-flex-grow="157"
data-flex-basis="378px"
&gt;
This second image nails it—showing the leap from query to code in action.&lt;/p&gt;
&lt;p&gt;It’s not just about speed (though it’s fast).&lt;/p&gt;
&lt;p&gt;It’s about &lt;strong&gt;staying in the zone&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;No more context-switching or mental juggling.&lt;/p&gt;
&lt;p&gt;Whether you’re debugging, onboarding, or just curious, LiveAPI hands you the keys to your API kingdom.&lt;/p&gt;
&lt;h2 id="wrapping-up"&gt;Wrapping Up
&lt;/h2&gt;&lt;p&gt;If you’re tired of playing API hide-and-seek across your repositories, give LiveAPI a spin.&lt;/p&gt;
&lt;p&gt;It’s built for developers like us—people who want answers fast and flow uninterrupted.&lt;/p&gt;
&lt;p&gt;Check out the &lt;a class="link" href="https://hexmos.com/liveapi" target="_blank" rel="noopener"
&gt;LiveAPI site&lt;/a&gt; for more, or drop a comment if you’ve got ideas to make it even better.&lt;/p&gt;
&lt;p&gt;What’s your biggest API related horror story? I’d love to hear it.&lt;/p&gt;</description></item><item><title>LiveAPI Rebuilt: A Scalable and Reliable API Documentation Tool</title><link>https://shrsv.github.io/p/1741111626/</link><pubDate>Tue, 04 Mar 2025 18:07:06 +0000</pubDate><guid>https://shrsv.github.io/p/1741111626/</guid><description>&lt;p&gt;Hi there! I&amp;rsquo;m Shrijith Venkatrama, founder of Hexmos. Right now, I’m building &lt;a class="link" href="https://hexmos.com/liveapi" target="_blank" rel="noopener"
&gt;LiveAPI&lt;/a&gt;, a tool designed to make generating API documentation from your code incredibly easy.&lt;/p&gt;
&lt;p&gt;Over the past few months, we’ve been hard at work refining LiveAPI to be more robust, scalable, and user-friendly. Here’s a look at what we’ve been up to.&lt;/p&gt;
&lt;h2 id="what-we-did-in-november-and-december"&gt;What We Did in November and December
&lt;/h2&gt;&lt;p&gt;Towards the end of last year, we ramped up our outreach efforts, connecting with engineering leaders, CTOs, technical freelancers, and experienced developers. Many of them were generous enough to try out LiveAPI and provide us with invaluable feedback.&lt;/p&gt;
&lt;p&gt;We closely observed how users onboarded, interacted with, and benefited from LiveAPI. What became clear was that while the concept was strong, the product needed significant improvements before it could truly serve the needs of professional developers. With that realization, we dedicated the past three months to making fundamental enhancements.&lt;/p&gt;
&lt;h2 id="identifying-key-issues"&gt;Identifying Key Issues
&lt;/h2&gt;&lt;p&gt;Through our interactions and testing, we uncovered several major pain points:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Handling Large Codebases&lt;/strong&gt;: Many users experienced failures when processing large repositories, making the tool impractical for sizable projects.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Challenges with Multi-Project Repos&lt;/strong&gt;: Codebases structured as monorepos or with multiple subprojects often encountered errors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pricing Concerns&lt;/strong&gt;: Users expressed a preference for API-count-based pricing rather than a repository-based model.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Lack of Framework Support&lt;/strong&gt;: Several critical frameworks were missing from our compatibility list, limiting adoption.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Accuracy Issues&lt;/strong&gt;: Due to size limitations, the accuracy of generated documentation was sometimes inconsistent.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Unstable LLM API Calls&lt;/strong&gt;: Intermittent failures occurred when making LLM-based API calls, and we lacked a robust retry mechanism.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Uninspiring Documentation Design&lt;/strong&gt;: The generated documentation needed a more polished, professional, and visually appealing design.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="re-architecting-liveapi-the-solution"&gt;Re-Architecting LiveAPI: The Solution
&lt;/h2&gt;&lt;p&gt;Initially, we thought we could address these issues with incremental fixes. However, as we dug deeper, it became clear that a more fundamental overhaul was necessary. Over the past three months, we completely re-architected LiveAPI’s backend to build a more stable and scalable system.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Event-Driven Architecture&lt;/strong&gt;: We transitioned to a fully event-driven approach, ensuring better scalability and responsiveness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Redis-Powered Queues and Streams&lt;/strong&gt;: We adopted Redis to efficiently manage queues, data structures, events, and streams, significantly improving performance.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reliable LLM Interactions&lt;/strong&gt;: We developed new mechanisms to enhance the reliability of LLM-based API calls, minimizing failures and improving consistency.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Scalability for Large Repos&lt;/strong&gt;: We tackled repository size limitations, enabling us to generate documentation for 150-200 APIs per project with ease. This number is expected to grow further as our optimizations continue.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Future-Proof Infrastructure&lt;/strong&gt;: The event-driven architecture allows us to scale dynamically based on demand, ensuring a seamless experience for users.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enhanced Documentation Design&lt;/strong&gt;: Improving the documentation layout and visual appeal required a steep learning curve for our team, but the result is a much more engaging and professional output.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="the-new-and-improved-liveapi-whats-next"&gt;The New and Improved LiveAPI: What’s Next?
&lt;/h2&gt;&lt;p&gt;With these changes in place, LiveAPI now offers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Higher Reliability&lt;/strong&gt;: Automated document generation is now far more stable and dependable.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Better Support for Large Repositories&lt;/strong&gt;: Even complex, multi-project repos can be processed with ease.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Visually Appealing Documentation&lt;/strong&gt;: The new design makes API documentation more readable and professional.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Improved Accuracy&lt;/strong&gt;: The enhancements result in more precise and complete API documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Support 60+ Frameworks&lt;/strong&gt;: We now support the top 15 languages and around 60 frameworks within them&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’re incredibly excited about these improvements and can’t wait to share them with our users. Stay tuned for the official release of the new LiveAPI, and if you haven’t tried it yet, now’s a great time to check it out!&lt;/p&gt;</description></item><item><title>Don't Add More Garbage to the World</title><link>https://shrsv.github.io/p/1741028143/</link><pubDate>Mon, 03 Mar 2025 18:55:43 +0000</pubDate><guid>https://shrsv.github.io/p/1741028143/</guid><description>&lt;p&gt;Steve Jobs said taste is paramount to business leaders who wish to do well.&lt;/p&gt;
&lt;p&gt;I think that&amp;rsquo;s a bit too abstract to put into practice on a day-to-day
basis.&lt;/p&gt;
&lt;p&gt;Instead, I prefer thinking of it this way: &amp;ldquo;Let&amp;rsquo;s not put more garbage
into the world.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;That is, it is a virtue to be critical about one&amp;rsquo;s own works.&lt;/p&gt;
&lt;p&gt;When our standards are high, and we refuse to pollute the lives of others
due to greed, impatience, and such vices, we automatically imbibe &amp;ldquo;taste.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;No esoteric or mystical skill required this way.&lt;/p&gt;</description></item><item><title>Learning is Movement</title><link>https://shrsv.github.io/p/1741024971/</link><pubDate>Mon, 03 Mar 2025 18:03:05 +0000</pubDate><guid>https://shrsv.github.io/p/1741024971/</guid><description>&lt;p&gt;Learning is movement, radical change. It is not about sitting still and absorbing information. It is about moving forward and making things happen.&lt;/p&gt;</description></item><item><title>Focusing Questions: The Key to Getting Things Done</title><link>https://shrsv.github.io/p/1740944326/</link><pubDate>Sun, 02 Mar 2025 19:38:46 +0000</pubDate><guid>https://shrsv.github.io/p/1740944326/</guid><description>&lt;p&gt;There are essentially two types of people: those who are successful and those who ask &lt;strong&gt;defocusing&lt;/strong&gt; questions.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;defocusing&lt;/strong&gt; question is something like: &amp;ldquo;What can I do about this?&amp;rdquo;. This creates a huge list of busywork for you – which keeps you running around for a long time with very little results to show for it.&lt;/p&gt;
&lt;p&gt;Instead, try a &lt;strong&gt;FOCUSING&lt;/strong&gt; question: &amp;ldquo;What is &lt;strong&gt;ONE&lt;/strong&gt; thing if I do, everything else becomes easier or irrelevant?&amp;rdquo;&lt;/p&gt;
&lt;p&gt;You have to be really careful about it. If you pick an actually important thing, your life will become so much better because of this.&lt;/p&gt;</description></item><item><title>A Friendly Step-by-Step Tutorial on the Vanishing Gradient Problem</title><link>https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/</link><pubDate>Sat, 01 Mar 2025 22:46:54 +0530</pubDate><guid>https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Hi there! I&amp;rsquo;m Shrijith Venkatrama, founder of Hexmos. Right now, I’m building &lt;a class="link" href="https://hexmos.com/liveapi" target="_blank" rel="noopener"
&gt;LiveAPI&lt;/a&gt;, a tool that makes generating API docs from your code ridiculously easy.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;In this hands-on tutorial, we’re going to explore the vanishing gradient problem in deep neural networks—a tricky issue that can slow down or even stop learning in early layers.&lt;/p&gt;
&lt;p&gt;You can run the sample code in a Jupyter Notebook, see diagrams, and have those &amp;ldquo;aha!&amp;rdquo; moments as we go.&lt;/p&gt;
&lt;p&gt;We’ll use Python with NumPy (and a touch of PyTorch later) to keep things clear and practical.&lt;/p&gt;
&lt;p&gt;By the end, you’ll also see how the ReLU activation function can save the day!&lt;/p&gt;
&lt;p&gt;Let’s dive in, step by step, with bite-sized code snippets and plenty of explanations then.&lt;/p&gt;
&lt;h2 id="setting-up-your-environment"&gt;Setting Up Your Environment
&lt;/h2&gt;&lt;p&gt;First, let’s get our tools ready. We’ll use NumPy for calculations and Matplotlib for visualizations. Open a Jupyter Notebook and run this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Now, let’s define the &lt;strong&gt;sigmoid activation function&lt;/strong&gt; and its derivative, since they’re central to understanding the vanishing gradient problem.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;sigmoid_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;What’s Happening?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The sigmoid function squashes any input into a range between 0 and 1.&lt;/li&gt;
&lt;li&gt;Its derivative (which we’ll use in backpropagation) is always small—its maximum value is 0.25. This tiny derivative is a big clue to why gradients vanish!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let’s visualize sigmoid and its derivative to get a feel for them:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;linspace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Sigmoid&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;sigmoid_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Derivative&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Sigmoid and Its Derivative&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Input&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Output&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/1.png"
width="567"
height="455"
srcset="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/1_hu_5790dd6e72c13f46.png 480w, https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/1_hu_10c08935cf9f4cd2.png 1024w"
loading="lazy"
alt="Sigmoid and Derivative"
class="gallery-image"
data-flex-grow="124"
data-flex-basis="299px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Aha Moment&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Notice how the derivative peaks at 0.25 and drops to near 0 for large positive or negative inputs. When we multiply these small values across layers, gradients can shrink fast.&lt;/p&gt;
&lt;h2 id="building-a-tiny-neural-network"&gt;Building a Tiny Neural Network
&lt;/h2&gt;&lt;p&gt;Let’s create a simple network with:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;1 input neuron (value = 0.5)&lt;/li&gt;
&lt;li&gt;2 hidden layers (1 neuron each)&lt;/li&gt;
&lt;li&gt;1 output neuron (target = 0.8)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We’ll set all weights to 0.5 and biases to 0 for simplicity.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Input and target&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;input_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;target_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Weights and biases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;weights1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="c1"&gt;# Input to Hidden Layer 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bias1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;weights2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="c1"&gt;# Hidden Layer 1 to Hidden Layer 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bias2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;weights3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt; &lt;span class="c1"&gt;# Hidden Layer 2 to Output&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bias3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/5.png"
width="646"
height="70"
srcset="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/5_hu_4b8236c3191dc84b.png 480w, https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/5_hu_7f3e17cf2f575d96.png 1024w"
loading="lazy"
alt="layers"
class="gallery-image"
data-flex-grow="922"
data-flex-basis="2214px"
&gt;&lt;/p&gt;
&lt;p&gt;Each arrow has a weight of 0.5, and each neuron uses the sigmoid function&lt;/p&gt;
&lt;h2 id="forward-passmaking-a-prediction"&gt;Forward Pass—Making a Prediction
&lt;/h2&gt;&lt;p&gt;Let’s compute the output step by step. Run each line and see how the signal flows:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hidden Layer 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias1&lt;/span&gt; &lt;span class="c1"&gt;# 0.5 * 0.5 + 0 = 0.25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer1_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ 0.562&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hidden Layer 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer1_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias2&lt;/span&gt; &lt;span class="c1"&gt;# 0.5 * 0.562 ≈ 0.281&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer2_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ 0.570&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Output Layer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;output_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer2_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias3&lt;/span&gt; &lt;span class="c1"&gt;# 0.5 * 0.570 ≈ 0.285&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ 0.571&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Predicted Output: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.3f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, Target: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;target_output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Aha Moment&lt;/strong&gt;:&lt;br&gt;
Our prediction (≈ 0.571) is way off the target (0.8). We need to adjust the weights, but that depends on gradients. Let’s see if they’re strong enough to help!&lt;/p&gt;
&lt;h2 id="compute-the-loss"&gt;Compute the Loss
&lt;/h2&gt;&lt;p&gt;Let’s measure how bad our prediction is using mean squared error:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;loss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;power&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;target_output&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Loss: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.3f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Plot the loss:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ro&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Loss&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Loss Value&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/2.png"
width="398"
height="297"
srcset="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/2_hu_e39b56f774474e35.png 480w, https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/2_hu_97c440798df016f3.png 1024w"
loading="lazy"
alt="Loss"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="321px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s Happening?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The loss (≈ 0.026) shows our error. Backpropagation will use gradients to reduce this, but let’s see if those gradients hold up.&lt;/p&gt;
&lt;h2 id="backward-pass---where-gradients-vanish"&gt;Backward Pass - Where Gradients Vanish
&lt;/h2&gt;&lt;p&gt;Now, we’ll calculate gradients starting from the output and moving backward. This is where the vanishing gradient problem shows up!&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Output Layer Gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;target_output&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.229&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sigmoid_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.056&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;layer2_output&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.032&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hidden Layer 2 Gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error_layer2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.028&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error_layer2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sigmoid_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.007&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;layer1_output&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.004&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Hideen Layer 1 Gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error_layer1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.0035&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_layer1_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error_layer1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;sigmoid_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.00085&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer1_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.000425&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Aha Moment&lt;/strong&gt;:&lt;br&gt;
Look at the gradient sizes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Output layer: ≈ -0.032&lt;/li&gt;
&lt;li&gt;Hidden Layer 2: ≈ -0.004&lt;/li&gt;
&lt;li&gt;Hidden Layer 1: ≈ -0.000425&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They’re shrinking fast! Let’s plot them:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradients&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights3&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Layer 1&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Layer 2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Layer 3&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gradients&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Gradient Magnitudes with Sigmoid&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Magnitude&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/3.png"
width="584"
height="435"
srcset="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/3_hu_d957e6bf01f0450e.png 480w, https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/3_hu_332b04c6ef82d420.png 1024w"
loading="lazy"
alt="Gradient Magnitudes"
class="gallery-image"
data-flex-grow="134"
data-flex-basis="322px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Insight&lt;/strong&gt;:&lt;br&gt;
The deeper we go (toward Layer 1), the tinier the gradients get. This is the vanishing gradient problem—early layers barely learn because their updates are so small!&lt;/p&gt;
&lt;h2 id="why-do-gradients-vanish"&gt;Why Do Gradients Vanish?
&lt;/h2&gt;&lt;p&gt;Here’s the key: each gradient is multiplied by the sigmoid derivative (max 0.25). Across layers, it’s like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Layer 3: gradient&lt;/li&gt;
&lt;li&gt;Layer 2: gradient × &amp;lt;0.25&lt;/li&gt;
&lt;li&gt;Layer 1: gradient × &amp;lt;0.25 × &amp;lt;0.25&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Intuition&lt;/strong&gt;:&lt;br&gt;
Imagine passing a message through a chain of people, each whispering quieter. By the time it reaches the start, it’s almost silent. That’s what’s happening to our gradients!&lt;/p&gt;
&lt;h2 id="how-relu-solves-the-vanishing-gradient-problem"&gt;How ReLU Solves the Vanishing Gradient Problem
&lt;/h2&gt;&lt;p&gt;Let’s switch to &lt;strong&gt;ReLU&lt;/strong&gt; (Rectified Linear Unit), defined as:&lt;/p&gt;
$$ReLU(x) = max⁡(0,x)$$&lt;p&gt;with a derivative of 1 for $x&amp;gt;0$. This doesn’t shrink gradients! Let’s define it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;maximum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;relu_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;where&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="relu-forward-pass"&gt;ReLU Forward Pass
&lt;/h3&gt;&lt;p&gt;Redo the forward pass with ReLU:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias1&lt;/span&gt; &lt;span class="c1"&gt;# 0.25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer1_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 0.25 (since 0.25 &amp;gt; 0)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer1_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias2&lt;/span&gt; &lt;span class="c1"&gt;# 0.5 * 0.25 = 0.125&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;layer2_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 0.125&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;output_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;layer2_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;bias3&lt;/span&gt; &lt;span class="c1"&gt;# 0.5 * 0.125 = 0.0625&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 0.0625&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ReLU Output: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.4f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;:&lt;br&gt;
For simplicity, we used ReLU everywhere. In practice, the output layer might be linear for regression, but this shows the idea.&lt;/p&gt;
&lt;h3 id="relu-backward-pass"&gt;ReLU Backward Pass
&lt;/h3&gt;&lt;p&gt;Now, compute gradients:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;target_output&lt;/span&gt; &lt;span class="c1"&gt;# 0.0625 - 0.8 ≈ -0.7375&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;relu_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# -0.7375 * 1 = -0.7375&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;layer2_output&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.0922&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error_layer2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_output_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.36875&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error_layer2&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;relu_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.36875&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;layer1_output&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.0922&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;error_layer1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;weights2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer2_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.184375&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;d_loss_d_layer1_input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;error_layer1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;relu_derivative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layer1_input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.184375&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradient_weights1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;d_loss_d_layer1_input&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;input_data&lt;/span&gt; &lt;span class="c1"&gt;# ≈ -0.0922&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Aha Moment&lt;/strong&gt;:&lt;br&gt;
Check the gradients:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Layer 3: ≈ -0.0922&lt;/li&gt;
&lt;li&gt;Layer 2: ≈ -0.0922&lt;/li&gt;
&lt;li&gt;Layer 1: ≈ -0.0922&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;They’re all the same size! Plot them:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;gradients_relu&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights1&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights2&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="nb"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;gradient_weights3&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;gradients_relu&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Gradient Magnitudes with ReLU&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Magnitude&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/4.png"
width="576"
height="435"
srcset="https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/4_hu_577c7bcf453d1dc4.png 480w, https://shrsv.github.io/p/a-friendly-step-by-step-tutorial-on-the-vanishing-gradient-problem/4_hu_7bbac9b73304ae99.png 1024w"
loading="lazy"
alt="ReLU Gradient Magnitudes"
class="gallery-image"
data-flex-grow="132"
data-flex-basis="317px"
&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Insight&lt;/strong&gt;:&lt;br&gt;
ReLU’s derivative of 1 (for positive inputs) keeps gradients strong, so early layers can learn just as well as later ones. No vanishing here!&lt;/p&gt;
&lt;h2 id="bonus-trying-it-with-pytorch"&gt;Bonus: Trying it With PyTorch
&lt;/h2&gt;&lt;p&gt;Let’s quickly see this with PyTorch for a modern twist. Install PyTorch if you haven’t (pip install torch), then run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Define inputs and weights as tensors with gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tensor&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;requires_grad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;target&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tensor&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;]])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tensor&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;requires_grad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tensor&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;requires_grad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tensor&lt;/span&gt;&lt;span class="p"&gt;([[&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt; &lt;span class="n"&gt;requires_grad&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Forward pass with sigmoid&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;h1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;h2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sigmoid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Loss&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;loss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;backward&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Print gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Gradient w1: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Gradient w2: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Gradient w3: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gradient w1: -0.000424
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gradient w2: -0.003870
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gradient w3: -0.032004
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;You’ll see gradients shrinking from w3 to w1, just like before. Now try ReLU:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Reset gradients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Forward pass with ReLU&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;h1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;h2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w2&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;torch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;relu&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="n"&gt;h2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Loss and backward&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;loss&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;target&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;loss&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;backward&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ReLU Gradient w1: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w1&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ReLU Gradient w2: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w2&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ReLU Gradient w3: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grad&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;.6f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Output:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ReLU Gradient w1: -0.092188
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ReLU Gradient w2: -0.092188
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ReLU Gradient w3: -0.092188
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Aha Moment&lt;/strong&gt;:&lt;br&gt;
PyTorch confirms it—ReLU keeps gradients steady, while sigmoid lets them vanish.&lt;/p&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;You’ve just walked through the vanishing gradient problem.&lt;/p&gt;
&lt;p&gt;With sigmoid, gradients shrink exponentially in deeper layers, slowing learning.&lt;/p&gt;
&lt;p&gt;ReLU fixes this by keeping gradients robust.&lt;/p&gt;
&lt;p&gt;Try tweaking the network—add layers or change weights—and watch how gradients behave.&lt;/p&gt;
&lt;p&gt;You’ve got the tools and intuition now—happy experimenting!&lt;/p&gt;</description></item><item><title>Making A Simple Image With Tensors (Starting from Scratch)</title><link>https://shrsv.github.io/p/tensors-challenge/</link><pubDate>Fri, 28 Feb 2025 23:11:51 +0530</pubDate><guid>https://shrsv.github.io/p/tensors-challenge/</guid><description>&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Hi there! I&amp;rsquo;m Shrijith Venkatrama, founder of Hexmos. Right now, I’m building &lt;a class="link" href="https://hexmos.com/liveapi" target="_blank" rel="noopener"
&gt;LiveAPI&lt;/a&gt;, a tool that makes generating API docs from your code ridiculously easy.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;Tensors&lt;/strong&gt; are a fundamental concept in machine learning and deep learning.&lt;/p&gt;
&lt;p&gt;In this tutorial, we will explore tensors in a fun and light-hearted way to gain some familiarity&lt;/p&gt;
&lt;h2 id="what--is-a-tensor"&gt;What is a Tensor?
&lt;/h2&gt;&lt;p&gt;A tensor is a multi-dimensional array that generalizes familiar concepts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scalar:&lt;/strong&gt; A single number (0D tensor).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vector:&lt;/strong&gt; A list of numbers (1D tensor).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Matrix:&lt;/strong&gt; A grid of numbers (2D tensor).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Higher-dimensional tensors:&lt;/strong&gt; Structures with 3 or more dimensions (e.g., 3D, 4D).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think of tensors as containers for organizing data in multiple dimensions, like stacking grids or cubes.&lt;/p&gt;
&lt;h2 id="the-challenge-draw-a-red-0-on-grey-background-using-tensors"&gt;The Challenge: Draw a Red &amp;ldquo;0&amp;rdquo; on Grey Background using Tensors
&lt;/h2&gt;&lt;p&gt;To start with, we are going to set a fairly simple goal.&lt;/p&gt;
&lt;p&gt;We will learn a bit about tensors and then try to draw a red &amp;ldquo;0&amp;rdquo; on a grey background using the new knowledge we acquire.&lt;/p&gt;
&lt;p&gt;For our goal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Grayscale&lt;/strong&gt; = 2D tensor (intensity values).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Color (red &amp;ldquo;0&amp;rdquo;)&lt;/strong&gt; = 3D tensor (RGB).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="scalars---single-pixels"&gt;Scalars - Single Pixels
&lt;/h2&gt;&lt;p&gt;A scalar is one number, like a pixel’s intensity.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;scalar&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt; &lt;span class="c1"&gt;# Medium gray&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Scalar (Pixel Intensity):&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scalar&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;128 is medium gray (0 = black, 255 = white).&lt;/li&gt;
&lt;li&gt;This is a 0D tensor, the simplest building block.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="vectors---rows-of-pixels"&gt;Vectors - Rows of Pixels
&lt;/h2&gt;&lt;p&gt;A vector (1D tensor) is a sequence of numbers, like a row of pixels.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;vector&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;192&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Vector (Row of Pixels):&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;plot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;ro&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Vector: Row of Pixel Intensities&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Pixel Intensity (0 = Black, 255 = White)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Position in Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/1.png"
width="587"
height="455"
srcset="https://shrsv.github.io/p/tensors-challenge/1_hu_3718bb63ae4c9a25.png 480w, https://shrsv.github.io/p/tensors-challenge/1_hu_8e727854352423f0.png 1024w"
loading="lazy"
alt="red dots"
class="gallery-image"
data-flex-grow="129"
data-flex-basis="309px"
&gt;&lt;/p&gt;
&lt;p&gt;In this image - you can see the pixel intensity going from 0 to 255.&lt;/p&gt;
&lt;p&gt;0 means - black, and 255 means white, and anything in between is a shade of grey.&lt;/p&gt;
&lt;h2 id="matrices---grayscale-images"&gt;Matrices - Grayscale Images
&lt;/h2&gt;&lt;p&gt;A matrix (2D tensor) is a grid of numbers, like a grayscale image.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;matrix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;64&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;192&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Matrix (Grayscale Image):&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;matrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gray&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;2x2 Grayscale Image&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Column&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorbar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Intensity (0 = Black, 255 = White)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/2.png"
width="560"
height="455"
srcset="https://shrsv.github.io/p/tensors-challenge/2_hu_1a41bad244ba5314.png 480w, https://shrsv.github.io/p/tensors-challenge/2_hu_a1631fa816e92425.png 1024w"
loading="lazy"
alt="grayscale matrix"
class="gallery-image"
data-flex-grow="123"
data-flex-basis="295px"
&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Each cell in this matrix represents a pixel&amp;rsquo;s intensity.&lt;/li&gt;
&lt;li&gt;The colorbar shows the intensity values.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3d-tensors---adding-color"&gt;3D Tensors - Adding Color
&lt;/h2&gt;&lt;p&gt;A 3D tensor has three 2D matrices for RGB channels.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;red_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="c1"&gt;# Red in top-left&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;green_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;blue_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;color_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;red_channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;green_channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blue_channel&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Color Image (RGB Channels):&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color_image&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fig&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;axs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;subplots&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Red&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Green&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Blue&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;axs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gray&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;axs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;color&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; Channel&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;axs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Column&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;axs&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/3.png"
width="957"
height="293"
srcset="https://shrsv.github.io/p/tensors-challenge/3_hu_cd717ad01f4f2c18.png 480w, https://shrsv.github.io/p/tensors-challenge/3_hu_146590195a05f1d6.png 1024w"
loading="lazy"
alt="3d tensor"
class="gallery-image"
data-flex-grow="326"
data-flex-basis="783px"
&gt;&lt;/p&gt;
&lt;p&gt;Visualization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Three subplots: RGB channels.&lt;/li&gt;
&lt;li&gt;Red Channel: 255 at top-left (white); others 0 (black).&lt;/li&gt;
&lt;li&gt;Green/Blue: All 0.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3x2x2 tensor where only red is active.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="combining-channels"&gt;Combining Channels
&lt;/h2&gt;&lt;p&gt;Combine RGB channels into a color image.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;color_image_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_image_array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Combined 2x2 Color Image&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Column&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/4.png"
width="476"
height="455"
srcset="https://shrsv.github.io/p/tensors-challenge/4_hu_b018ec2d1eb4fca4.png 480w, https://shrsv.github.io/p/tensors-challenge/4_hu_dba6d9a9ec346108.png 1024w"
loading="lazy"
alt="combined channels"
class="gallery-image"
data-flex-grow="104"
data-flex-basis="251px"
&gt;&lt;/p&gt;
&lt;p&gt;Visualization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Image: Red top-left, black elsewhere.&lt;/li&gt;
&lt;li&gt;Axes: 2x2 grid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RGB = (255, 0, 0) is red; (0, 0, 0) is black&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="grayscale-background"&gt;Grayscale Background
&lt;/h2&gt;&lt;p&gt;Create a 5x5 grayscale background.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;background&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;128&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Grayscale Background:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;background&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cmap&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;gray&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;5x5 Grayscale Background&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Column&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;colorbar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Intensity (0 = Black, 255 = White)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/5.png"
width="526"
height="455"
srcset="https://shrsv.github.io/p/tensors-challenge/5_hu_60b9e700aad80c0e.png 480w, https://shrsv.github.io/p/tensors-challenge/5_hu_8c11471727ebab05.png 1024w"
loading="lazy"
alt="grayscale bg"
class="gallery-image"
data-flex-grow="115"
data-flex-basis="277px"
&gt;&lt;/p&gt;
&lt;p&gt;Visualization:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Uniform gray: All 128.&lt;/li&gt;
&lt;li&gt;Axes: 5x5 grid.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Explanation:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;A 2D tensor for a medium gray background.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="drawing-a-red-0"&gt;Drawing a Red &amp;ldquo;0&amp;rdquo;
&lt;/h2&gt;&lt;p&gt;Now, draw a red &amp;ldquo;0&amp;rdquo; on the 5x5 background using a 3D tensor. We’ll define &amp;ldquo;0&amp;rdquo; as a small oval.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Define &amp;#34;0&amp;#34; as an oval in 5x5 grid&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;zero_positions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="c1"&gt;# Oval shape&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Initialize 5x5 RGB channels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;red_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;green_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;blue_channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Set red &amp;#34;0&amp;#34; pixels&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;pos&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;zero_positions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;red_channel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]][&lt;/span&gt;&lt;span class="n"&gt;pos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;255&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Set grayscale background (RGB = 128, 128, 128)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;zero_positions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;red_channel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;green_channel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;blue_channel&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;128&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Combine into 3D tensor&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;color_image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;red_channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;green_channel&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;blue_channel&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;color_image_array&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;axis&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Visualize&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;imshow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;color_image_array&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Red &amp;#39;0&amp;#39; on Grayscale Background&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Column&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Row&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/tensors-challenge/6.png"
width="427"
height="455"
srcset="https://shrsv.github.io/p/tensors-challenge/6_hu_7c32263aaa6afc97.png 480w, https://shrsv.github.io/p/tensors-challenge/6_hu_89b103372c677cd1.png 1024w"
loading="lazy"
alt="red 0 on gray"
class="gallery-image"
data-flex-grow="93"
data-flex-basis="225px"
&gt;&lt;/p&gt;
&lt;h3 id="visualization"&gt;Visualization:
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Image&lt;/strong&gt;: A red oval &amp;ldquo;0&amp;rdquo; on gray.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Red pixels&lt;/strong&gt;: RGB = (255, 0, 0) at zero_positions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gray background&lt;/strong&gt;: RGB = (128, 128, 128) elsewhere.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Axes&lt;/strong&gt;: 5x5 grid.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="explanation"&gt;Explanation:
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;New zero_positions&lt;/strong&gt;: Forms a rough oval:
&lt;ul&gt;
&lt;li&gt;Top: (1,1), (1,2), (1,3)&lt;/li&gt;
&lt;li&gt;Sides: (2,1), (2,3)&lt;/li&gt;
&lt;li&gt;Bottom: (3,1), (3,2), (3,3)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;This 5x5x3 tensor places red where the &amp;ldquo;0&amp;rdquo; is and gray everywhere else.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="conclusion"&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;So - that&amp;rsquo;s it.&lt;/p&gt;
&lt;p&gt;We progressed from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Scalars&lt;/strong&gt;: Pixel intensities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vectors&lt;/strong&gt;: Rows of pixels.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Matrices&lt;/strong&gt;: Grayscale images.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;3D Tensors&lt;/strong&gt;: Color images.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At each step, we visualized the data to understand its structure and content.&lt;/p&gt;
&lt;p&gt;Hope this gave you a good intuition about tensors!&lt;/p&gt;</description></item><item><title>How many Indian Companies Generate 1M+ USD in ARR?</title><link>https://shrsv.github.io/p/indian-msme-1mil/</link><pubDate>Thu, 27 Feb 2025 16:35:55 +0530</pubDate><guid>https://shrsv.github.io/p/indian-msme-1mil/</guid><description>&lt;h2 id="the-problem"&gt;The Problem
&lt;/h2&gt;&lt;p&gt;As a founder of &lt;a class="link" href="https://hexmos.com" target="_blank" rel="noopener"
&gt;a startup&lt;/a&gt; building from India, I often ask myself what
is the situation of Indian startups in the global market.&lt;/p&gt;
&lt;p&gt;In startup literature across the web, we often hear about the 1 million
in USD ARR as a benchmark for a startup to be considered a &amp;ldquo;serious&amp;rdquo; company.&lt;/p&gt;
&lt;p&gt;So I wanted to know, how many Indian startups already possess 1M+ USD in ARR?&lt;/p&gt;
&lt;h2 id="a-bit-of-terminological-groundwork"&gt;A Bit of Terminological Groundwork
&lt;/h2&gt;&lt;p&gt;When we talk about startups and revenues, sometimes, the terminology can get a bit confusing.&lt;/p&gt;
&lt;p&gt;For instance, the top line revenue of a startup is called &amp;ldquo;ARR&amp;rdquo; or Annual Recurring Revenue.&lt;/p&gt;
&lt;p&gt;But when we talk about MSMEs, the top line revenue is called &amp;ldquo;Turnover&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;In many accounting contexts, we use numbers like &amp;ldquo;EBITDA&amp;rdquo; or &amp;ldquo;EBIT&amp;rdquo; to get a sense of the profitability of a company.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/indian-msme-1mil/ebitda.jpg"
width="800"
height="1028"
srcset="https://shrsv.github.io/p/indian-msme-1mil/ebitda_hu_53f45d373912f6f.jpg 480w, https://shrsv.github.io/p/indian-msme-1mil/ebitda_hu_106e07d13299bf07.jpg 1024w"
loading="lazy"
alt="Terminology Help"
class="gallery-image"
data-flex-grow="77"
data-flex-basis="186px"
&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Revenue/Sales/Turnover/ARR - Cost of Goods Sold (To Suppliers)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; = Gross Profit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gross Profit - Salary (To Employees) = EBITDA (Earnings Before
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Interest, Taxes, Depreciation and Amortization)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;EBITDA - (Equipment Depreciation + Intangible Amortization)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; = EBIT (Earnings Before Interest and Taxes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;EBIT - Interest (To Creditors) = EBT (Earnings Before Taxes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;EBT - Taxes (To Government) = EAT (Earnings After Taxes)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;EAT - Dividends (To Shareholders) = Retained Earnings
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="the-data"&gt;The Data
&lt;/h2&gt;&lt;p&gt;We fetch some grounding numbers from &lt;a class="link" href="https://www.ibef.org/industry/msme-presentation" target="_blank" rel="noopener"
&gt;IBEF&lt;/a&gt; and plot
it with a bar chart.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;micro&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3_93_18_355&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;6_08_935&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;medium&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;55_488&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;all&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;micro&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;small&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;medium&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Total active MSMEs: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;micro %: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;micro&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;small %: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;small&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;medium %: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;medium&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nb"&gt;all&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Import required libraries&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Ensure plots show inline in Google Colab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;%&lt;/span&gt;&lt;span class="n"&gt;matplotlib&lt;/span&gt; &lt;span class="n"&gt;inline&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Micro&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Small&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Medium&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;percentages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;98.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;counts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;3,93,18,355&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;6,08,935&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;55,488&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create a DataFrame&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Percentage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;percentages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;counts&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Set Seaborn style&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_style&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;whitegrid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Create the bar plot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;barplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Percentage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;palette&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;viridis&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;edgecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;black&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Annotate with exact percentages and counts&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Percentage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ax&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;percent&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;%&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;(&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;center&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontweight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Labels and title&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Percentage&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;MSME Distribution in India&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontweight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show plot inline in Colab&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The result is very clear: the vast majority of MSMEs are micro businesses.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/indian-msme-1mil/msme_distribution.png"
width="699"
height="452"
srcset="https://shrsv.github.io/p/indian-msme-1mil/msme_distribution_hu_e2df49c935754dd7.png 480w, https://shrsv.github.io/p/indian-msme-1mil/msme_distribution_hu_741c66f71fe2d70d.png 1024w"
loading="lazy"
alt="MSME Distribution"
class="gallery-image"
data-flex-grow="154"
data-flex-basis="371px"
&gt;&lt;/p&gt;
&lt;h3 id="classifying-msmes"&gt;Classifying MSMEs
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Criteria&lt;/th&gt;
&lt;th&gt;Turnover&lt;/th&gt;
&lt;th&gt;Investment&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Micro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rs. 5 crores (US$ 610,000)&lt;/td&gt;
&lt;td&gt;Less than Rs. 1 crore (US$ 120,000)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Small&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rs. 50 crores (US$ 6.1 million)&lt;/td&gt;
&lt;td&gt;More than Rs. 1 crore (US$ 120,000) but less than Rs. 10 crore (US$ 1.2 million)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Medium&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rs. 250 crores (US$ 30.4 million)&lt;/td&gt;
&lt;td&gt;More than Rs. 10 crore (US$ 1.2 million), but less than Rs. 50 crore (US$ 6.1 million)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;For our question, we are interested in only Small and Medium MSMEs.&lt;/p&gt;
&lt;p&gt;The reason is simple: we are looking for companies that are already generating 1M+ USD in ARR.
Micro businesses do not fall in this category.&lt;/p&gt;
&lt;h2 id="estimating-the-number-of-msmes-with--83-cr-inr-in-arr"&gt;Estimating the Number of MSMEs with &amp;gt; 8.3 Cr INR in ARR
&lt;/h2&gt;&lt;h3 id="small-msmes"&gt;Small MSMEs
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;50% above Rs. 5 crore → 304,467&lt;/li&gt;
&lt;li&gt;50% of those above Rs. 8.3 crore → 152,234&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="medium-msmes"&gt;Medium MSMEs
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;55,488 (all above Rs. 50 crore)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="large-companies"&gt;Large Companies
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Estimated between 10,000 to 20,000&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="monte-carlo-simulation"&gt;Monte Carlo Simulation
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Uses random sampling to estimate a 95% confidence interval for large companies.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="final-estimate"&gt;Final Estimate
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total Range&lt;/strong&gt;: ~ 100,000 to 200,000&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;95% CI for Large Companies&lt;/strong&gt;: A refined estimate with confidence bounds.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This provides a &lt;strong&gt;quantitative estimate&lt;/strong&gt; while acknowledging uncertainty.&lt;/p&gt;
&lt;h3 id="code-to-visualize-the-estimates"&gt;Code to Visualize the Estimates
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Calculate the number of MSMEs in each category&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;scipy.stats&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;stats&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Given data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;608935&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_above_5cr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="c1"&gt;# 50% above Rs. 5 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_above_5cr&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="c1"&gt;# 50% above Rs. 8.3 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;medium_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;55488&lt;/span&gt; &lt;span class="c1"&gt;# All medium MSMEs are above Rs. 50 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Large companies estimate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;large_upper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Estimate range of total count&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;estimated_total_lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;medium_total&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;large_lower&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;estimated_total_upper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;medium_total&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;large_upper&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Confidence interval for large companies (assuming uniform distribution)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;large_sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;large_upper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Monte Carlo sampling&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;confidence_interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percentile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_sample&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;97.5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# 95% confidence interval&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Print results&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Estimated Small MSMEs above Rs. 8.3 crore: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Medium MSMEs: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;medium_total&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Estimated Large Companies: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_upper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Total Estimate: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;estimated_total_lower&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;estimated_total_upper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;95% Confidence Interval for Large Companies: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;confidence_interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.0f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;confidence_interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,.0f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;Graphing:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;np&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;pd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;seaborn&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;sns&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;matplotlib.pyplot&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nn"&gt;plt&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Seaborn styling&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;set_theme&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;style&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;whitegrid&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Given data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;categories&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Small MSMEs (&amp;gt;8.3cr)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Medium MSMEs (&amp;gt;50cr)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Large Companies (&amp;gt;100cr)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;608935&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_above_5cr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_total&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="c1"&gt;# 50% above Rs. 5 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;small_above_5cr&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="c1"&gt;# 50% above Rs. 8.3 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;medium_total&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;55488&lt;/span&gt; &lt;span class="c1"&gt;# All medium MSMEs are above Rs. 50 crore&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;large_upper&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20000&lt;/span&gt; &lt;span class="c1"&gt;# Large company estimate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Monte Carlo simulation for Large Companies CI&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;large_sample&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;large_upper&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;confidence_interval&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percentile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_sample&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mf"&gt;2.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;97.5&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# 95% confidence interval&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Dataframe for plotting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;DataFrame&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;medium_total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;large_lower&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;large_upper&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;# Use mid-point for Large&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Lower&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;medium_total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence_interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;Upper&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;small_above_8_3cr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;medium_total&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;confidence_interval&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Calculate xerr (error bars)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xerr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upper&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# Only positive error bars&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Plot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;figure&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;figsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;ax&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;barplot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;hue&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# Assign hue to avoid warning&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;palette&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;#1f77b4&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;#ff7f0e&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;#2ca02c&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;# Custom colors&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;errorbar&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;None&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# Disable automatic error bars&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;capsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Manually add error bars for Large Companies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;errorbar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;xerr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;xerr&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;fmt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ecolor&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;black&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;elinewidth&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;1.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;capsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Labels &amp;amp; Titles&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Estimated Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ylabel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Enterprise Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Distribution of MSMEs &amp;amp; Large Companies in India&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontweight&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bold&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;legend&lt;/span&gt;&lt;span class="p"&gt;([],&lt;/span&gt; &lt;span class="p"&gt;[],&lt;/span&gt; &lt;span class="n"&gt;frameon&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Remove extra legend&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Add exact numbers as text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;category&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;enumerate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Count&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Category&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;va&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;center&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fontsize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;xlim&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Upper&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1.2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# Scale x-axis properly&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tight_layout&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Show plot&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;plt&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;show&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="the-result"&gt;The Result
&lt;/h3&gt;&lt;p&gt;&lt;img src="https://shrsv.github.io/p/indian-msme-1mil/arr_1mil_plus.png"
width="984"
height="484"
srcset="https://shrsv.github.io/p/indian-msme-1mil/arr_1mil_plus_hu_981d8e8b3c034747.png 480w, https://shrsv.github.io/p/indian-msme-1mil/arr_1mil_plus_hu_bbc36d110aa6dbac.png 1024w"
loading="lazy"
alt="ARR 1 Million USD (8.3 Cr INR) Plus"
class="gallery-image"
data-flex-grow="203"
data-flex-basis="487px"
&gt;&lt;/p&gt;
&lt;h2 id="the-conclusion"&gt;The Conclusion
&lt;/h2&gt;&lt;p&gt;The toal number of MSMEs with 1M+ USD in ARR is somewhere around 200K organizations. &lt;strong&gt;That is a mere 0.5% of the 4 crore businesses active in the country.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://shrsv.github.io/p/indian-msme-1mil/total_guess.png"
width="365"
height="133"
srcset="https://shrsv.github.io/p/indian-msme-1mil/total_guess_hu_e5f95e281db04298.png 480w, https://shrsv.github.io/p/indian-msme-1mil/total_guess_hu_ab9dd99aa639e73d.png 1024w"
loading="lazy"
alt="Total Guess"
class="gallery-image"
data-flex-grow="274"
data-flex-basis="658px"
&gt;&lt;/p&gt;
&lt;p&gt;It could be interesting to compare India&amp;rsquo;s data to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Other developing countries of the present day&lt;/li&gt;
&lt;li&gt;Recently developed countires of the past 50-75 years&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And see what we can learn from them.&lt;/p&gt;</description></item></channel></rss>