All articles

Behind the app~5 MIN

Why AI guesses your calories wrong (and what to do about it)

Language models pattern-match calorie numbers instead of looking them up, and their biases compound over weeks. The fix is a division of labor.

The short answer

Because a language model blends numbers instead of retrieving them. Ask five times, get five answers; USDA FoodData Central has one. The noise makes a log's precision fake, and the bias - models skew low on dressed salads and oily dishes - compounds over weeks instead of cancelling. The fix is a division of labor: AI names the ingredients, the database prices them.

Ask a large language model how many calories are in 100 g of cooked spaghetti and you'll usually get a plausible answer — maybe 155, maybe 165, maybe "around 200". Ask five times and you may get five numbers. The USDA database has exactly one: 157. That gap between plausible and correct is the whole problem with AI calorie counting, and it's worth understanding precisely, because AI is also genuinely the best tool ever built for part of this job.

LLMs don't retrieve — they pattern-match

A language model doesn't contain a nutrition table it consults. It contains statistical patterns absorbed from text, where calorie figures for the same food appear in dozens of conflicting versions: dry weight and cooked weight, with sauce and without, rounded for a magazine and precise from a lab. When you ask for a number, the model produces something consistent with that cloud of numbers — a blend, not a lookup.

For trivia, a blend is fine. For arithmetic you plan to act on daily, it has two failure modes:

  • Noise. The same question yields different answers on different days, so your log's precision is fake — the digits are there, the accuracy isn't.
  • Bias. Worse than noise, models drift in consistent directions for particular foods — the mix of sources they learned from isn't centered on the truth. A model that has read a thousand diet blogs describing "light" salads tends to underestimate dressed salads; portion descriptions in recipes skew its sense of what "a serving" of pasta weighs.

Small biases compound over weeks

Random noise partly cancels out over a month of logging. Bias doesn't — it accumulates. Suppose the AI consistently under-guesses your typical meals by just 8%, which is well within the error range these models show on food estimation. On a 2,200 kcal day that's about 175 kcal of invisible intake, every day. Over twelve weeks, that's roughly 14,700 unlogged kcal — close to 2 kg of body fat the log claims you shouldn't have gained.

This is how people end up saying "I'm logging everything and not losing weight". Often they are logging everything. The numbers attached to everything were systematically soft. A calorie log's job is to explain the scale, and a biased log can't.

The fix: AI for recognition, database for numbers

Here's the thing — the model is *superb* at what databases can't do. Show it a photo of a plate and it will tell you there's grilled salmon, roasted potatoes and a butter sauce, and estimate the grams of each. That's recognition, and it's the part of food logging that used to make people quit (search the food, pick from 40 near-identical entries, guess a serving size...).

So split the job:

TaskWho does itWhy
Identify the foods on the plateAIDatabases can't see
Estimate grams per ingredientAIJudgment call; needs vision and context
Note cooked vs raw stateAIContext decides it ("from the package" vs "on my plate")
Supply kcal and macros per 100 gUSDA databaseOne canonical answer; zero drift, zero bias

This is exactly how calorie.one works. The AI decomposes your meal into ingredients with gram amounts; every ingredient is then looked up in USDA FoodData Central. The AI never supplies a number the database has.

Trust, but verify — line by line

Two honesty mechanisms make this checkable rather than just claimed.

First, every meal shows its line-by-line breakdown: each ingredient, its estimated grams, the exact database row that was matched, and that line's contribution to the total. If the AI guessed 200 g of rice and you served yourself 150, you edit one line and the totals recompute from the same database rows. You're correcting the portion — the only part that was ever a guess.

Second, labeled estimates. Some dishes — a lasagna, a takeaway curry — have no single database row that honestly matches. Rather than forcing a wrong lookup, the line falls back to the AI's estimate and is visibly labeled as one. A wrong number dressed up as database truth would be worse than an honest guess that admits it.

What to do about it

If you're using a pure-AI calorie app, test it: ask it the same meal three times and watch the numbers move. Then either switch to logging weighed ingredients against a real database, or use a tool that does the split for you. And whatever you use, look at the per-ingredient lines, not just the total — the total hides exactly the errors you need to catch. The full pipeline, including what grounding can't fix, is on our methodology page.

FAQ

Can ChatGPT count calories accurately?

Not reliably. A language model blends the calorie figures it absorbed from text rather than retrieving one, so the same question returns different answers on different days. Ask for 100 g of cooked spaghetti and you may get 155, 165 or "around 200"; USDA FoodData Central has exactly one figure, 157.

Why do AI calorie estimates change every time?

Because nothing is being looked up. The model produces a number consistent with a cloud of conflicting sources — dry weight and cooked weight, with sauce and without, rounded for a magazine and precise from a lab — and draws differently from that cloud each time.

Are AI calorie counts biased low?

Often, and that is worse than noise. Models trained on diet writing tend to under-guess dressed salads and oily dishes. An 8% shortfall on a 2,200 kcal day is about 175 kcal every day, or roughly 14,700 kcal over twelve weeks. Noise cancels; bias accumulates.

What is AI genuinely good for in food logging?

Recognition and portion judgment: naming what is on the plate, estimating the grams, and deciding from context whether an amount refers to the cooked or the uncooked state. A database cannot see, and that identification step is the part that used to make people quit.

How do you fix AI calorie estimates?

Split the job. Let the model identify ingredients and estimate grams, and take every kcal and macro figure from a database instead. Then show the per-ingredient lines, so the one genuinely uncertain input — the portion — is visible and editable rather than buried inside a total.

The USDA rows behind this article

Every serving size USDA lists, per record, with the FDC ID so you can check the number at the source.

Related reading

Count with real numbers

Calorie.one looks every ingredient up in the USDA database — and shows you the lines so you can check.

Start tracking free