"Operate BigGAN-PyTorch sampling from compatible checkpoints,
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VectorSpaceLab/AREX-Skill --skill sampling --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Sampling?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vectorspacelab-sampling)More formats (shields.io, HTML) on the badges page.
---
name: sampling
description: "Operate BigGAN-PyTorch sampling from compatible checkpoints,
including EMA and batch-normalization statistics, image sheets, NPZ export,
truncation curves, and repository-specific Inception evaluation."
disable-model-invocation: true
metadata:
disco-role: operating
license: MIT
---
# BigGAN-PyTorch sampling
Use this skill when the task is to load a trained BigGAN-PyTorch generator,
produce random or conditional/interpolated images, export a TensorFlow-compatible
NPZ, or compare the repository's PyTorch Inception metrics. Work from the
repository root so that `sample.py`, `utils.py`, `inception_utils.py`, and the
model module can be imported.
This is a CUDA sampling path: `sample.py` constructs `G` with `.cuda()`, uses
CUDA distributions for `z` and `y`, and the metric wrapper also moves Inception
to CUDA. Confirm the CUDA, PyTorch, torchvision, and checkpoint environment
before launching a large run. Read all three bundled references for exact flag
semantics and recovery procedures.
## Operating procedure
1. **Resolve the checkpoint before choosing outputs.** Identify the exact
`weights_root/<experiment_name>/` directory and the suffix to load. An empty
suffix means `G.pth` and `state_dict.pth`; `best0` and `copy0` mean
`G_best0.pth`/`state_dict_best0.pth` and
`G_copy0.pth`/`state_dict_copy0.pth`, respectively. A usable normal-G run
needs the generator and state dict; a `--use_ema` run additionally needs
`G_ema[_suffix].pth`. `--load_weights` selects a file suffix, not a
directory.
2. **Make the architecture agree with the saved config.** Prefer an explicit
`--experiment_name NAME --load_weights SUFFIX --config_from_name` when the
checkpoint has a saved state dict. The bootstrap state-dict load happens
before `update_config_roots`, so if the checkpoint is outside the default
`weights/`, pass its actual `--weights_root` explicitly as well as
`--base_root` if desired. Without `--config_from_name`, supply the training
architecture flags yourself; `strict=False` in `sample.py` is not a remedy
for incompatible tensor shapes.
3. **Select normal or EMA parameters deliberately.** Omit `--use_ema` to load
`G[_suffix].pth`. Use `--use_ema` only when the checkpoint was saved with an
EMA generator and the matching `G_ema[_suffix].pth` exists. `--ema` describes
the training/configuration and contributes to auto-generated experiment
names; `--use_ema` controls which generator state is loaded for evaluation.
4. **Fix the normalization/statistics mode before comparing samples.**
`--G_eval_mode` calls `G.eval()` and uses running BatchNorm estimates. With
the custom `myBN` implementation, `--accumulate_stats` runs
`--num_standing_accumulations` random forward passes in training mode and
then switches to eval. Keep `G_eval_mode`, `mybn`, accumulation count, EMA
choice, and `z_var` fixed for fair comparisons. The BigGAN recipe uses
`--mybn --accumulate_stats --num_standing_accumulations 32` when standing
statistics are wanted; the provided main sampling recipe instead uses
`--use_ema --G_eval_mode`.
5. **Set noise and batch size explicitly.** `--z_var` controls the `var` field
of the custom normal `Distribution`. In this code that field is passed as
the second argument to `Tensor.normal_`, i.e. as the normal scale despite
the historical “variance” name. `G_batch_size` is set to
`max(--G_batch_size, --batch_size)`, so lower both flags when reducing GPU
memory. `--seed` seeds PyTorch CUDA and NumPy RNGs but does not make every
multi-GPU or cuDNN operation deterministic.
6. **Choose one or more output actions and check their prerequisites.**
`--sample_random` writes a normalized `random_samples.jpg`;
`--sample_sheets` writes class-conditional sheets;
`--sample_interps` writes Z/Y interpolation sheets;
`--sample_npz --sample_num_npz N` writes `samples.npz` with `x` uint8 CHW
images and `y` integer labels; and metric flags compute repository-specific
scores. Create the samples root first: the script does not call
`utils.prepare_root`, and NPZ/random output assumes the experiment directory
already exists. See `references/workflows.md` for exact layout and commands.
7. **Treat metric names as implementation-specific.** The built-in path uses
torchvision Inception, ImageNet normalization, 299x299 resizing, and
`<base-dataset>_inception_moments.npz`. Its IS/FID are explicitly unofficial
and not numerically interchangeable with the legacy TensorFlow metric. To
obtain the TensorFlow-style IS, first produce the NPZ and then run the
repository's TensorFlow 1.3-or-earlier evaluator. Record the implementation,
weights (normal/EMA), mode, `z_var`, image count, and moments used with every
score.
## Standard command shape
For a checkpoint with a saved config, use a command of this form (replace the
paths and name; do not invent a name from a changed sampling batch size):
```bash
mkdir -p /path/to/samples /path/to/samples/EXPERIMENT
python sample.py \
--experiment_name EXPERIMENT --weights_root /path/to/weights \
--load_weights best0 --config_from_name \
--batch_size 32 --G_batch_size 32 --seed 0 \
--use_ema --G_eval_mode --sample_random
```
Add only the required output flags. A truncation sweep, for example, adds
`--sample_inception_metrics --sample_trunc_curves 0.05_0.05_1.0`; this is a
metric run, not a cheap image smoke test. Do not start with 50,000 images or
multiple sheets when first validating a checkpoint.
## Required recovery behavior
- For missing weights, inspect the experiment directory and repair the
`--weights_root`, `--experiment_name`, or `--load_weights` selection. A
missing `state_dict[_suffix].pth` prevents `--config_from_name`; recover the
saved config or provide every architecture argument explicitly.
- For an EMA load failure, remove `--use_ema` only if a normal-G evaluation is
acceptable; otherwise locate a checkpoint containing the matching
`G_ema[_suffix].pth`. Never label a normal-G result as an EMA result.
- For missing Inception moments, generate the dataset moments using the data
preparation/moments script, put the file where `inception_utils.py` will
search, or restrict the run to checkpoint/image loading after applying the
lazy-metrics source fix described in `references/troubleshooting.md`.
`--no_fid` is not a missing-moments workaround because moments are loaded
before the metric flags are consulted.
- For incompatible configs, load the state dict's saved config, use
`--config_from_name`, and keep only documented runtime overrides. A shape
mismatch means the checkpoint and model are genuinely incompatible; do not
paper over it with `strict=False`.
- For CUDA OOM, reduce both `--batch_size` and `--G_batch_size`, disable
`--parallel` only if it reduces overhead on the available topology, and
reduce image counts or run outputs separately. NPZ sampling accumulates all
generated arrays in host memory before writing, so large `--sample_num_npz`
values can also exhaust RAM.
- For `sample.py --help` crashing with `ValueError: unsupported format
character '#'`, the `--logstyle` help text in `utils.py` contains literal
`%#.#f`/`%#.#e` strings. Escape the percent signs as `%%#.#f` and
`%%#.#e` (or remove the formatting examples), then retry help. Until that
source-only fix is made, use known flags directly rather than treating the
help crash as a checkpoint failure.
For the complete flag contract, file names, metric caveats, multi-GPU behavior,
and failure matrix, read `references/api-reference.md`,
`references/workflows.md`, and `references/troubleshooting.md`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!