# PNDMScheduler

`PNDMScheduler`, atau metode numerik semu untuk model difusi, menggunakan teknik integrasi ODE yang lebih canggih seperti Runge-Kutta dan metode multi-langkah linear. Implementasi aslinya dapat ditemukan di [crowsonkb/k-diffusion](https://github.com/crowsonkb/k-diffusion/blob/481677d114f6ea445aa009cf5bd7a9cdee909e47/k_diffusion/sampling.py#L181).

## PNDMScheduler[[diffusers.PNDMScheduler]]

#### diffusers.PNDMScheduler[[diffusers.PNDMScheduler]]

```python
diffusers.PNDMScheduler(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, skip_prk_steps: bool = False, set_alpha_to_one: bool = False, prediction_type: typing.Literal['epsilon', 'v_prediction'] = 'epsilon', timestep_spacing: typing.Literal['linspace', 'leading', 'trailing'] = 'leading', steps_offset: int = 0)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L80)

**Parameter:**

num_train_timesteps (`int`, defaultnya `1000`) : Jumlah langkah difusi untuk melatih model.

beta_start (`float`, defaultnya `0.0001`) : Nilai awal `beta` untuk inferensi.

beta_end (`float`, defaultnya `0.02`) : Nilai `beta` akhir.

beta_schedule (`"linear"`, `"scaled_linear"`, atau `"squaredcos_cap_v2"`, defaultnya `"linear"`) : Jadwal beta, pemetaan dari rentang beta ke urutan beta untuk melangkahkan model.

trained_betas (`np.ndarray`, *opsional*) : Lewatkan `beta_start` dan `beta_end` dengan meneruskan array betas secara langsung ke konstruktor.

skip_prk_steps (`bool`, defaultnya `False`) : Memungkinkan scheduler untuk melewati langkah-langkah Runge-Kutta yang didefinisikan dalam paper asli sebagai prasyarat sebelum langkah-langkah PLMS.

set_alpha_to_one (`bool`, defaultnya `False`) : Setiap langkah difusi menggunakan nilai produk alfa pada langkah tersebut dan pada langkah sebelumnya. Untuk langkah terakhir, tidak ada alfa sebelumnya. Ketika opsi ini `True`, produk alfa sebelumnya ditetapkan ke `1`, selain itu menggunakan nilai alfa pada langkah 0.

prediction_type (`"epsilon"` atau `"v_prediction"`, defaultnya `"epsilon"`) : Jenis prediksi dari fungsi scheduler; bisa berupa `epsilon` (memprediksi noise dari proses difusi) atau `v_prediction` (lihat bagian 2.4 dari paper [Imagen Video](https://huggingface.co/papers/2210.02303)).

timestep_spacing (`"linspace"`, `"leading"`, atau `"trailing"`, defaultnya `"leading"`) : Cara timestep harus diskalakan. Lihat Tabel 2 dari [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) untuk informasi lebih lanjut.

steps_offset (`int`, defaultnya `0`) : Offset yang ditambahkan ke langkah inferensi, sesuai dengan kebutuhan beberapa keluarga model.

`PNDMScheduler` menggunakan metode numerik pseudo untuk model difusi seperti Runge-Kutta dan metode multi-langkah linear.

Model ini mewarisi dari [SchedulerMixin](/docs/diffusers/main/id/api/schedulers/overview#diffusers.SchedulerMixin) dan [ConfigMixin](/docs/diffusers/main/id/api/configuration#diffusers.ConfigMixin). Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan pustaka ini untuk semua scheduler, seperti pemuatan dan penyimpanan.

#### add_noise[[diffusers.PNDMScheduler.add_noise]]

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

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L461)

**Parameter:**

original_samples (`torch.Tensor`) : Sampel asli yang akan ditambahkan dengan noise.

noise (`torch.Tensor`) : Kebisingan yang akan ditambahkan ke sampel.

timesteps (`torch.IntTensor`) : Langkah waktu yang menunjukkan tingkat noise untuk setiap sampel.

**Mengembalikan:** `torch.Tensor`

Sampel yang bising.

Tambahkan noise ke sampel asli sesuai dengan magnitudo noise pada setiap timestep (ini adalah proses difusi maju).

#### scale_model_input[[diffusers.PNDMScheduler.scale_model_input]]

```python
scale_model_input(sample: Tensor, *args, **kwargs)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L394)

**Parameter:**

sample (`torch.Tensor`) : Sampel input.

**Mengembalikan:** `torch.Tensor`

Contoh input yang diskalakan.

Memastikan interoperabilitas dengan scheduler yang perlu menskalakan input model denoising berdasarkan timestep saat ini.

#### set_timesteps[[diffusers.PNDMScheduler.set_timesteps]]

```python
set_timesteps(num_inference_steps: int, device: typing.Union[str, torch.device] = None)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L172)

**Parameter:**

num_inference_steps (`int`) : Jumlah langkah difusi yang digunakan saat menghasilkan sampel dengan model terlatih sebelumnya.

device (`str` atau `torch.device`, *opsional*) : Perangkat tempat timestep harus dipindahkan. Jika `None`, timestep tidak dipindahkan.

Menetapkan langkah waktu diskrit yang digunakan untuk rantai difusi (untuk dijalankan sebelum inferensi).

#### langkah[[diffusers.PNDMScheduler.step]]

```python
step(model_output: Tensor, timestep: int, sample: Tensor, return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L232)

**Parameter:**

model_output (`torch.Tensor`) : Output langsung dari model difusi yang telah dipelajari.

timestep (`int`) : Langkah waktu diskret saat ini dalam rantai difusi.

sample (`torch.Tensor`) : Instans saat ini dari sampel yang dibuat oleh proses difusi.

return_dict (`bool`, defaultnya `True`) : Apakah akan mengembalikan [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau `tuple`.

**Mengembalikan:** [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau `tuple`

If return_dict is `True`, [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah tensor sampel.

Prediksi sampel dari timestep sebelumnya dengan membalik SDE. Fungsi ini menyebarkan proses difusi dari output model yang dipelajari (paling sering berupa noise yang diprediksi), dan memanggil [step_prk()](/docs/diffusers/main/id/api/schedulers/pndm#diffusers.PNDMScheduler.step_prk) atau [step_plms()](/docs/diffusers/main/id/api/schedulers/pndm#diffusers.PNDMScheduler.step_plms) tergantung pada variabel internal `counter`.

#### step_plms[[diffusers.PNDMScheduler.step_plms]]

```python
step_plms(model_output: Tensor, timestep: int, sample: Tensor, return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L324)

**Parameter:**

model_output (`torch.Tensor`) : Output langsung dari model difusi yang telah dipelajari.

timestep (`int`) : Langkah waktu diskret saat ini dalam rantai difusi.

sample (`torch.Tensor`) : Instans saat ini dari sampel yang dibuat oleh proses difusi.

return_dict (`bool`, defaultnya `True`) : Apakah akan mengembalikan [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau tuple.

**Mengembalikan:** [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau `tuple`

If return_dict is `True`, [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah tensor sampel.

Prediksikan sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan metode multistep linear. Fungsi ini melakukan satu kali forward pass beberapa kali untuk mengaproksimasi solusi.

#### step_prk[[diffusers.PNDMScheduler.step_prk]]

```python
step_prk(model_output: Tensor, timestep: int, sample: Tensor, return_dict: bool = True)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_pndm.py#L265)

**Parameter:**

model_output (`torch.Tensor`) : Output langsung dari model difusi yang telah dipelajari.

timestep (`int`) : Langkah waktu diskret saat ini dalam rantai difusi.

sample (`torch.Tensor`) : Instans saat ini dari sampel yang dibuat oleh proses difusi.

return_dict (`bool`, defaultnya `True`) : Apakah akan mengembalikan [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau tuple.

**Mengembalikan:** [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) atau `tuple`

If return_dict is `True`, [SchedulerOutput](/docs/diffusers/main/id/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) dikembalikan, selain itu sebuah tuple dikembalikan di mana elemen pertama adalah tensor sampel.

Prediksikan sampel dari langkah waktu sebelumnya dengan membalikkan SDE. Fungsi ini menyebarkan sampel dengan metode Runge-Kutta. Fungsi ini melakukan empat langkah maju untuk mengaproksimasi solusi dari persamaan diferensial.

## SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

#### diffusers.schedulers.scheduling_utils.SchedulerOutput[[diffusers.schedulers.scheduling_utils.SchedulerOutput]]

```python
diffusers.schedulers.scheduling_utils.SchedulerOutput(prev_sample: Tensor)
```

[Sumber](https://github.com/huggingface/diffusers/blob/main/src/diffusers/schedulers/scheduling_utils.py#L66)

**Parameter:**

prev_sample (`torch.Tensor` dengan bentuk `(batch_size, num_channels, height, width)` untuk gambar) : Sampel `(x_{t-1})` yang dihitung dari timestep sebelumnya. `prev_sample` harus digunakan sebagai input model berikutnya dalam loop denoising.

Kelas dasar untuk keluaran dari fungsi `step` sebuah scheduler.

