# Mixin'ler ve serielleştirme yöntemleri

## Mixin'ler

`huggingface_hub` kütüphanesi, nesneleriniz için ebeveyn sınıf olarak kullanılabilecek ve basit yükleme/indirme işlevleri sunan bir dizi mixin sunar. Hub ile herhangi bir ML çerçevesini nasıl entegre edeceğinizi öğrenmek için [entegrasyon kılavuzumuza](../guides/integrations) göz atın.

### Genel[[huggingface_hub.ModelHubMixin]]

#### huggingface_hub.ModelHubMixin[[huggingface_hub.ModelHubMixin]]

```python
huggingface_hub.ModelHubMixin(*args, **kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L66)

**Parametreler:**

repo_url (`str`, *isteğe bağlı*) : Kütüphane deposunun URL'si. Model kartını oluşturmak için kullanılır.

paper_url (`str`, *isteğe bağlı*) : Kütüphane makalesinin URL'si. Model kartını oluşturmak için kullanılır.

docs_url (`str`, *isteğe bağlı*) : Kütüphane dokümantasyonunun URL'si. Model kartını oluşturmak için kullanılır.

model_card_template (`str`, *isteğe bağlı*) : Model kartı şablonu. Model kartını oluşturmak için kullanılır. Varsayılan olarak genel bir şablon kullanılır.

language (`str` veya `list[str]`, *isteğe bağlı*) : Kütüphanenin desteklediği dil. Model kartı oluşturmak için kullanılır.

library_name (`str`, *isteğe bağlı*) : ModelHubMixin'i entegre eden kütüphanenin adı. Model kartını oluşturmak için kullanılır.

license (`str`, *isteğe bağlı*) : ModelHubMixin'i entegre eden kütüphanenin lisansı. Model kartını oluşturmak için kullanılır. Örn: "apache-2.0"

license_name (`str`, *isteğe bağlı*) : ModelHubMixin'i entegre eden kütüphanenin adı. Model kartını oluşturmak için kullanılır. Yalnızca `license` değeri `other` olarak ayarlanırsa kullanılır. Örn: "coqui-public-model-license".

license_link (`str`, *isteğe bağlı*) : ModelHubMixin'i entegre eden kütüphanenin lisansına giden URL. Model kartını oluşturmak için kullanılır. Yalnızca `license` değeri `other` olarak ayarlanmış ve `license_name` değeri belirlenmişse kullanılır. Örn: "https://coqui.ai/cpml".

pipeline_tag (`str`, *isteğe bağlı*) : Hattın etiketi. Model kartını oluşturmak için kullanılır. Örn. "text-classification".

tags (`list[str]`, *isteğe bağlı*) : Model kartına eklenecek etiketler. Model kartını oluşturmak için kullanılır. Örn. ["computer-vision"]

coders (`dict[Type, tuple[Callable, Callable]]`, *isteğe bağlı*) : Özel tiplerin ve bunların kodlayıcı/çözücülerinin sözlüğü. Varsayılan olarak jsonable olmayan argümanları kodlamak/çözmek için kullanılır. Örn. dataclasses, argparse.Namespace, OmegaConf vb.

Hub ile HERHANGİ BİR makine öğrenimi çerçevesini entegre etmek için genel bir karışım (mixin).

Çerçevenizi entegre etmek için model sınıfınız bu sınıftan türetmek zorundadır. Modellerin kaydedilmesi/yüklenmesi için özel mantık `_from_pretrained` ve `_save_pretrained` içinde yeniden yazılmalıdır. [PyTorchModelHubMixin](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.PyTorchModelHubMixin), Hub ile mixin entegrasyonunun iyi bir örneğidir. Daha fazla talimat için [entegrasyon kılavuzumuza](../guides/integrations) göz atın.

[ModelHubMixin](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin) sınıfından türetirken sınıf düzeyinde öznitelikler tanımlayabilirsiniz. Bu öznitelikler `__init__` yerine sınıf tanımının kendisine iletilir. Bu, [ModelHubMixin](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin) entegre eden kütüphaneye ilişkin meta verileri tanımlamak için kullanışlıdır.

Karışımı kütüphanenize nasıl entegre edeceğinize dair daha fazla ayrıntı için [entegrasyon kılavuzuna](../guides/integrations) göz atın.

Örnek:

```python
>>> from huggingface_hub import ModelHubMixin

