-
Notifications
You must be signed in to change notification settings - Fork 10
Open
Description
Bug: TypeError in locomotion branch safety constraints
Error: TypeError: 'int' object is not subscriptable in diffusion.py:623
A TypeError: 'int' object is not subscriptable occurs when running the locomotion branch during the sampling phase.
Environment
- Branch : locomotion
- File :
diffuser/models/diffusion.py - Python version : 3.8
Full Traceback
Traceback (most recent call last):
File "scripts/train.py", line 124, in <module>
trainer.train(n_train_steps=args.n_steps_per_epoch)
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/utils/training.py", line 132, in train
self.render_samples()
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/utils/training.py", line 208, in render_samples
samples = self.ema_model(conditions)
File "/usr/local/lib/python3.8/dist-packages/torch/nn/modules/module.py", line 1423, in *call*impl
return forward_call(*input, **kwargs)
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/models/diffusion.py", line 851, in forward
return self.conditional_sample(cond, *args, **kwargs)
File "/usr/local/lib/python3.8/dist-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/models/diffusion.py", line 230, in conditional_sample
return self.p_sample_loop(shape, cond, return_chain = True, **sample_kwargs) # debug
File "/usr/local/lib/python3.8/dist-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/models/diffusion.py", line 194, in p_sample_loop
x, b_min = self.invariance_cheetah(x_t, x)
File "/usr/local/lib/python3.8/dist-packages/torch/autograd/grad_mode.py", line 27, in decorate_context
return func(*args, **kwargs)
File "/home/work/CBF-CFM/ziwon/SafeDiffuser/diffuser/models/diffusion.py", line 623, in invariance_cheetah
radius = (radius - self.mean[0]) / self.std[0]
TypeError: 'int' object is not subscriptable
Problem
In the GaussianDiffusion class constructor (diffusion.py line ~75), self.mean and self.std are initialized as integers:
# Constructor initializes as int
self.mean = 0
self.std = 0However, the safety constraint methods (invariance_cheetah, invariance_hopper, etc.) expect these to be arrays/tensors for normalization:
def invariance_cheetah(self, x, xp1):
# ...
radius = (radius - self.mean[0]) / self.std[0] # ← Tries to index integer
cx = (cx - self.mean[14]) / self.std[14] # ← Same issue
cy = (cy - self.mean[0]) / self.std[0] # ← Same issue
Reproduce
- Switch to locomotion branch
- Run training with cheetah environment (
python scripts/train.py --dataset halfcheetah-medium-expert-v2) - Error occurs during sampling
Affected Methods
All safety constraint methods: invariance*, invariance_*_cf, invariance_*_cpx
Naively editing just self.mean and self.std like
self.transition_dim = observation_dim + action_dim
self.mean = torch.zeros(self.transition_dim)
self.std = torch.ones(self.transition_dim)
causes another errors 😂 Would appreciate any insights or suggestions on the best approach to fix this.
Thank you for taking the time to look into this issue.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels