# PNDMScheduler

`PNDMScheduler`، أو الأساليب العددية الزائفة لنماذج الانتشار، يستخدم تقنيات أكثر تقدماً لتكامل معادلات التفاضل العادية مثل طريقة رونغي-كوتا وطريقة الخطوات المتعددة الخطية. يمكن العثور على التنفيذ الأصلي في [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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L80)

**المعاملات:**

num_train_timesteps (`int`، القيمة الافتراضية `1000`) : عدد خطوات الانتشار لتدريب النموذج.

beta_start (`float`، القيمة الافتراضية `0.0001`) : القيمة الابتدائية لـ`beta` أثناء الاستدلال.

beta_end (`float`، القيمة الافتراضية `0.02`) : القيمة النهائية لـ`beta`.

beta_schedule (`"linear"` أو `"scaled_linear"` أو `"squaredcos_cap_v2"`، الافتراضي هو `"linear"`) : جدول بيتا، وهو إسقاط من نطاق بيتا إلى تسلسل من قيم بيتا لتقدم النموذج خطوة بخطوة.

trained_betas (`np.ndarray`، *اختياري*) : مرر مصفوفة من قيم بيتا مباشرةً إلى منشئ الكائن لتجاوز `beta_start` و`beta_end`.

skip_prk_steps (`bool`، القيمة الافتراضية `False`) : يسمح للمجدول بتخطي خطوات رونج-كوتا (Runge-Kutta) المحددة في الورقة الأصلية على أنها مطلوبة قبل خطوات PLMS.

set_alpha_to_one (`bool`، القيمة الافتراضية `False`) : يستخدم كل خطوة انتشار قيمة حاصل ضرب الألفا في تلك الخطوة وفي الخطوة السابقة. لا توجد ألفا سابقة للخطوة الأخيرة. عندما تكون هذه الخانة `True` يتم تثبيت حاصل ضرب ألفا السابقة عند `1`، وإلا فإنه يستخدم قيمة ألفا في الخطوة 0.

prediction_type (`"epsilon"` أو `"v_prediction"`، الافتراضي هو `"epsilon"`) : نوع التنبؤ لدالة المجدول؛ يمكن أن يكون `epsilon` (يتنبأ بالضوضاء في عملية الانتشار) أو `v_prediction` (انظر القسم 2.4 من ورقة [Imagen Video](https://huggingface.co/papers/2210.02303)).

timestep_spacing (`"linspace"`, `"leading"`, or `"trailing"`, defaults to `"leading"`) : The way the timesteps should be scaled. Refer to Table 2 of the [Common Diffusion Noise Schedules and Sample Steps are Flawed](https://huggingface.co/papers/2305.08891) for more information.

steps_offset (`int`، القيمة الافتراضية `0`) : إزاحة تُضاف إلى خطوات الاستدلال، كما تتطلبها بعض عائلات النماذج.

`PNDMScheduler` يستخدم طرقًا عددية تقريبية لنماذج الانتشار مثل طريقة رونغي-كوتا وطريقة الخطوات المتعددة الخطية.

يرث هذا النموذج من [SchedulerMixin](/docs/diffusers/v0.43.0/ar/api/schedulers/overview#diffusers.SchedulerMixin) و [ConfigMixin](/docs/diffusers/v0.43.0/ar/api/configuration#diffusers.ConfigMixin). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع مجدولات التعلم، مثل التحميل والحفظ.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L461)

**المعاملات:**

original_samples (`torch.Tensor`) : العينات الأصلية التي سيتم إضافة الضوضاء إليها.

noise (`torch.Tensor`) : الضوضاء التي يجب إضافتها إلى العينات.

timesteps (`torch.IntTensor`) : خطوات الزمن التي تشير إلى مستوى الضوضاء لكل عينة.

**يعيد:** `torch.Tensor`

العينات الضجيجية.

أضف الضوضاء إلى العينات الأصلية وفقًا لحجم الضوضاء في كل خطوة زمنية (وهذا هو عملية الانتشار الأمامي).

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L394)

**المعاملات:**

sample (`torch.Tensor`) : العينة المدخلة.

**يعيد:** `torch.Tensor`

عينة إدخال مُقيّمة.

يضمن قابلية الاستبدال مع المجدولات التي تحتاج إلى تحجيم مدخلات نموذج إزالة الضوضاء اعتمادًا على خطوة الزمن الحالية.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L172)

**المعاملات:**

num_inference_steps (`int`) : عدد خطوات الانتشار المستخدمة عند توليد العينات باستخدام نموذج مُدرَّب مسبقًا.

device (`str` أو `torch.device`، *اختياري*) : الجهاز الذي يجب نقل خطوات الزمن (timesteps) إليه. إذا كان `None`، فلن يتم نقل خطوات الزمن.

يحدد الخطوات الزمنية المنفصلة المستخدمة لسلسلة الانتشار (لتُنفَّذ قبل الاستدلال).

#### خطوة[[diffusers.PNDMScheduler.step]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L232)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple` أم لا.

**يعيد:** [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

إذا كانت قيمة `True`، يُعاد [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

تنبّأ بالعينة من الخطوة الزمنية السابقة عن طريق عكس عملية المعادلة التفاضلية العشوائية (SDE). تنقل هذه الدالة عملية الانتشار من مخرجات النموذج المتعلّم (والتي تكون في الغالب الضوضاء المتنبّأ بها)، وتستدعي [step_prk()](/docs/diffusers/v0.43.0/ar/api/schedulers/pndm#diffusers.PNDMScheduler.step_prk) أو [step_plms()](/docs/diffusers/v0.43.0/ar/api/schedulers/pndm#diffusers.PNDMScheduler.step_plms) اعتماداً على المتغير الداخلي `counter`.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L324)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو tuple.

**يعيد:** [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

إذا كانت قيمة `True`، يُعاد [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

تنبّأ بالعينة من الخطوة الزمنية السابقة عن طريق عكس معادلة التفاضل العشوائية (SDE). تنقل هذه الدالة العينة باستخدام طريقة الخطوات المتعددة الخطية. تقوم بعملية تمرير أمامي عدة مرات لتقريب الحل.

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_pndm.py#L265)

**المعاملات:**

model_output (`torch.Tensor`) : المخرجات المباشرة من نموذج الانتشار المُتعلَّم.

timestep (`int`) : الخطوة الزمنية المنفصلة الحالية في سلسلة الانتشار.

sample (`torch.Tensor`) : نسخة حالية من عينة تم إنشاؤها بواسطة عملية الانتشار.

return_dict (`bool`، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو tuple.

**يعيد:** [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput) أو `tuple`

إذا كانت قيمة `True`، يُعاد [SchedulerOutput](/docs/diffusers/v0.43.0/ar/api/schedulers/ipndm#diffusers.schedulers.scheduling_utils.SchedulerOutput)، وإلا يُعاد tuple يكون العنصر الأول فيه tensor العينة.

تنبّأ بالعينة من الخطوة الزمنية السابقة عن طريق عكس معادلة ستوكه التفاضلية. تنقل هذه الدالة العينة باستخدام طريقة رونغي-كوتا. تقوم بأربعة تمريرات أمامية لتقريب حل المعادلة التفاضلية.

## 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)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/schedulers/scheduling_utils.py#L66)

**المعاملات:**

prev_sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)` للصور) : العينة المحسوبة `(x_{t-1})` لخطوة الزمن السابقة. يجب استخدام `prev_sample` كمدخل للنموذج التالي في حلقة إزالة الضوضاء.

الفئة الأساسية لمخرجات دالة `step` في المجدول.