# Inherit from ModelHubMixin
>>> class MyCustomModel(
...         ModelHubMixin,
...         library_name="my-library",
...         tags=["computer-vision"],
...         repo_url="https://github.com/huggingface/my-cool-library",
...         paper_url="https://arxiv.org/abs/2304.12244",
...         docs_url="https://huggingface.co/docs/my-cool-library",
...         # ^ optional metadata to generate model card
...     ):
...     def __init__(self, size: int = 512, device: str = "cpu"):
...         # define how to initialize your model
...         super().__init__()
...         ...
...
...     def _save_pretrained(self, save_directory: Path) -> None:
...         # define how to serialize your model
...         ...
...
...     @classmethod
...     def from_pretrained(
...         cls: type[T],
...         pretrained_model_name_or_path: Union[str, Path],
...         *,
...         force_download: bool = False,
...         token: Optional[Union[str, bool]] = None,
...         cache_dir: Optional[Union[str, Path]] = None,
...         local_files_only: bool = False,
...         revision: Optional[str] = None,
...         **model_kwargs,
...     ) -> T:
...         # define how to deserialize your model
...         ...

>>> model = MyCustomModel(size=256, device="gpu")

# Save model weights to local directory
>>> model.save_pretrained("my-awesome-model")

# Push model weights to the Hub
>>> model.push_to_hub("my-awesome-model")

# Download and initialize weights from the Hub
>>> reloaded_model = MyCustomModel.from_pretrained("username/my-awesome-model")
>>> reloaded_model.size
256

# Model card has been correctly populated
>>> from huggingface_hub import ModelCard
>>> card = ModelCard.load("username/my-awesome-model")
>>> card.data.tags
["x-custom-tag", "pytorch_model_hub_mixin", "model_hub_mixin"]
>>> card.data.library_name
"my-library"
```

#### _save_pretrained[[huggingface_hub.ModelHubMixin._save_pretrained]]

```python
_save_pretrained(save_directory: Path)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L440)

**Parametreler:**

save_directory (`str` veya `Path`) : Model ağırlıklarının ve yapılandırmasının kaydedileceği dizinin yolu.

Modelinizi nasıl kaydedeceğinizi tanımlamak için bu yöntemi alt sınıfta yeniden yazın. Talimatlar için [entegrasyon kılavuzumuza](../guides/integrations) göz atın.

#### _from_pretrained[[huggingface_hub.ModelHubMixin._from_pretrained]]

```python
_from_pretrained(model_id: str, revision: str | None, cache_dir: str | pathlib.Path | None, force_download: bool, local_files_only: bool, token: str | bool | None, **model_kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L567)

**Parametreler:**

model_id (`str`) : Huggingface Hub'dan yüklenecek modelin kimliği (ör. `bigscience/bloom`).

revision (`str`, *isteğe bağlı*) : Hub'daki modelin revizyonu. Bir dal adı, bir git etiketi veya herhangi bir commit kimliği olabilir. Varsayılan olarak `main` dalındaki en son commit'tir.

force_download (`bool`, *isteğe bağlı*, varsayılan `False`) : Hub'dan model ağırlıklarının ve yapılandırma dosyalarının mevcut önbelleği geçersiz kılacak şekilde (yeniden) indirilmesini zorlayıp zorlamayacağı.

token (`str` veya `bool`, *isteğe bağlı*) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. Varsayılan olarak, `hf auth login` çalıştırıldığında önbelleğe alınan jeton kullanılır.

cache_dir (`str`, `Path`, *isteğe bağlı*) : Önbelleğe alınan dosyaların saklandığı klasörün yolu.

local_files_only (`bool`, *isteğe bağlı*, varsayılan `False`) : `True` ise, dosyanın indirilmesini engeller ve varsa yerel önbellekteki dosyanın yolunu döndürür.

model_kwargs : [_from_pretrained()](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin._from_pretrained) yöntemine iletilen ek anahtar kelime argümanları.

Ön eğitilmiş modelden yüklemenin nasıl yapılacağını tanımlamak için bu yöntemi alt sınıfta yeniden yazın.

Dosyaları Hub'dan indirmek için yüklemelerinden önce [hf_hub_download()](/docs/huggingface_hub/v2.4.0/tr/package_reference/file_download#huggingface_hub.hf_hub_download) veya [snapshot_download()](/docs/huggingface_hub/v2.4.0/tr/package_reference/file_download#huggingface_hub.snapshot_download) kullanın. Girdi olarak alınan çoğu argüman, bu 2 yönteme doğrudan aktarılabilir. Gerekirse, bu yönteme "model_kwargs" kullanarak daha fazla argüman ekleyebilirsiniz. Örneğin `PyTorchModelHubMixin._from_pretrained()`, modelin hangi cihazda yüklenmesi gerektiğini belirlemek için girdi olarak `map_location` parametresini alır.

Daha fazla talimat için [entegrasyon kılavuzumuza](../guides/integrations) göz atın.

#### from_pretrained[[huggingface_hub.ModelHubMixin.from_pretrained]]

```python
from_pretrained(pretrained_model_name_or_path: str | pathlib.Path, force_download: bool = False, token: str | bool | None = None, cache_dir: str | pathlib.Path | None = None, local_files_only: bool = False, revision: str | None = None, **model_kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L451)

