# نماذج مُشفِّر-مُفكِّك الرؤية

## نظرة عامة

يمكن استخدام [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) لتبني نموذج من الصورة إلى النص باستخدام أي نموذج رؤية مُدرَّب مسبقًا يعتمد على Transformers كمُشفِّر (*مثل* [ViT](vit)، [BEiT](beit)، [DeiT](deit)، [Swin](swin)) وأي نموذج لغة مُدرَّب مسبقًا كمُفكِّك (*مثل* [RoBERTa](roberta)، [GPT2](gpt2)، [BERT](bert)، [DistilBERT](distilbert)).

لقد تبيّن فعالية تهيئة نماذج تحويل الصورة إلى تسلسل نصي باستخدام نقاط تحقق مسبقة التدريب، كما هو موضح على سبيل المثال في [TrOCR: Transformer-based Optical Character Recognition with Pre-trained Models](https://huggingface.co/papers/2109.10282) لمينغهاو لي، وتينغتشاو ليو، ولي كوي، وييجوان لو، وديني فلورينسيو، وتشا تشانغ، وتشو جون لي، وفورو وي.

بعد تدريب/ضبط نموذج [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel)، يمكن حفظه/تحميله تمامًا مثل أي نماذج أخرى (انظر الأمثلة أدناه لمزيد من المعلومات).

مثال على تطبيق هو وصف الصور، حيث يُستخدم المُشفِّر لتشفير الصورة، ثم يولّد نموذج اللغة التلقائي الوصف. مثال آخر هو التعرف الضوئي على الحروف. راجع [TrOCR](trocr)، وهو حالة من حالات [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel).

## تهيئة `VisionEncoderDecoderModel` عشوائياً من تكوينات النموذج

يمكن تهيئة [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) بشكل عشوائي من إعدادات المُشفِّر والمُفكِّك. في المثال التالي، نُظهر كيفية القيام بذلك باستخدام إعداد [ViTModel](/docs/transformers/main/ar/model_doc/vit#transformers.ViTModel) الافتراضي للمُشفِّر، وإعداد `BertForCausalLM` الافتراضي للمُفكِّك.

```python
from transformers import BertConfig, VisionEncoderDecoderConfig, VisionEncoderDecoderModel, ViTConfig

config_encoder = ViTConfig()
config_decoder = BertConfig()

config = VisionEncoderDecoderConfig.from_encoder_decoder_configs(config_encoder, config_decoder)
model = VisionEncoderDecoderModel(config=config)
```

## تهيئة `VisionEncoderDecoderModel` من مُشفِّر مُدرَّب مسبقاً ومُفكِّك مُدرَّب مسبقاً

يمكن تهيئة [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) من نقطة تفتيش مُسبقة التدريب للمُشفِّر ونقطة تفتيش مُسبقة التدريب للمُفكِّك. لاحظ أن أي نموذج رؤية مُسبَق التدريب يعتمد على Transformers، *مثل* [Swin](swin)، يمكن أن يعمل كمُشفِّر، وكلا من النماذج التشفيرية الذاتية المُسبقة التدريب، *مثل* BERT، ونماذج اللغة السببية المُسبقة التدريب، *مثل* GPT2، بالإضافة إلى الجزء المُفكِّك المُسبَق التدريب من نماذج التسلسل إلى التسلسل، *مثل* مُفكِّك BART، يمكن استخدامه كمُفكِّك. اعتمادًا على البنية التي تختارها كمُفكِّك، قد يتم تهيئة طبقات الانتباه المتقاطع بشكل عشوائي. تتطلب تهيئة [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) من نقاط تفتيش مُسبقة التدريب للمُشفِّر والمُفكِّك ضبط النموذج الدقيق على مهمة لاحقة، كما هو موضح في [*منشور المدونة Warm-starting-encoder-decoder*](https://huggingface.co/blog/warm-starting-encoder-decoder). للقيام بذلك، توفر فئة `VisionEncoderDecoderModel` طريقة [VisionEncoderDecoderModel.from_encoder_decoder_pretrained()](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel.from_encoder_decoder_pretrained).

```python
from transformers import VisionEncoderDecoderModel

model = VisionEncoderDecoderModel.from_encoder_decoder_pretrained(
    "microsoft/swin-base-patch4-window7-224-in22k", "google-bert/bert-base-uncased"
)
```

## تحميل نقطة تحقق `VisionEncoderDecoderModel` موجودة مسبقًا وتنفيذ الاستدلال

لتحميل نقاط التفتيش المُحسَّنة من فئة `VisionEncoderDecoderModel`، يوفر [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) طريقة `from_pretrained(...)` تمامًا مثل أي بنية نموذج أخرى في Transformers.

لتنفيذ الاستدلال، يُستخدم أسلوب `generate`، والذي يتيح توليد النص بشكل ذاتي التراجع. يدعم هذا الأسلوب أشكالاً مختلفة من فك الترميز، مثل الجشع، والبحث بالحزمة، والعينة متعددة الحدود.

```python
import requests
from PIL import Image

from transformers import GPT2TokenizerFast, ViTImageProcessor, VisionEncoderDecoderModel

# load a fine-tuned image captioning model and corresponding tokenizer and image processor
model = VisionEncoderDecoderModel.from_pretrained("nlpconnect/vit-gpt2-image-captioning", device_map="auto")
tokenizer = GPT2TokenizerFast.from_pretrained("nlpconnect/vit-gpt2-image-captioning")
image_processor = ViTImageProcessor.from_pretrained("nlpconnect/vit-gpt2-image-captioning")

# let's perform inference on an image
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
pixel_values = image_processor(image, return_tensors="pt").to(model.device).pixel_values

# autoregressively generate caption (uses greedy decoding by default)
generated_ids = model.generate(pixel_values)
generated_text = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(generated_text)
a cat laying on a blanket next to a cat laying on a bed
```

## التدريب

بمجرد إنشاء النموذج، يمكن ضبطه بدقة على مجموعة بيانات من أزواج (صورة، نص) بطريقة مشابهة لتدريب نماذج BART وT5 أو أي نموذج آخر من نوع المُشفِّر-المُفكِّك. وكما ترون، لا يتطلب النموذج سوى مدخلين لحساب دالة الخسارة: `pixel_values` (وهي الصور) و`labels` (وهي `input_ids` للهدف المُشفَّر).

```python
from datasets import load_dataset

from transformers import BertTokenizer, VisionEncoderDecoderModel, ViTImageProcessor

image_processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224-in21k")
tokenizer = BertTokenizer.from_pretrained("google-bert/bert-base-uncased")
model = VisionEncoderDecoderModel.from_encoder_decoder_pretrained(
    "google/vit-base-patch16-224-in21k", "google-bert/bert-base-uncased"
)

model.config.decoder_start_token_id = tokenizer.cls_token_id
model.config.pad_token_id = tokenizer.pad_token_id

dataset = load_dataset("huggingface/cats-image")
image = dataset["test"]["image"][0]
pixel_values = image_processor(image, return_tensors="pt").to(model.device).pixel_values

labels = tokenizer(
    "an image of two cats chilling on a couch",
    return_tensors="pt",
).input_ids

# the forward function automatically creates the correct decoder_input_ids
loss = model(pixel_values=pixel_values, labels=labels).loss
```

تمت مساهمة هذا النموذج من قِبل [nielsr](https://github.com/nielsrogge).

## VisionEncoderDecoderConfig[[transformers.VisionEncoderDecoderConfig]]

#### transformers.VisionEncoderDecoderConfig[[transformers.VisionEncoderDecoderConfig]]

```python
transformers.VisionEncoderDecoderConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, is_encoder_decoder: bool = True, encoder: transformers.configuration_utils.PreTrainedConfig | dict | None = None, decoder: transformers.configuration_utils.PreTrainedConfig | dict | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vision_encoder_decoder/configuration_vision_encoder_decoder.py#L29)

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

is_encoder_decoder (`bool`، *اختياري*، الافتراضي هو `True`) : ما إذا كان النموذج يُستخدم كمُشفِّر/مُفكِّك أم لا.

encoder (`Union[~configuration_utils.PreTrainedConfig, dict]`، *اختياري*) : كائن الإعدادات أو قاموس العمود الفقري للترميز.

decoder (`Union[~configuration_utils.PreTrainedConfig, dict]`، *اختياري*) : كائن الإعدادات أو قاموس العمود الفقري لفك الترميز.

تُعد هذه فئة الإعدادات المخزنة لإعدادات نموذج Vision Encoder Decoder. وتُستخدم لتوليد نموذج Vision Encoder Decoder وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ [None](https://huggingface.co/None)

ترث كائنات الإعداد من [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ [PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig) لمزيد من المعلومات.

أمثلة:

```python
>>> from transformers import BertConfig, ViTConfig, VisionEncoderDecoderConfig, VisionEncoderDecoderModel

>>> # Initializing a ViT & BERT style configuration
>>> config_encoder = ViTConfig()
>>> config_decoder = BertConfig()

>>> config = VisionEncoderDecoderConfig(encoder=config_encoder, decoder=config_decoder)

>>> # Initializing a ViTBert model (with random weights) from a ViT & google-bert/bert-base-uncased style configurations
>>> model = VisionEncoderDecoderModel(config=config)

>>> # Accessing the model configuration
>>> config_encoder = model.config.encoder
>>> config_decoder = model.config.decoder
>>> # set decoder config to causal lm
>>> config_decoder.is_decoder = True
>>> config_decoder.add_cross_attention = True

>>> # Saving the model, including its configuration
>>> model.save_pretrained("my-model")

>>> # loading model and config from pretrained folder
>>> encoder_decoder_config = VisionEncoderDecoderConfig.from_pretrained("my-model")
>>> model = VisionEncoderDecoderModel.from_pretrained("my-model", config=encoder_decoder_config)
```

#### from_encoder_decoder_configs[[transformers.VisionEncoderDecoderConfig.from_encoder_decoder_configs]]

```python
from_encoder_decoder_configs(encoder_config: PreTrainedConfig, decoder_config: PreTrainedConfig, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vision_encoder_decoder/configuration_vision_encoder_decoder.py#L72)

**يعيد:** [VisionEncoderDecoderConfig](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderConfig)

مثال من كائن التهيئة

أنشئ كائنًا من [VisionEncoderDecoderConfig](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderConfig) (أو فئة مشتقة) من تكوين نموذج المُشفِّر المُدرَّب مسبقًا وتكوين نموذج المُفكِّك.

## VisionEncoderDecoderModel[[transformers.VisionEncoderDecoderModel]]

#### transformers.VisionEncoderDecoderModel[[transformers.VisionEncoderDecoderModel]]

```python
transformers.VisionEncoderDecoderModel(config: transformers.configuration_utils.PreTrainedConfig | None = None, encoder: transformers.modeling_utils.PreTrainedModel | None = None, decoder: transformers.modeling_utils.PreTrainedModel | None = None)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vision_encoder_decoder/modeling_vision_encoder_decoder.py#L54)

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

config ([PreTrainedConfig](/docs/transformers/main/ar/main_classes/configuration#transformers.PreTrainedConfig)، *اختياري*) : فئة تكوين النموذج التي تحتوي على جميع معاملات النموذج. التهيئة باستخدام ملف التكوين لا تُحمّل الأوزان المرتبطة بالنموذج، بل التكوين فقط. راجع طريقة [from_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.from_pretrained) لتحميل أوزان النموذج.

encoder (`PreTrainedModel`، *اختياري*) : نموذج المُشفِّر الذي سيتم استخدامه.

decoder (`PreTrainedModel`، *اختياري*) : نموذج المُفكِّك (decoder) الذي سيتم استخدامه.

نموذج Vision Encoder Decoder الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من [PreTrainedModel](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel). راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التنزيل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضاً فئة فرعية من [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

#### forward[[transformers.VisionEncoderDecoderModel.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, decoder_input_ids: typing.Optional[torch.LongTensor] = None, decoder_attention_mask: typing.Optional[torch.BoolTensor] = None, encoder_outputs: tuple[torch.Tensor] | None = None, past_key_values: transformers.cache_utils.Cache | None = None, decoder_inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vision_encoder_decoder/modeling_vision_encoder_decoder.py#L301)

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

pixel_values (`torch.Tensor` من الشكل `(batch_size, num_channels, image_size, image_size)`، *اختياري*) : المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام `image_processor_class`. راجع `image_processor_class.__call__` للتفاصيل (`processor_class` يستخدم `image_processor_class` لمعالجة الصور).

decoder_input_ids (`torch.LongTensor` من الشكل `(batch_size, target_sequence_length)`، *اختياري*) : فهارس رموز تسلسل إدخال المُفكِّك في قاموس الكلمات. يمكن الحصول على الفهارس باستخدام [PreTrainedTokenizer](/docs/transformers/main/ar/main_classes/tokenizer#transformers.PythonBackend). راجع [PreTrainedTokenizer.encode()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) و [PreTrainedTokenizer.__call__()](/docs/transformers/main/ar/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__) للتفاصيل. [ما هي معرّفات الإدخال؟](../glossary#input-ids) إذا تم استخدام `past_key_values`، فيجب إدخال `decoder_input_ids` الأخيرة فقط بشكل اختياري (انظر `past_key_values`). للتدريب، يتم إنشاء `decoder_input_ids` تلقائيًا بواسطة النموذج عن طريق إزاحة `labels` إلى اليمين، واستبدال -100 بـ `pad_token_id`، وإضافة `decoder_start_token_id` في البداية.

decoder_attention_mask (`torch.BoolTensor` من الشكل `(batch_size, target_sequence_length)`، *اختياري*) : السلوك الافتراضي: توليد متجه يتجاهل رموز الحشو في `decoder_input_ids`. سيتم استخدام القناع السببي أيضًا بشكل افتراضي.

encoder_outputs (`tuple[torch.Tensor]`، *اختياري*) : يتكوّن المصفوفة من (`last_hidden_state`، *اختياري*: `hidden_states`، *اختياري*: `attentions`) `last_hidden_state` من الشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) هو تسلسل من حالات الخفاء عند مخرج الطبقة الأخيرة من المُشفِّر. يُستخدم في الانتباه المتقاطع (cross-attention) في المُفكِّك.

past_key_values (`~cache_utils.Cache`، *اختياري*) : حالات مخفية محسوبة مسبقًا (المفاتيح والقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها لتسريع فك الترميز التسلسلي. يتكوّن هذا عادةً من `past_key_values` التي يعيدها النموذج في مرحلة سابقة من فك الترميز، عندما يكون `use_cache=True` أو `config.use_cache=True`. يُسمح فقط بتمرير كائن [Cache](/docs/transformers/main/ar/internal/generation_utils#transformers.Cache) كمدخل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache). إذا لم يتم تمرير `past_key_values`، فسيتم تهيئة [DynamicCache](/docs/transformers/main/ar/internal/generation_utils#transformers.DynamicCache) افتراضيًا. سيُخرج النموذج نفس تنسيق الذاكرة المؤقتة المُدخل. إذا تم استخدام `past_key_values`، يُتوقع من المستخدم إدخال `input_ids` غير المعالجة فقط (تلك التي لم تُعطَ حالات مفاتيح وقيم سابقة لها في هذا النموذج) بأبعاد `(batch_size, unprocessed_length)` بدلاً من جميع `input_ids` بأبعاد `(batch_size, sequence_length)`.

decoder_inputs_embeds (`torch.Tensor` من الشكل `(batch_size, target_sequence_length, hidden_size)`، *اختياري*) : بدلاً من تمرير `decoder_input_ids`، يمكنك اختيار تمرير تمثيل مضمّن مباشرةً. هذا مفيد إذا كنت تريد مزيداً من التحكم في كيفية تحويل فهارس `decoder_input_ids` إلى المتجهات المرتبطة بها، مقارنةً بمصفوفة البحث المضمّنة الداخلية للنموذج.

labels (`torch.LongTensor` من الشكل `(batch_size, sequence_length)`، *اختياري*) : تسميات لحساب خسارة نمذجة اللغة المقنّعة (masked language modeling loss) للمفكّك. يجب أن تكون الفهارس ضمن `[-100, 0, ..., config.vocab_size]` (انظر سلسلة توثيق `input_ids`) يتم تجاهل الرموز التي فهارسها مضبوطة على `-100` (مقنّعة)، ولا تُحسب الخسارة إلا للرموز التي تسمياتها ضمن `[0, ..., config.vocab_size]`

use_cache (`bool`، *اختياري*) : إذا تم ضبطه على `True`، تُعاد حالات المفاتيح والقيم `past_key_values` ويمكن استخدامها لتسريع فك الترميز (انظر `past_key_values`).

output_attentions (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع مصفوفات الانتباه لجميع طبقات الانتباه. راجع `attentions` ضمن المصفوفات المُرجعة لمزيد من التفاصيل.

output_hidden_states (`bool`, *اختياري*) : ما إذا كان سيتم إرجاع الحالات المخفية لجميع الطبقات. راجع `hidden_states` ضمن الموترات المُرجعة لمزيد من التفاصيل.

return_dict (`bool`، *اختياري*) : ما إذا كان سيتم إرجاع [ModelOutput](/docs/transformers/main/ar/main_classes/output#transformers.utils.ModelOutput) بدلاً من tuple عادي.

**يعيد:** [Seq2SeqLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.Seq2SeqLMOutput) أو `tuple(torch.Tensor)`

[Seq2SeqLMOutput](/docs/transformers/main/ar/main_classes/output#transformers.modeling_outputs.Seq2SeqLMOutput) أو مجموعة مرتبة من `torch.Tensor` (في حال تم تمرير `return_dict=False` أو عندما يكون `config.return_dict=False`) وتتضمن عناصر مختلفة اعتماداً على الإعداد ([VisionEncoderDecoderConfig](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderConfig)) والمدخلات.

تتجاوز طريقة [VisionEncoderDecoderModel](/docs/transformers/main/ar/model_doc/vision-encoder-decoder#transformers.VisionEncoderDecoderModel) الخاصة بالتقديم (forward) الطريقة الخاصة `__call__`.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن `Module` بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

- **loss** (`torch.Tensor` من الشكل `(1,)`، *اختياري*، يُعاد عند تقديم `labels`) -- خسارة نمذجة اللغة.
- **logits** (`torch.Tensor` من الشكل `(batch_size, sequence_length, config.vocab_size)`) -- درجات التنبؤ لرأس نمذجة اللغة (درجات لكل رمز في المفردات قبل SoftMax).
- **past_key_values** (`EncoderDecoderCache`، *اختياري*، يُعاد عند تمرير `use_cache=True` أو عند `config.use_cache=True`) -- هو كائن من نوع [EncoderDecoderCache](/docs/transformers/main/ar/internal/generation_utils#transformers.EncoderDecoderCache). لمزيد من التفاصيل، راجع [دليل ذاكرة kv](https://huggingface.co/docs/transformers/en/kv_cache).

  تحتوي على حالات مخفية محسوبة مسبقًا (مفاتيح وقيم في كتل الانتباه الذاتي وكتل الانتباه المتقاطع) يمكن استخدامها (انظر مدخل `past_key_values`) لتسريع فك الترميز التسلسلي.
- **decoder_hidden_states** (`tuple(torch.Tensor)`, *اختياري*, يُعاد عند تمرير `output_hidden_states=True` أو عند `config.output_hidden_states=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) من الشكل `(batch_size, sequence_length, hidden_size)`.

  حالات المخفية (Hidden states) لمفكّك الترميز (decoder) عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي (initial embedding).
- **decoder_attentions** (`tuple(torch.Tensor)`, *اختياري*, يُعاد عند تمرير `output_attentions=True` أو عند `config.output_attentions=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لكل طبقة) من الشكل `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه في المفكّك، بعد softmax الانتباه، المستخدمة لحساب المتوسط المرجّح في رؤوس الانتباه الذاتي.
- **cross_attentions** (`tuple(torch.Tensor)`، *اختياري*، يُعاد عند تمرير `output_attentions=True` أو عند `config.output_attentions=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لكل طبقة) من الشكل `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه في طبقة الانتباه المتقاطع للمفكّك، بعد softmax للانتباه، وتُستخدم لحساب المتوسط المرجّح في رؤوس الانتباه المتقاطع.
- **encoder_last_hidden_state** (`torch.Tensor` بشكل `(batch_size, sequence_length, hidden_size)`، *اختياري*) -- سلسلة من حالات الإخفاء عند مخرجات الطبقة الأخيرة من المُشفِّر في النموذج.
- **encoder_hidden_states** (`tuple(torch.Tensor)`, *اختياري*, يُعاد عند تمرير `output_hidden_states=True` أو عند `config.output_hidden_states=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لمخرجات التضمينات، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لمخرجات كل طبقة) من الشكل `(batch_size, sequence_length, hidden_size)`.

  حالات المخفية للمشفّر عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي.
- **encoder_attentions** (`tuple(torch.Tensor)`, *اختياري*, يُعاد عند تمرير `output_attentions=True` أو عند `config.output_attentions=True`) -- مجموعة مرتبة من `torch.Tensor` (واحدة لكل طبقة) من الشكل `(batch_size, num_heads, sequence_length, sequence_length)`.

  أوزان الانتباه للمُشفِّر، بعد softmax للانتباه، المُستخدَمة لحساب المتوسط الموزون في رؤوس الانتباه الذاتي.

أمثلة:

```python
>>> from transformers import AutoProcessor, VisionEncoderDecoderModel
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> from PIL import Image
>>> import torch

>>> processor = AutoProcessor.from_pretrained("microsoft/trocr-base-handwritten")
>>> model = VisionEncoderDecoderModel.from_pretrained("microsoft/trocr-base-handwritten")

>>> # load image from the IAM dataset
>>> url = "https://fki.tic.heia-fr.ch/static/img/a01-122-02.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read())).convert("RGB")

>>> # training
>>> model.config.decoder_start_token_id = processor.tokenizer.eos_token_id
>>> model.config.pad_token_id = processor.tokenizer.pad_token_id
>>> model.config.vocab_size = model.config.decoder.vocab_size

>>> pixel_values = processor(image, return_tensors="pt").pixel_values
>>> text = "hello world"
>>> labels = processor.tokenizer(text, return_tensors="pt").input_ids
>>> outputs = model(pixel_values=pixel_values, labels=labels)
>>> loss = outputs.loss

>>> # inference (generation)
>>> generated_ids = model.generate(pixel_values)
>>> generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
```

#### from_encoder_decoder_pretrained[[transformers.VisionEncoderDecoderModel.from_encoder_decoder_pretrained]]

```python
from_encoder_decoder_pretrained(encoder_pretrained_model_name_or_path: str | None = None, decoder_pretrained_model_name_or_path: str | None = None, *model_args, **kwargs)
```

[المصدر](https://github.com/huggingface/transformers/blob/main/src/transformers/models/vision_encoder_decoder/modeling_vision_encoder_decoder.py#L155)

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

encoder_pretrained_model_name_or_path (`str`, *اختياري*) : المعلومات اللازمة لبدء تشغيل مُشفِّر الصور. يمكن أن يكون:  - نصًا، وهو *معرّف النموذج* لنموذج مُدرَّب مسبقًا مستضاف داخل مستودع نماذج على huggingface.co. مثال على ذلك `google/vit-base-patch16-224-in21k`. - مسار إلى *مجلد* يحتوي على أوزان النموذج المحفوظة باستخدام [save_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.save_pretrained)، مثل `./my_model_directory/`.

decoder_pretrained_model_name_or_path (`str`، *اختياري*، القيمة الافتراضية `None`) : المعلومات اللازمة لبدء تشغيل مُفكِّك النص. يمكن أن يكون: - نصًا، وهو *معرف النموذج* لنموذج مُدرَّب مسبقًا مستضاف داخل مستودع نماذج على huggingface.co. - مسار إلى *مجلد* يحتوي على أوزان النموذج المحفوظة باستخدام [save_pretrained()](/docs/transformers/main/ar/main_classes/model#transformers.PreTrainedModel.save_pretrained)، على سبيل المثال `./my_model_directory/`.

model_args (المتغيرات الموضعية المتبقية، *اختيارية*) : سيتم تمرير جميع المتغيرات الموضعية المتبقية إلى طريقة `__init__` الخاصة بالنموذج الأساسي.

kwargs (باقي قاموس من معاملات الكلمات المفتاحية، *اختياري*) : يمكن استخدامه لتحديث كائن الإعداد (بعد تحميله) وبدء النموذج (على سبيل المثال، `output_attentions=True`). - لتحديث إعدادات المُشفِّر، استخدم البادئة *encoder_* لكل معامل إعداد. - لتحديث إعدادات المُفكِّك، استخدم البادئة *decoder_* لكل معامل إعداد. - لتحديث إعدادات النموذج الأب، لا تستخدم بادئة لكل معامل إعداد. يتصرف بشكل مختلف اعتمادًا على ما إذا كان تم توفير `config` أو تم تحميله تلقائيًا.

أنشئ مُشفِّرًا ومُفكِّكًا من فئة أو فئتين أساسيتين في المكتبة من نقاط تفتيش نماذج مُدرَّبة مسبقًا.

يُضبط النموذج على وضع التقييم افتراضيًا باستخدام `model.eval()` (تُعطَّل وحدات Dropout). لتدريب النموذج، يجب عليك أولًا إعادة ضبطه على وضع التدريب باستخدام `model.train()`.

مثال:

```python
>>> from transformers import VisionEncoderDecoderModel

>>> # initialize a vit-bert from a pretrained ViT and a pretrained BERT model. Note that the cross-attention layers will be randomly initialized
>>> model = VisionEncoderDecoderModel.from_encoder_decoder_pretrained(
...     "google/vit-base-patch16-224-in21k", "google-bert/bert-base-uncased"
... )
>>> # saving model after fine-tuning
>>> model.save_pretrained("./vit-bert")
>>> # load fine-tuned model
>>> model = VisionEncoderDecoderModel.from_pretrained("./vit-bert")
```

