| 212 | |
| 213 | |
| 214 | def ParameterStack(params, keys=None, is_param=None, fill=0): |
| 215 | if keys is not None: |
| 216 | params = [params[k] for k in keys] |
| 217 | |
| 218 | if fill > 0: |
| 219 | params = [_ravel_hw(p, fill) for p in params] |
| 220 | |
| 221 | requires_grad = params[0].requires_grad |
| 222 | assert all(p.requires_grad == requires_grad for p in params) |
| 223 | |
| 224 | params = torch.stack(list(params)).float().detach() |
| 225 | if is_param or requires_grad: |
| 226 | params = nn.Parameter(params) |
| 227 | params.requires_grad_(requires_grad) |
| 228 | return params |
| 229 | |
| 230 | |
| 231 | def _ravel_hw(tensor, fill=0): |