Research›Does INT8 post-training quantization… q-int8
Does INT8 post-training quantization keep a ResNet-20 within 1 point of FP32 top-1 on CIFAR-10?
No answer yet: the fp32 baseline doesn't match its cited number, and 8 of 13 rules are not settled.
Rules: 4 met · 1 not reproduced · 5 can't tell yet · 3 not tested
Its rules (13)
9 of 13 rules were written after their results came in
A note, not confirmed: 512 calibration images (per-tensor) are enough to stay within 1 point of FP32. Its rule is met.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-tensor INT8 at 512 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32rule met
INT8 is 0.08 points lower than the FP32 baseline (-0.23 to +0.07), 3 seeds. c-pt-512
details of c-pt-512
INT8 is 0.08 points lower than the FP32 baseline (-0.23 to +0.07) · unresolved
3 runs · 12 runs not counted · all 3 of its runs recorded afterwards
- rule
- c-pt-512 · primary · on e-ptq
- as declared
- rule met: the interval's worse bound -0.2264 inside 1top1: int8 vs fp32 [subject where calib_images=512, calib_seed=0, scheme=per_tensor] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=512, calib_seed=0, scheme=per_tensor]: -0.07667 [-0.2264, +0.07307] % · paired difference, t interval, 3 seeds, 95% (rb)
- units
- 3 seeds · declared: unit = seed
- timing
- declared after the evidence existed: all 3 units were produced before it was declared, and so were 11 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:35 UTC, run fp32 and int8 · seed 1 · scheme per_tensor · calib images 128 · calib seed 0, run fp32 and int8 · seed 2 · scheme per_tensor · calib images 128 · calib seed 0 and 8 more)
A note, not confirmed: 1024 calibration images (per-tensor) are enough to stay within 1 point of FP32. Its rule is met.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-tensor INT8 at 1024 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32rule met
INT8 is 0.17 points lower than the FP32 baseline (-0.27 to -0.07), 3 seeds. c-pt-1024
details of c-pt-1024
INT8 is 0.17 points lower than the FP32 baseline (-0.27 to -0.07) · loss
3 runs · 12 runs not counted · all 3 of its runs recorded afterwards
- rule
- c-pt-1024 · secondary · on e-ptq
- as declared
- rule met: the interval's worse bound -0.2737 inside 1top1: int8 vs fp32 [subject where calib_images=1024, calib_seed=0, scheme=per_tensor] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=1024, calib_seed=0, scheme=per_tensor]: -0.1733 [-0.2737, -0.07294] % · paired difference, t interval, 3 seeds, 95% (rb)
- units
- 3 seeds · declared: unit = seed
- timing
- declared after the evidence existed: all 3 units were produced before it was declared, and so were 11 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:35 UTC, run fp32 and int8 · seed 1 · scheme per_tensor · calib images 128 · calib seed 0, run fp32 and int8 · seed 2 · scheme per_tensor · calib images 128 · calib seed 0 and 8 more)
A note, not confirmed: 128 calibration images (per-tensor) are enough to stay within 1 point of FP32. Its rule is met.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-tensor INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32rule met
INT8 is 0.15 points lower than the FP32 baseline (-0.27 to -0.04), 3 seeds. c-pt-128
details of c-pt-128
INT8 is 0.15 points lower than the FP32 baseline (-0.27 to -0.04) · loss
3 runs · 12 runs not counted · all 3 of its runs recorded afterwards
- rule
- c-pt-128 · secondary · on e-ptq
- as declared
- rule met: the interval's worse bound -0.2681 inside 1top1: int8 vs fp32 [subject where calib_images=128, calib_seed=0, scheme=per_tensor] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=128, calib_seed=0, scheme=per_tensor]: -0.1533 [-0.2681, -0.0386] % · paired difference, t interval, 3 seeds, 95% (rb)
- units
- 3 seeds · declared: unit = seed
- timing
- declared after the evidence existed: all 3 units were produced before it was declared, and so were 11 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 512 · calib seed 0, recorded 2026-10-20 01:05:36 UTC, run fp32 and int8 · seed 1 · scheme per_tensor · calib images 512 · calib seed 0, run fp32 and int8 · seed 2 · scheme per_tensor · calib images 512 · calib seed 0 and 8 more)
A note, not confirmed: 2048 calibration images (per-tensor) are enough to stay within 1 point of FP32. Its rule is met.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-tensor INT8 at 2048 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32rule met
INT8 is 0.11 points lower than the FP32 baseline (-0.31 to +0.09), 3 seeds. c-pt-2048
details of c-pt-2048
INT8 is 0.11 points lower than the FP32 baseline (-0.31 to +0.09) · unresolved
3 runs · 12 runs not counted · all 3 of its runs recorded afterwards
- rule
- c-pt-2048 · secondary · on e-ptq
- as declared
- rule met: the interval's worse bound -0.3141 inside 1top1: int8 vs fp32 [subject where calib_images=2048, calib_seed=0, scheme=per_tensor] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=2048, calib_seed=0, scheme=per_tensor]: -0.1133 [-0.3141, +0.08746] % · paired difference, t interval, 3 seeds, 95% (rb)
- units
- 3 seeds · declared: unit = seed
- timing
- declared after the evidence existed: all 3 units were produced before it was declared, and so were 11 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:35 UTC, run fp32 and int8 · seed 1 · scheme per_tensor · calib images 128 · calib seed 0, run fp32 and int8 · seed 2 · scheme per_tensor · calib images 128 · calib seed 0 and 8 more)
A note, not confirmed: per-channel INT8 at 128 calibration images stays within 1 point of FP32 on the CIFAR-10-normalized baselines. Rb can't tell yet whether its rule is met.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-channel INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32can't tell yet
INT8 is 0.18 points lower than the FP32 baseline, 1 seed, no interval yet (rb gives one from 3). written before its results c-pc-128
details of c-pc-128
INT8 is 0.18 points lower than the FP32 baseline · no interval
1 run · 14 runs not counted · its run recorded afterwards · a noninferior rule reads the interval: 1 unit: rb gives an interval from 3
- rule
- c-pc-128 · secondary · on e-ptq
- as declared
- can't tell yet: a noninferior rule reads the interval: 1 unit: rb gives an interval from 3top1: int8 vs fp32 [subject where calib_images=128, calib_seed=0, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=128, calib_seed=0, scheme=per_channel]: -0.18 % · paired difference, 1 seed (rb)
- units
- 1 seed · declared: unit = seed
- timing
- declared before its runs (by production times; its baseline's runs came first)
A note, not confirmed: per-channel INT8 at 1024 calibration images stays within 1 point of FP32 on the CIFAR-10-normalized baselines. Its rule has no results yet.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-channel INT8 at 1024 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32not tested
No results yet. c-pc-1024
details of c-pc-1024
no reading yet · not tested
all 15 of its runs recorded afterwards
- rule
- c-pc-1024 · secondary · on e-ptq
- as declared
- criterion untestedtop1: int8 vs fp32 [subject where calib_images=1024, calib_seed=0, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=1024, calib_seed=0, scheme=per_channel]: no reading yet
- units
- declared: unit = seed
- timing
- declared; no evidence recorded yet
A note, not confirmed: per-channel INT8 at 2048 calibration images stays within 1 point of FP32 on the CIFAR-10-normalized baselines. Its rule has no results yet.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-channel INT8 at 2048 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32not tested
No results yet. c-pc-2048
details of c-pc-2048
no reading yet · not tested
all 15 of its runs recorded afterwards
- rule
- c-pc-2048 · secondary · on e-ptq
- as declared
- criterion untestedtop1: int8 vs fp32 [subject where calib_images=2048, calib_seed=0, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=2048, calib_seed=0, scheme=per_channel]: no reading yet
- units
- declared: unit = seed
- timing
- declared; no evidence recorded yet
A note, not confirmed: per-channel INT8 at 512 calibration images stays within 1 point of FP32 on the CIFAR-10-normalized baselines. Its rule has no results yet.
when and why
declared 2026-10-20 01:04 UTC · note: README.md:3 · not confirmed
- Per-channel INT8 at 512 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32not tested
No results yet. c-pc-512
details of c-pc-512
no reading yet · not tested
all 15 of its runs recorded afterwards
- rule
- c-pc-512 · secondary · on e-ptq
- as declared
- criterion untestedtop1: int8 vs fp32 [subject where calib_images=512, calib_seed=0, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=512, calib_seed=0, scheme=per_channel]: no reading yet
- units
- declared: unit = seed
- timing
- declared; no evidence recorded yet
Rules no note speaks to
FP32 baseline is 90.48% (89.92% to 91.04%), 3 seeds; the cited number is 91.25%. Open calls c-ref
details of c-ref
FP32 baseline is 90.48% (89.92% to 91.04%); the cited number is 91.25% · measured
3 runs · all 3 of its runs recorded afterwards · estimate 90.48 outside 91.25 ± 0.005
- rule
- c-ref · secondary · on e-ptq · cited
- as declared
- not reproduced: estimate 90.48 outside 91.25 ± 0.005fp32.top1 [where calib_images=128, calib_seed=0, scheme=per_tensor] = 91.25 ± 0.005rule = 91.25% ± 0.005 points · margin -0.76 points
- reading
- fp32.top1 [where calib_images=128, calib_seed=0, scheme=per_tensor]: 90.48 [89.92, 91.04] % · mean, t interval, 3 seeds, 95% (rb)
- units
- 3 seeds · declared: unit = seed
- timing
- declared after the evidence existed: all 3 units were produced before it was declared
- question link
- q-int8 · 2026-10-20 01:08 UTC
- review
- Open callsYour call
- Per-channel INT8 at 1024 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32can't tell yet
INT8 is 0.09 points lower than the FP32 baseline, 1 seed, no interval yet (rb gives one from 3). c-s0-pc-1024
details of c-s0-pc-1024
INT8 is 0.09 points lower than the FP32 baseline · no interval
1 run · 7 runs not counted · its run recorded afterwards · a noninferior rule reads the interval: 1 unit: rb gives an interval from 3
- rule
- c-s0-pc-1024 · secondary · on e-scheme-s0
- as declared
- can't tell yet: a noninferior rule reads the interval: 1 unit: rb gives an interval from 3top1: int8 vs fp32 [subject where calib_images=1024, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=1024, scheme=per_channel]: -0.09 % · paired difference, 1 seed (rb)
- units
- 1 seed · declared: unit = seed
- timing
- declared after the evidence existed: the only unit was produced before it was declared, and so were 7 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:32 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 512 · calib seed 0, recorded 2026-10-20 01:05:33 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 1024 · calib seed 0, recorded 2026-10-20 01:05:33 UTC and 4 more)
- question link
- q-int8 · 2026-10-20 01:04 UTC
- Per-channel INT8 at 128 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32can't tell yet
INT8 is 0.12 points lower than the FP32 baseline, 1 seed, no interval yet (rb gives one from 3). c-s0-pc-128
details of c-s0-pc-128
INT8 is 0.12 points lower than the FP32 baseline · no interval
1 run · 7 runs not counted · its run recorded afterwards · a noninferior rule reads the interval: 1 unit: rb gives an interval from 3
- rule
- c-s0-pc-128 · secondary · on e-scheme-s0
- as declared
- can't tell yet: a noninferior rule reads the interval: 1 unit: rb gives an interval from 3top1: int8 vs fp32 [subject where calib_images=128, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=128, scheme=per_channel]: -0.12 % · paired difference, 1 seed (rb)
- units
- 1 seed · declared: unit = seed
- timing
- declared after the evidence existed: the only unit was produced before it was declared, and so were 7 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:32 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 512 · calib seed 0, recorded 2026-10-20 01:05:33 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 1024 · calib seed 0, recorded 2026-10-20 01:05:33 UTC and 4 more)
- question link
- q-int8 · 2026-10-20 01:04 UTC
- Per-channel INT8 at 2048 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32can't tell yet
INT8 is 0.05 points lower than the FP32 baseline, 1 seed, no interval yet (rb gives one from 3). c-s0-pc-2048
details of c-s0-pc-2048
INT8 is 0.05 points lower than the FP32 baseline · no interval
1 run · 7 runs not counted · its run recorded afterwards · a noninferior rule reads the interval: 1 unit: rb gives an interval from 3
- rule
- c-s0-pc-2048 · secondary · on e-scheme-s0
- as declared
- can't tell yet: a noninferior rule reads the interval: 1 unit: rb gives an interval from 3top1: int8 vs fp32 [subject where calib_images=2048, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=2048, scheme=per_channel]: -0.05 % · paired difference, 1 seed (rb)
- units
- 1 seed · declared: unit = seed
- timing
- declared after the evidence existed: the only unit was produced before it was declared, and so were 7 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:32 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 512 · calib seed 0, recorded 2026-10-20 01:05:33 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 1024 · calib seed 0, recorded 2026-10-20 01:05:33 UTC and 4 more)
- question link
- q-int8 · 2026-10-20 01:05 UTC
- Per-channel INT8 at 512 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32can't tell yet
INT8 is 0.09 points lower than the FP32 baseline, 1 seed, no interval yet (rb gives one from 3). c-s0-pc-512
details of c-s0-pc-512
INT8 is 0.09 points lower than the FP32 baseline · no interval
1 run · 7 runs not counted · its run recorded afterwards · a noninferior rule reads the interval: 1 unit: rb gives an interval from 3
- rule
- c-s0-pc-512 · secondary · on e-scheme-s0
- as declared
- can't tell yet: a noninferior rule reads the interval: 1 unit: rb gives an interval from 3top1: int8 vs fp32 [subject where calib_images=512, scheme=per_channel] no worse than 1, its interval's worse bound inside 1rule no worse than 1 point
- reading
- top1: int8 vs fp32 [subject where calib_images=512, scheme=per_channel]: -0.09 % · paired difference, 1 seed (rb)
- units
- 1 seed · declared: unit = seed
- timing
- declared after the evidence existed: the only unit was produced before it was declared, and so were 7 unpaired runs (run fp32 and int8 · seed 0 · scheme per_tensor · calib images 128 · calib seed 0, recorded 2026-10-20 01:05:32 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 512 · calib seed 0, recorded 2026-10-20 01:05:33 UTC, run fp32 and int8 · seed 0 · scheme per_tensor · calib images 1024 · calib seed 0, recorded 2026-10-20 01:05:33 UTC and 4 more)
- question link
- q-int8 · 2026-10-20 01:04 UTC
Open callsYour call (1)
Calls are made with rb in a terminal, never on this page.
Your calls are made with rb in a terminal; this page gives you the command.
Calls are made with rb in a terminal, not on this page; it shows where they stand.
Experiments behind this question
Next step
"run one more top1 measurement on INT8 PTQ against FP32, CIFAR-10 normalization, 30 epochs, int8 at scheme=per_channel, int8 at calib_images=128, int8 at calib_seed=0, and record it in rb"
"run one more top1 measurement on INT8 PTQ against FP32, CIFAR-10 normalization, 30 epochs, int8 at scheme=per_channel, int8 at calib_images=128, int8 at calib_seed=0, and record it in rb"
Sub-question
Open question
How many calibration images does INT8 need?
Measured differences; uncertainty remains
Rules: 4 met · 1 can't tell yet · 3 not tested
A note, not confirmed: 512 calibration images (per-tensor) are enough to stay within 1 point of FP32. Its rule is met.
Open question
Do per-channel weight scales matter, against one scale per tensor?
Evidence includes point estimates only
Rules: 5 can't tell yet · 3 not tested
Which comparisons carry these qualifications?
no interval
one estimate with no interval, so how much it could vary is unknown. rb gives one from 3 units, and none across fixed design cells.
- c-pc-128 Per-channel INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-s0-pc-1024 Per-channel INT8 at 1024 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-128 Per-channel INT8 at 128 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-2048 Per-channel INT8 at 2048 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-512 Per-channel INT8 at 512 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
rule written after the results
the rule or its question link was declared after the evidence existed or after the data was seen: never read as a test planned in advance.
- c-pt-1024 Per-tensor INT8 at 1024 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-128 Per-tensor INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-2048 Per-tensor INT8 at 2048 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-512 Per-tensor INT8 at 512 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-ref FP32 ResNet-20 reaches the published 91.25% top-1 on CIFAR-10
- c-s0-pc-1024 Per-channel INT8 at 1024 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-128 Per-channel INT8 at 128 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-2048 Per-channel INT8 at 2048 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-512 Per-channel INT8 at 512 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
By reading
not tested · 3
- c-pc-1024 Per-channel INT8 at 1024 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pc-2048 Per-channel INT8 at 2048 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pc-512 Per-channel INT8 at 512 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
can't tell yet · 5
- c-pc-128 Per-channel INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-s0-pc-1024 Per-channel INT8 at 1024 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-128 Per-channel INT8 at 128 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-2048 Per-channel INT8 at 2048 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
- c-s0-pc-512 Per-channel INT8 at 512 calibration images, [0.5] normalization, seed 0, is no more than 1 point of top-1 below its own FP32
rule met · 4
- c-pt-1024 Per-tensor INT8 at 1024 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-128 Per-tensor INT8 at 128 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-2048 Per-tensor INT8 at 2048 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
- c-pt-512 Per-tensor INT8 at 512 calibration images (draw 0) is no more than 1 point of top-1 below its own FP32
not reproduced · 1
- c-ref FP32 ResNet-20 reaches the published 91.25% top-1 on CIFAR-10