Create a beta schedule that discretizes the given alpha_t_bar function, which defines the cumulative product of (1-beta) over time from t = [0,1]. :param num_diffusion_timesteps: the number of betas to produce. :param alpha_bar: a lambda that takes an argument t from 0 to 1 and
(num_diffusion_timesteps, alpha_bar, max_beta=0.999)
| 123 | |
| 124 | |
| 125 | def betas_for_alpha_bar(num_diffusion_timesteps, alpha_bar, max_beta=0.999): |
| 126 | """ |
| 127 | Create a beta schedule that discretizes the given alpha_t_bar function, |
| 128 | which defines the cumulative product of (1-beta) over time from t = [0,1]. |
| 129 | :param num_diffusion_timesteps: the number of betas to produce. |
| 130 | :param alpha_bar: a lambda that takes an argument t from 0 to 1 and |
| 131 | produces the cumulative product of (1-beta) up to that |
| 132 | part of the diffusion process. |
| 133 | :param max_beta: the maximum beta to use; use values lower than 1 to |
| 134 | prevent singularities. |
| 135 | """ |
| 136 | betas = [] |
| 137 | for i in range(num_diffusion_timesteps): |
| 138 | t1 = i / num_diffusion_timesteps |
| 139 | t2 = (i + 1) / num_diffusion_timesteps |
| 140 | betas.append(min(1 - alpha_bar(t2) / alpha_bar(t1), max_beta)) |
| 141 | return np.array(betas) |
| 142 | |
| 143 | |
| 144 | class GaussianDiffusion: |
no outgoing calls
no test coverage detected