**Parametreler:**

pretrained_model_name_or_path (`str`, `Path`) : - Either the `model_id` (string) of a model hosted on the Hub, e.g. `bigscience/bloom`. - Or a path to a `directory` containing model weights saved using `save_pretrained`, e.g., `../path/to/my_model_directory/`.

revision (`str`, *isteğe bağlı*) : Hub'daki modelin revizyonu. Bir dal adı, bir git etiketi veya herhangi bir commit kimliği olabilir. Varsayılan olarak `main` dalındaki en son commit'tir.

force_download (`bool`, *isteğe bağlı*, varsayılan `False`) : Hub'dan model ağırlıklarının ve yapılandırma dosyalarının mevcut önbelleği geçersiz kılacak şekilde (yeniden) indirilmesini zorlayıp zorlamayacağı.

token (`str` veya `bool`, *isteğe bağlı*) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. Varsayılan olarak, `hf auth login` çalıştırıldığında önbelleğe alınan jeton kullanılır.

cache_dir (`str`, `Path`, *isteğe bağlı*) : Önbelleğe alınan dosyaların saklandığı klasörün yolu.

local_files_only (`bool`, *isteğe bağlı*, varsayılan `False`) : `True` ise, dosyanın indirilmesini engeller ve varsa yerel önbellekteki dosyanın yolunu döndürür.

model_kwargs (`dict`, *isteğe bağlı*) : Başlatma sırasında modele iletilecek ek kwargs.

Huggingface Hub'dan bir model indirin ve örnekleyin.

#### push_to_hub[[huggingface_hub.ModelHubMixin.push_to_hub]]

```python
push_to_hub(repo_id: str, config: dict | huggingface_hub.hub_mixin.DataclassInstance | None = None, commit_message: str = 'Push model using huggingface_hub.', private: bool | None = None, token: str | None = None, branch: str | None = None, create_pr: bool | None = None, allow_patterns: list[str] | str | None = None, ignore_patterns: list[str] | str | None = None, delete_patterns: list[str] | str | None = None, model_card_kwargs: dict[str, typing.Any] | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L609)

**Parametreler:**

repo_id (`str`) : İtme (push) yapılacak deposunun kimliği (örnek: `"username/my-model"`).

config (`dict` veya `DataclassInstance`, *isteğe bağlı*) : Anahtar/değer sözlüğü veya bir dataclass örneği olarak belirtilen model yapılandırması.

commit_message (`str`, *isteğe bağlı*) : İterken iletilecek mesaj.

private (`bool`, *isteğe bağlı*) : Oluşturulacak deponun özel olup olmayacağı. `None` (varsayılan) ise, organizasyonun varsayılanı özel değilse depo herkese açık olacaktır.

token (`str`, *isteğe bağlı*) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak jeton. Varsayılan olarak, `hf auth login` çalıştırıldığında önbelleğe alınan jetonu kullanır.

branch (`str`, *isteğe bağlı*) : Modelin itileceği git dalı. Varsayılan olarak `"main"`'dir.

create_pr (`boolean`, *isteğe bağlı*) : O commit ile `branch` üzerinden bir Pull Request oluşturulup oluşturulmayacağı. Varsayılan olarak `False`.

allow_patterns (`list[str]` veya `str`, *isteğe bağlı*) : Verilirse, yalnızca en az bir desenle eşleşen dosyalar itilir.

ignore_patterns (`list[str]` veya `str`, *isteğe bağlı*) : Verilirse, desenlerden herhangi biriyle eşleşen dosyalar itilmez.

delete_patterns (`list[str]` veya `str`, *isteğe bağlı*) : Verilirse, desenlerden herhangi biriyle eşleşen uzak dosyalar depodan silinir.

model_card_kwargs (`dict[str, Any]`, *isteğe bağlı*) : Model kartını özelleştirmek için model kartı şablonuna iletilen ek argümanlar.

**Dönüş:**

Verilen depodaki modelinizin commit URL'si.

Model kontrol noktasını Hub'a yükleyin.

Hub'a hangi dosyaların gönderileceğini hassas bir şekilde filtrelemek için `allow_patterns` ve `ignore_patterns` kullanın. Aynı commit'te mevcut uzak dosyaları silmek için `delete_patterns` kullanın. Daha fazla ayrıntı için [upload_folder()](/docs/huggingface_hub/v2.4.0/tr/package_reference/hf_api#huggingface_hub.HfApi.upload_folder) referansına bakın.

#### save_pretrained[[huggingface_hub.ModelHubMixin.save_pretrained]]

```python
save_pretrained(save_directory: str | pathlib.Path, config: dict | huggingface_hub.hub_mixin.DataclassInstance | None = None, repo_id: str | None = None, push_to_hub: bool = False, model_card_kwargs: dict[str, typing.Any] | None = None, **push_to_hub_kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L372)

