# EulerDiscreteScheduler

Euler zamanlayıcısı (Algoritma 2), Karras ve ark. tarafından kaleme alınan [Elucidating the Design Space of Diffusion-Based Generative Models](https://huggingface.co/papers/2206.00364) makalesinden alınmıştır. Bu, genellikle 20-30 adımda iyi çıktılar üretebilen hızlı bir zamanlayıcıdır. Zamanlayıcı, [Katherine Crowson](https://github.com/crowsonkb/) tarafından geliştirilen orijinal [k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L51) uygulamasına dayanmaktadır.

## EulerDiscreteScheduler[[diffusers.EulerDiscreteScheduler]]

#### diffusers.EulerDiscreteScheduler[[diffusers.EulerDiscreteScheduler]]

```python
diffusers.EulerDiscreteScheduler(num_train_timesteps: int = 1000, beta_start: float = 0.0001, beta_end: float = 0.02, beta_schedule: str = 'linear', trained_betas: numpy.ndarray | list[float] | None = None, prediction_type: str = 'epsilon', interpolation_type: str = 'linear', use_karras_sigmas: bool | None = False, use_exponential_sigmas: bool | None = False, use_beta_sigmas: bool | None = False, sigma_min: float | None = None, sigma_max: float | None = None, timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'linspace', timestep_type: typing.Literal['discrete', 'continuous'] = 'discrete', steps_offset: int = 0, rescale_betas_zero_snr: bool = False, final_sigmas_type: typing.Literal['zero', 'sigma_min'] = 'zero')
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L143)

**Parametreler:**

num_train_timesteps (`int`, varsayılan 1000) : Modelin eğitileceği difüzyon adım sayısı.

beta_start (`float`, varsayılan 0.0001) : Çıkarımın başlangıç `beta` değeri.

beta_end (`float`, varsayılan 0.02) : Son `beta` değeri.

beta_schedule (`Literal["linear", "scaled_linear", "squaredcos_cap_v2"]`, varsayılan `"linear"`) : Beta zamanlaması, modelin adım atması için beta aralığını beta dizisine eşleyen bir haritalamadır. `"linear"`, `"scaled_linear"` veya `"squaredcos_cap_v2"` seçeneklerinden birini seçin.

trained_betas (`np.ndarray`, *isteğe bağlı*) : `beta_start` ve `beta_end` parametrelerini atlamak için beta dizisini doğrudan yapılandırıcıya iletin.

prediction_type (`Literal["epsilon", "sample", "v_prediction"]`, defaults to `"epsilon"`, *optional*) : Prediction type of the scheduler function; can be `"epsilon"` (predicts the noise of the diffusion process), `"sample"` (directly predicts the noisy sample`) or `"v_prediction"` (see section 2.4 of [Imagen Video](https://huggingface.co/papers/2210.02303) paper).

interpolation_type (`Literal["linear", "log_linear"]`, varsayılan `"linear"`, *isteğe bağlı*) : Zamanlayıcının gürültü azaltma adımları için ara sigma değerlerini hesaplamak üzere kullanılacak interpolasyon türü. `"linear"` veya `"log_linear"` değerlerinden biri olmalıdır.

use_karras_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için Karras sigmalarının kullanılıp kullanılmayacağını belirtir. `True` ise, sigmalar {σi} gürültü seviyeleri dizisine göre belirlenir.

use_exponential_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasındaki adım boyutları için üstel sigmaların kullanılıp kullanılmayacağını belirtir.

use_beta_sigmas (`bool`, *isteğe bağlı*, varsayılan `False`) : Örnekleme sürecinde gürültü zamanlamasında adım boyutları için beta sigmaların kullanılıp kullanılmayacağını belirtir. Daha fazla bilgi için [Beta Sampling is All You Need](https://huggingface.co/papers/2407.12173) makalesine bakın.

sigma_min (`float`, *isteğe bağlı*) : Gürültü zamanlaması için minimum sigma değeri. Verilmezse, zamanlamadaki son sigma değeri varsayılan olarak kullanılır.

sigma_max (`float`, *isteğe bağlı*) : Gürültü zamanlaması için maksimum sigma değeri. Verilmezse, zamanlamadaki ilk sigma değeri varsayılan olarak kullanılır.

timestep_spacing (`Literal["linspace", "leading", "trailing"]`, varsayılan `"linspace"`) : Zaman adımlarının ölçeklendirilme yöntemi. Daha fazla bilgi için [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) makalesindeki Tablo 2'ye bakın.

timestep_type (`Literal["discrete", "continuous"]`, varsayılan `"discrete"`) : Kullanılacak timestep türü. `"discrete"` veya `"continuous"` olabilir.

steps_offset (`int`, varsayılan 0) : Bazı model ailelerinin gerektirdiği gibi, çıkarım adımlarına eklenen bir ofset.

rescale_betas_zero_snr (`bool`, varsayılan `False`) : Betaların sıfır terminal SNR'ye sahip olacak şekilde yeniden ölçeklenip ölçeklenmeyeceğini belirtir. Bu, modelin orta parlaklıktaki örneklerle sınırlı kalmak yerine çok parlak ve karanlık örnekler üretmesini sağlar. [`--offset_noise`](https://github.com/huggingface/diffusers/blob/74fd735eb073eb1d774b1ab4154a0876eb82f055/examples/dreambooth/train_dreambooth.py#L506) ile gevşek bir şekilde ilişkilidir.

final_sigmas_type (`Literal["zero", "sigma_min"]`, varsayılan `"zero"`) : Örnekleme süreci sırasında gürültü zamanlaması için son `sigma` değeri. `"sigma_min"` ise, son sigma, eğitim zamanlamasındaki son sigma ile aynıdır. `"zero"` ise, son sigma 0 olarak ayarlanır.

Euler zamanlayıcı.

Bu model [SchedulerMixin](/docs/diffusers/main/tr/api/schedulers/overview#diffusers.SchedulerMixin) ve [ConfigMixin](/docs/diffusers/main/tr/api/configuration#diffusers.ConfigMixin) sınıflarından devralır. Kütüphanenin tüm zamanlayıcılar için yükleme ve kaydetme gibi genel yöntemleri uyguladığı üst sınıf belgelendirmesini kontrol edin.

#### add_noise[[diffusers.EulerDiscreteScheduler.add_noise]]

```python
add_noise(original_samples: Tensor, noise: Tensor, timesteps: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L802)

**Parametreler:**

original_samples (`torch.Tensor`) : Gürültü eklenecek orijinal örnekler.

noise (`torch.Tensor`) : Orijinal örneklerin üzerine eklenecek gürültü tensörü.

timesteps (`torch.Tensor`) : Gürültünün ekleneceği zaman adımları, zaman çizelgesinden gürültü seviyesini belirler.

**Dönüş:** `torch.Tensor`

Zaman adımı zamanlamasına göre ölçeklendirilen eklenen gürültüye sahip gürültülü örnekler.

Belirtilen zaman adımlarındaki gürültü planına göre orijinal örneklerin gürültü ekleyin.

#### get_velocity[[diffusers.EulerDiscreteScheduler.get_velocity]]

```python
get_velocity(sample: Tensor, noise: Tensor, timesteps: Tensor)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L850)

**Parametreler:**

sample (`torch.Tensor`) : Hızın hesaplanacağı giriş örneği.

noise (`torch.Tensor`) : Örnek ile eşleşen gürültü tensörü.

timesteps (`torch.Tensor`) : Hızın hesaplanacağı zaman adımları.

**Dönüş:** `torch.Tensor`

`sqrt(alpha_prod) * noise - sqrt(1 - alpha_prod) * sample` olarak hesaplanan hız tahmini.

Belirtilen zaman adımlarında, verilen örnek ve gürültü için hız tahminini hesaplayın.

Bu yöntem, örnek ve gürültünün doğrusal bir kombinasyonunu tahmin eden v-tahmin modellerinde kullanılan hız tahminini uygular.

#### index_for_timestep[[diffusers.EulerDiscreteScheduler.index_for_timestep]]

```python
index_for_timestep(timestep: typing.Union[float, torch.Tensor], schedule_timesteps: typing.Optional[torch.Tensor] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L640)

**Parametreler:**

timestep (`float` veya `torch.Tensor`) : Zamanlamada bulunacak timestep değeri.

schedule_timesteps (`torch.Tensor`, *isteğe bağlı*) : Aranacak zaman adımı zamanlaması. `None` ise `self.timesteps` kullanılır.

**Dönüş:** `int`

Zaman adımı planındaki zaman adımının indeksi. Çok eşleşme varsa, planın ortasından başlanırken (örneğin, görüntüden görüntüye) bir sigmanın atlanmaması için çok eşleşme durumunda ikinci indeksi döndürür.

Verilen zaman adımının zaman adımı zaman çizelgesindeki indeksini bulun.

#### scale_model_input[[diffusers.EulerDiscreteScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, timestep: typing.Union[float, torch.Tensor])
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L326)

**Parametreler:**

sample (`torch.Tensor`) : Ölçeklendirilecek girdi örneği.

timestep (`float` veya `torch.Tensor`) : Difüzyon zincirindeki mevcut zaman adımı.

**Dönüş:** `torch.Tensor`

`(sigma**2 + 1) ** 0.5` ile bölünmüş ölçeklendirilmiş bir giriş örneği.

Gürültü azaltma modelinin girdisinin, mevcut zaman adımına bağlı olarak ölçeklenmesi gereken zamanlayıcılarla değiştirilebilirliği sağlar. Euler algoritmasıyla eşleşmesi için gürültü azaltma modelinin girdisini `(sigma**2 + 1) ** 0.5` ile ölçekler.

#### set_begin_index[[diffusers.EulerDiscreteScheduler.set_begin_index]]

```python
set_begin_index(begin_index: int = 0)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L316)

**Parametreler:**

begin_index (`int`, varsayılan `0`) : Zamanlayıcının başlangıç indeksi.

Zamanlayıcının başlangıç indeksini ayarlar. Bu işlev, çıkarım (inference) öncesinde pipeline'dan çalıştırılmalıdır.

#### set_timesteps[[diffusers.EulerDiscreteScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int = None, device: typing.Union[str, torch.device] = None, timesteps: list[int] | None = None, sigmas: list[float] | None = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L350)

**Parametreler:**

num_inference_steps (`int`, *opsiyonel*) : Ön eğitilmiş bir modelle örnekler oluşturulurken kullanılan difüzyon adım sayısı. `None` ise `timesteps` veya `sigmas` sağlanmalıdır.

device (`str` veya `torch.device`, *opsiyonel*) : Timestep'lerin taşınacağı cihaz. `None` ise timestep'ler taşınmaz.

timesteps (`list[int]`, *isteğe bağlı*) : İsteğe bağlı zaman adımları zaman çizelgesini desteklemek için kullanılan özel zaman adımları. `None` ise, zaman adımları `timestep_spacing` özniteliğine dayanılarak oluşturulur. `timesteps` geçirilirse, `num_inference_steps` ve `sigmas` `None` olmalıdır ve `timestep_spacing` özniteliği yok sayılır.

sigmas (`list[float]`, *isteğe bağlı*) : İsteğe bağlı zaman adımları zaman çizelgesini desteklemek için kullanılan özel sigmalar. `None` ise, zaman adımları ve sigmalar ilgili zamanlayıcı özniteliklerine dayanılarak oluşturulur. `sigmas` geçirilirse, `num_inference_steps` ve `timesteps` `None` olmalıdır ve zaman adımları özel sigmalar zaman çizelgesine dayanılarak oluşturulur.

Difüzyon zinciri için kullanılan ayrık zaman adımlarını ayarlar (çalıştırılmadan önce çıkarım yapılmalıdır).

#### adım[[diffusers.EulerDiscreteScheduler.step]]

```python
step(model_output: Tensor, timestep: typing.Union[float, torch.Tensor], sample: Tensor, s_churn: float = 0.0, s_tmin: float = 0.0, s_tmax: float = inf, s_noise: float = 1.0, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L685)

**Parametreler:**

model_output (`torch.Tensor`) : Öğrenen difüzyon modelinden gelen doğrudan çıktı.

timestep (`float` veya `torch.Tensor`) : Difüzyon zincirindeki mevcut ayrık zaman adımı.

sample (`torch.Tensor`) : Difüzyon süreci tarafından oluşturulan bir örneğin mevcut bir örneği.

s_churn (`float`, *isteğe bağlı*, varsayılan `0.0`) : Örnekleme sırasında eklenen gürültü miktarını kontrol eden stokastisite parametresi. Daha yüksek değerler rastgeleliği artırır.

s_tmin (`float`, *opsiyonel*, varsayılan `0.0`) : Stokastisitenin uygulanması için minimum zaman adımı eşiği. Sadece bu değerin üzerindeki zaman adımlarına gürültü eklenir.

s_tmax (`float`, *opsiyonel*, varsayılan `inf`) : Stokastisitenin uygulanması için maksimum zaman adımı eşiği. Sadece bu değerin altındaki zaman adımlarına gürültü eklenir.

s_noise (`float`, *isteğe bağlı*, varsayılan `1.0`) : Örneğe eklenen gürültü için ölçekleme faktörü.

generator (`torch.Generator`, *isteğe bağlı*) : Yeniden üretilebilir örneklemeler için rastgele sayı üreteci.

return_dict (`bool`, *isteğe bağlı*, varsayılan `True`) : [EulerDiscreteSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/euler#diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput) veya tuple döndürülüp döndürülmemeye karar verir.

**Dönüş:** [EulerDiscreteSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/euler#diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput) veya `tuple`

`return_dict` `True` ise [EulerDiscreteSchedulerOutput](/docs/diffusers/main/tr/api/schedulers/euler#diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput) döndürülür, aksi takdirde bir tuple döndürülür; bu tuple'ın ilk öğesi örnek tensörü, ikinci öğesi ise tahmin edilen orijinal örnektir.

Önceki zaman adımındaki örneği SDE'yi tersine çevirerek tahmin edin. Bu işlev, öğrenilen model çıktılarını (en sık tahmin edilen gürültüyü) kullanarak difüzyon sürecini ilerletir.

## EulerDiscreteSchedulerOutput[[diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput]]

#### diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput[[diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput]]

```python
diffusers.schedulers.scheduling_euler_discrete.EulerDiscreteSchedulerOutput(prev_sample: Tensor, pred_original_sample: typing.Optional[torch.Tensor] = None)
```

[Kaynak](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_euler_discrete.py#L36)

**Parametreler:**

prev_sample (`torch.Tensor`, görüntüler için `(batch_size, num_channels, height, width)` boyutunda) : Önceki zaman adımının hesaplanan `(x_{t-1})` örneği. `prev_sample`, gürültü azaltma döngüsünde bir sonraki model girdisi olarak kullanılmalıdır.

pred_original_sample (`torch.Tensor`, görüntüler için `(batch_size, num_channels, height, width)` boyutunda) : Mevcut zaman adımındaki model çıktısına dayalı olarak tahmin edilen gürültüsü azaltılmış örnek `(x_{0})`. `pred_original_sample`, ilerlemeyi önizlemek veya yönlendirme için kullanılabilir.

Zamanlayıcının `step` işlevi çıktısı için çıktı sınıfı.

