Research
Predicting Rangeland Herbaceous Biomass with Multi-Branch LSTMs
- Role
- Machine Learning Research Assistant (Senior Thesis)
- Lab
- KDD Lab, New Mexico State University
- Period
- Sep 2025 – Present
- Methods
- LSTM
- multi-modal fusion
- sequence modeling
- remote sensing
- time-series regression
The problem#
How much forage a rangeland is carrying, and whether that stock is growing or shrinking, is the quantity a rancher and a land manager actually act on. Estimating it well means combining signals that live on completely different footings: what satellites see every sixteen days, how much rain fell each day, where cattle actually grazed, and what kind of vegetation sits underneath. Each is a time series with its own cadence, noise profile, and physical meaning, and the interesting behavior is in how they interact.
Two targets are modeled: the standing herbaceous biomass in a given period, and the change in that biomass from the previous period. The second is the harder of the two. Biomass this period is close to biomass last period, so simply carrying the last value forward already predicts the standing amount well; the change is where a model has to earn its accuracy, and it is the one reported here.
Data#
Grazed rangeland on a working ranch near Animas, New Mexico, over the 2025 grazing season, mostly April to September. Two pastures are modeled, but over 98% of the pixels fall in one of them, so in practice this is a single-pasture study. Four input groups feed the model:
- Satellite biomass history, from 16-day RAP herbaceous above-ground biomass composites.
- Precipitation, from a daily on-ranch rain gauge, summed into two 16-day totals covering the 32 days before each prediction date.
- Grazing pressure, derived from GPS collars and the collars' own grazing-behavior codes, as animal grazing-days per pixel for each of the same 32 days.
- Land cover, six static fractional-cover bands per pixel.
The full pixel-by-period grid is 1.27 million records, one record being a single roughly 30 m pixel on a single 16-day date. Because most of that grid is ground that never saw an animal, models are trained and evaluated on the 74,374 records with grazing activity in their trailing window, about 6% of the grid. Every number below is on that filtered set.
Approach#
Rather than flattening every input into one feature vector, the model uses a multi-branch design: the three sequence inputs each get their own LSTM encoder, so each is read at its own length and cadence. Land cover is static per pixel, so it carries no temporal structure to encode and is passed straight into the fusion step. The branches meet late, at a two-layer head. This is a design choice rather than a tested advantage: no experiment here compares it against a single encoder on the same inputs.
Three sequence inputs are each read by their own LSTM encoder; static land cover bypasses the recurrent path entirely. The final encoder states and the cover values are concatenated and passed to a two-layer head.
Ten models in all: five input combinations, from biomass history alone up to all four inputs, each trained against both targets.
Results#
On 14,747 held-out records (3,687 pixels), for the biomass-change target:
| Inputs | MAE | R² |
|---|---|---|
| Biomass history only | 1.165 | 0.364 |
| History + precipitation | 0.559 | 0.893 |
| History + precipitation + grazing | 0.537 | 0.897 |
| History + precipitation + land cover | 0.447 | 0.932 |
| All four inputs | 0.499 | 0.918 |
Reading the table:
- Rainfall gives by far the largest jump, moving R² from 0.364 to 0.893. There is a catch: rainfall comes from a single ranch gauge, so every pixel on a given date receives the same rainfall input, which also tells the model which 16-day period it is predicting. The gain reflects rainfall and seasonal timing together, and this data cannot separate them.
- Land cover is the surprise. It is the second largest gain despite being the one input with no encoder at all, lifting R² a further 0.039. Part of that gain may be the model recognizing places: under a random pixel split, a pixel's six cover values act as a near-unique fingerprint.
- Grazing pressure did not improve accuracy. The best model, at R² 0.932, is the one without the collar-derived branch; adding it back gives 0.918. Each model was trained once, so whether that gap exceeds seed-to-seed variation is untested.
What this shows#
The two most interesting findings both cut against intuition: the input that needed no temporal encoder at all turned out to be the second most valuable, and cattle-location data, for all its obvious appeal in a grazing study, did not add accuracy once rainfall and land cover were in the model.
The limits, stated plainly:
- One season, one ranch, essentially one pasture.
- The split is random by pixel. Every test date also appears in training, and most test pixels sit next to a training pixel. The results speak to filling in unsampled pixels within a season, not to an unseen year or place.
- One training run per model.
- Only grazed pixel-periods, about 6% of the full grid.
- One rain gauge, so rainfall's effect cannot be separated from timing.