**Parametreler:**

save_directory (`str` veya `Path`) : Model ağırlıklarının ve yapılandırmasının kaydedileceği dizinin yolu.

config (`dict` veya `DataclassInstance`, *isteğe bağlı*) : Anahtar/değer sözlüğü veya bir dataclass örneği olarak belirtilen model yapılandırması.

push_to_hub (`bool`, *isteğe bağlı*, varsayılan `False`) : Modelinizi kaydettikten sonra Huggingface Hub'a gönderip göndermeyeceğinizi belirtir.

repo_id (`str`, *isteğe bağlı*) : Hub'daki deposunuzun kimliği. Yalnızca `push_to_hub=True` ise kullanılır. Verilmezse varsayılan olarak klasör adı kullanılır.

model_card_kwargs (`dict[str, Any]`, *isteğe bağlı*) : Model kartını özelleştirmek için model kartı şablonuna iletilen ek argümanlar.

push_to_hub_kwargs : [push_to_hub()](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin.push_to_hub) yöntemine iletilen ek anahtar kelime argümanları.

**Dönüş:** `str` veya `None`

`push_to_hub=True` ise Hub'daki commit'in URL'si, aksi halde `None`.

Ağırlıkları yerel dizinde kaydet.

### PyTorch[[huggingface_hub.PyTorchModelHubMixin]]

#### huggingface_hub.PyTorchModelHubMixin[[huggingface_hub.PyTorchModelHubMixin]]

```python
huggingface_hub.PyTorchModelHubMixin(*args, **kwargs)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/hub_mixin.py#L692)

PyTorch modellerine model Hub yükleme/indirme yetenekleri sağlamak için [ModelHubMixin](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin) uygulaması. Model, varsayılan olarak `model.eval()` kullanılarak değerlendirme moduna ayarlanır (dropout modülleri devre dışı bırakılır). Modeli eğitmek için önce `model.train()` ile eğitim moduna geri almanız gerekir.

Karışımı nasıl kullanacağınızla ilgili daha fazla ayrıntı için [ModelHubMixin](/docs/huggingface_hub/v2.4.0/tr/package_reference/mixins#huggingface_hub.ModelHubMixin)'e bakın.

Örnek:

```python
>>> import torch
>>> import torch.nn as nn
>>> from huggingface_hub import PyTorchModelHubMixin

>>> class MyModel(
...         nn.Module,
...         PyTorchModelHubMixin,
...         library_name="keras-nlp",
...         repo_url="https://github.com/keras-team/keras-nlp",
...         paper_url="https://arxiv.org/abs/2304.12244",
...         docs_url="https://keras.io/keras_nlp/",
...         # ^ optional metadata to generate model card
...     ):
...     def __init__(self, hidden_size: int = 512, vocab_size: int = 30000, output_size: int = 4):
...         super().__init__()
...         self.param = nn.Parameter(torch.rand(hidden_size, vocab_size))
...         self.linear = nn.Linear(output_size, vocab_size)

...     def forward(self, x):
...         return self.linear(x + self.param)
>>> model = MyModel(hidden_size=256)

# Save model weights to local directory
>>> model.save_pretrained("my-awesome-model")

# Push model weights to the Hub
>>> model.push_to_hub("my-awesome-model")

