mirror of
https://github.com/hpcaitech/ColossalAI.git
synced 2026-07-12 02:38:52 +00:00
* [misc] update pre-commit * [misc] run pre-commit * [misc] remove useless configuration files * [misc] ignore cuda for clang-format
19 lines
720 B
Python
19 lines
720 B
Python
def append_dims(x, target_dims):
|
|
"""Appends dimensions to the end of a tensor until it has target_dims dimensions.
|
|
From https://github.com/crowsonkb/k-diffusion/blob/master/k_diffusion/utils.py"""
|
|
dims_to_append = target_dims - x.ndim
|
|
if dims_to_append < 0:
|
|
raise ValueError(f"input has {x.ndim} dims but target_dims is {target_dims}, which is less")
|
|
return x[(...,) + (None,) * dims_to_append]
|
|
|
|
|
|
def norm_thresholding(x0, value):
|
|
s = append_dims(x0.pow(2).flatten(1).mean(1).sqrt().clamp(min=value), x0.ndim)
|
|
return x0 * (value / s)
|
|
|
|
|
|
def spatial_norm_thresholding(x0, value):
|
|
# b c h w
|
|
s = x0.pow(2).mean(1, keepdim=True).sqrt().clamp(min=value)
|
|
return x0 * (value / s)
|