# Download and initialize weights from the Hub
>>> model = MyModel.from_pretrained("username/my-awesome-model")
>>> model.hidden_size
256
```

### Fastai[[huggingface_hub.from_pretrained_fastai]]

#### huggingface_hub.from_pretrained_fastai[[huggingface_hub.from_pretrained_fastai]]

```python
huggingface_hub.from_pretrained_fastai(repo_id: str, revision: str | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/fastai_utils.py#L289)

**Parametreler:**

repo_id (`str`) : Picklenmiş fastai.Learner'ın bulunduğu konum. İki seçenekten biri olabilir: - Hugging Face Hub üzerinde barındırılıyor. Örn.: 'espejelomar/fatai-pet-breeds-classification' veya 'distilgpt2'. `repo_id`'nin sonuna `@` ekleyerek bir `revision` ekleyebilirsiniz. Örn.: `dbmdz/bert-base-german-cased@main`. Revision, kullanılacak belirli model sürümüdür. Hugging Face Hub üzerinde modelleri ve diğer artefaktları depolamak için git tabanlı bir sistem kullandığımız için, bir dal adı, etiket adı veya commit id olabilir. - Yerel olarak barındırılıyor. `repo_id`, pickle dosyasını ve `fastai.Learner`'ın oluşturulmasında kullanılan fastai ve fastcore sürümlerini gösteren bir pyproject.toml dosyasını içeren bir dizin olacaktır. Örn.: `./my_model_directory/`.

revision (`str`, *isteğe bağlı*) : Depodaki dosyaların indirildiği revizyon. `snapshot_download` belgelerine bakın.

**Dönüş:**

`repo_id` deposundaki `fastai.Learner` modeli.

Önceden eğitilmiş fastai modelini Hub'dan veya yerel bir dizinden yükler.

#### huggingface_hub.push_to_hub_fastai[[huggingface_hub.push_to_hub_fastai]]

```python
huggingface_hub.push_to_hub_fastai(learner, repo_id: str, commit_message: str = 'Push FastAI model using huggingface_hub.', private: bool | None = None, token: str | None = None, config: dict | None = None, branch: str | None = None, create_pr: bool | None = None, allow_patterns: list[str] | str | None = None, ignore_patterns: list[str] | str | None = None, delete_patterns: list[str] | str | None = None, api_endpoint: str | None = None)
```

[Kaynak](https://github.com/huggingface/huggingface_hub/blob/v2.4.0/src/huggingface_hub/fastai_utils.py#L334)

**Parametreler:**

learner (*Learner*) : Hub'a göndermek istediğiniz *fastai.Learner.

repo_id (*str*) : Hub'daki modeliniz için "namespace/repo_name" biçiminde depo kimliği. Namespace, bireysel hesabınız veya yazma erişimine sahip olduğunuz bir kuruluş olabilir (örneğin, 'stanfordnlp/stanza-de').

commit_message (*str`, *optional*) : Message to commit while pushing. Will default to `"add model"`.

private (*bool*, *opsiyonel*) : Oluşturulacak deponun özel olup olmayacağı. *None* (varsayılan) ise, organizasyonun varsayılanı özel olmadıkça depo herkese açık olarak oluşturulur.

token (*str*, *isteğe bağlı*) : Uzaktaki dosyalar için HTTP bearer yetkilendirmesi olarak kullanılacak Hugging Face hesap belirteci. `None` ise, belirteç bir istem ile sorulacaktır.

config (*dict*, *opsiyonel*) : Model ağırlıklarıyla birlikte kaydedilecek yapılandırma nesnesi.

branch (*str*, *opsiyonel*) : Modelin itileceği git dalı. Bu, varsayılan olarak depoda belirtilen varsayılan dala ayarlanır ve bu da varsayılan olarak *"main"*'dir.

create_pr (*boolean*, *opsiyonel*) : O commit ile *branch* üzerinden bir Pull Request oluşturulup oluşturulmayacağı. Varsayılan olarak *False*.

api_endpoint (*str*, *opsiyonel*) : Modeli hub'a iterken kullanılacak API uç noktası.

allow_patterns (*list[str]* veya *str*, *isteğe bağlı*) : Verilirse, yalnızca en az bir desenle eşleşen dosyalar itilir.

ignore_patterns (*list[str]* veya *str*, *isteğe bağlı*) : Verilirse, desenlerden herhangi biriyle eşleşen dosyalar itilmez.

delete_patterns (*list[str]* veya *str*, *isteğe bağlı*) : Verilirse, desenlerden herhangi biriyle eşleşen uzak dosyalar depodan silinir.

**Dönüş:**

Verilen depodaki modelinizin commit URL'si.

Öğrenici kontrol noktası dosyalarını Hub'a yükleyin.

Hub'a hangi dosyaların gönderileceğini hassas bir şekilde filtrelemek için *allow_patterns* ve *ignore_patterns* kullanın. Aynı commit'te mevcut uzak dosyaları silmek için *delete_patterns* kullanın. Daha fazla ayrıntı için [*upload_folder*] referansına bakın.

> [!TIP]
> Aşağıdaki hatayı oluşturur:
>
> - Kullanıcı Hugging Face Hub'a giriş yapmadıysa [*ValueError*](https://docs.python.org/3/library/exceptions.html#ValueError).

