# ResNet

## Genel Bakış

ResNet modeli, Kaiming He, Xiangyu Zhang, Shaoqing Ren ve Jian Sun tarafından [Deep Residual Learning for Image Recognition](https://huggingface.co/papers/1512.03385) makalesinde önerilmiştir. Uygulamamız, [Nvidia](https://catalog.ngc.nvidia.com/orgs/nvidia/resources/resnet_50_v1_5_for_pytorch)'nın yaptığı küçük değişiklikleri takip eder; örnekleme azaltma için `stride=2` değerini ilk `1x1` katmanında değil, bottleneck'taki `3x3` konvolüsyon katmanında uygularız. Bu yapı genel olarak "ResNet v1.5" olarak bilinir.

ResNet, artımsal bağlantılar (residual connections) tanıttı; bu bağlantılar, daha önce görülmemiş sayıda katmana (1000'e kadar) sahip ağların eğitilmesine olanak tanır. ResNet, 2015 ILSVRC & COCO yarışmasını kazanarak derin bilgisayarlı görüde önemli bir kilometre taşı olmuştur.

Makalenin özeti aşağıdaki gibidir:

*Daha derin sinir ağları eğitilmesi daha zor olan yapılardır. Daha önce kullanılanlardan çok daha derin ağların eğitimini kolaylaştırmak için bir kalıntı öğrenme çerçevesi sunuyoruz. Katmanları, referanssız işlevler öğrenmek yerine, katman girdilerine referansla kalıntı işlevleri öğrenmek olarak açıkça yeniden formüle ediyoruz. Bu kalıntı ağlarının optimize edilmesinin daha kolay olduğunu ve derinliğin önemli ölçüde artırılmasından doğruluk kazanımı elde edebildiğini gösteren kapsamlı ampirik kanıtlar sunuyoruz. ImageNet veri setinde, VGG ağlarından 8 kat daha derin ancak hâlâ daha düşük karmaşıklığa sahip, derinliği 152 katmana kadar çıkan kalıntı ağlarını değerlendiriyoruz. Bu kalıntı ağlarından oluşan bir ensemble, ImageNet test setinde %3,57 hata oranına ulaşıyor. Bu sonuç, ILSVRC 2015 sınıflandırma görevinde 1. sırayı kazandı. Ayrıca CIFAR-10 üzerinde 100 ve 1000 katmanlı analizler sunuyoruz. Temsillerin derinliği, birçok görsel tanıma görevi için merkezi bir öneme sahiptir. Yalnızca son derece derin temsillerimiz sayesinde, COCO nesne algılama veri setinde %28'lik bir göreli iyileşme elde ediyoruz. Derin kalıntı ağları, ILSVRC & COCO 2015 yarışmalarına yaptığımız gönderimlerin temelini oluşturuyor; bu yarışmalarda ImageNet algılama, ImageNet konumlandırma, COCO algılama ve COCO segmentasyon görevlerinde de 1. sırayı kazandık.*

Aşağıdaki şekil, ResNet mimarisini göstermektedir. [orijinal makale](https://huggingface.co/papers/1512.03385)'den alınmıştır.

Bu model [Francesco](https://huggingface.co/Francesco) tarafından katkıda bulunmuştur. Orijinal kod [burada](https://github.com/KaimingHe/deep-residual-networks) bulunabilir.

## Kaynaklar

ResNet ile başlamanıza yardımcı olmak için resmi Hugging Face ve topluluk (🌎 ile belirtilen) kaynaklarının listesi.

- [ResNetForImageClassification](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetForImageClassification), bu [defter](https://colab.research.google.com/github/huggingface/notebooks/blob/main/examples/image_classification.ipynb) tarafından desteklenmektedir.
- Bkz: [Görsel sınıflandırma görevi kılavuzu](../tasks/image_classification)

Buraya bir kaynak eklemek isterseniz, lütfen bir Pull Request açmaktan çekinmeyin; inceleyeceğiz! Kaynağın, mevcut bir kaynağı tekrarlamak yerine ideal olarak yeni bir şeyi göstermesi beklenir.

## ResNetConfig[[transformers.ResNetConfig]]

#### transformers.ResNetConfig[[transformers.ResNetConfig]]

```python
transformers.ResNetConfig(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, is_encoder_decoder: bool = False, 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, num_channels: int = 3, embedding_size: int = 64, hidden_sizes: list[int] | tuple[int, ...] | None = (256, 512, 1024, 2048), depths: list[int] | tuple[int, ...] | None = (3, 4, 6, 3), layer_type: str = 'bottleneck', hidden_act: str = 'relu', downsample_in_first_stage: bool = False, downsample_in_bottleneck: bool = False)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/configuration_resnet.py#L27)

**Parametreler:**

num_channels (`int`, *opsiyonel*, varsayılan `3`) : Girdi kanal sayısı.

embedding_size (`int`, *isteğe bağlı*, varsayılan `64`) : Gömme ve gizli durumların boyutluluğu.

hidden_sizes (`Union[list[int], tuple[int, ...]]`, *isteğe bağlı*, varsayılan `(256, 512, 1024, 2048)`) : Modelin her aşamasındaki boyut (gizli boyut).

depths (`Union[list[int], tuple[int, ...]]`, *isteğe bağlı*, varsayılan `(3, 4, 6, 3)`) : Transformer'daki her katmanın derinliği.

layer_type (`str`, *isteğe bağlı*, varsayılan `"bottleneck"`) : Kullanılacak katman, bu ya `"basic"` (resnet-18 veya resnet-34 gibi daha küçük modellerde kullanılır) ya da `"bottleneck"` (resnet-50 ve üzeri gibi daha büyük modellerde kullanılır) olabilir.

hidden_act (`str`, *isteğe bağlı*, varsayılan `relu`) : Dekoderdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin, `"gelu"`, `"relu"`, `"silu"` vb.

downsample_in_first_stage (`bool`, *isteğe bağlı*, varsayılan `False`) : `True` ise, ilk aşama girdileri 2 `stride` kullanarak küçültür.

downsample_in_bottleneck (`bool`, *isteğe bağlı*, varsayılan `False`) : `True` ise, ResNetBottleNeckLayer'daki ilk 1x1 conv, girdileri `stride` değeri 2 olacak şekilde küçültür.

Bu, bir ResNetModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Resnet modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılanlarla bir yapılandırma örneği oluşturmak, [microsoft/resnet-50](https://huggingface.co/microsoft/resnet-50) yapılandırmasına benzer bir yapılandırma üretir.

Yapılandırma nesneleri [PreTrainedConfig](/docs/transformers/v5.23.0/tr/main_classes/configuration#transformers.PreTrainedConfig) sınıfından türetilir ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için [PreTrainedConfig](/docs/transformers/v5.23.0/tr/main_classes/configuration#transformers.PreTrainedConfig) belgesini okuyun.

Örnek:
```python
>>> from transformers import ResNetConfig, ResNetModel

>>> # Initializing a ResNet resnet-50 style configuration
>>> configuration = ResNetConfig()

>>> # Initializing a model (with random weights) from the resnet-50 style configuration
>>> model = ResNetModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

#### validate_layer_type[[transformers.ResNetConfig.validate_layer_type]]

```python
validate_layer_type()
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/configuration_resnet.py#L72)

`layer_types`'in doğru şekilde tanımlandığından emin olun.

## ResNetModel[[transformers.ResNetModel]]

#### transformers.ResNetModel[[transformers.ResNetModel]]

```python
transformers.ResNetModel(config: ResNetConfig)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/modeling_resnet.py#L291)

**Parametreler:**

config ([ResNetConfig](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetConfig)) : Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için [from_pretrained()](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) yöntemine göz atın.

Üzerinde herhangi bir özel başlık olmadan ham gizli durumları (hidden-states) üreten çıplak Resnet Modeli.

Bu model [PreTrainedModel](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel) sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden ayarlama, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

#### forward[[transformers.ResNetModel.forward]]

```python
forward(pixel_values: Tensor, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/modeling_resnet.py#L301)

**Parametreler:**

pixel_values (`torch.Tensor`, şekli `(batch_size, num_channels, image_size, image_size)`) : Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri [ConvNextImageProcessor](/docs/transformers/v5.23.0/tr/model_doc/convnext#transformers.ConvNextImageProcessor) kullanılarak elde edilebilir. Ayrıntılar için [ConvNextImageProcessor.__call__()](/docs/transformers/v5.23.0/tr/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) bölümüne bakın (`processor_class`, görüntü işleme için [ConvNextImageProcessor](/docs/transformers/v5.23.0/tr/model_doc/convnext#transformers.ConvNextImageProcessor) kullanır).

output_hidden_states (`bool`, *isteğe bağlı*) : Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki `hidden_states` bölümüne bakın.

return_dict (`bool`, *isteğe bağlı*) : Düz bir tuple yerine [ModelOutput](/docs/transformers/v5.23.0/tr/main_classes/output#transformers.utils.ModelOutput) döndürülecek mi?

**Dönüş:** `BaseModelOutputWithPoolingAndNoAttention` veya `tuple(torch.Tensor)`

A `BaseModelOutputWithPoolingAndNoAttention` veya bir `torch.Tensor` tuple'ı (`return_dict=False` geçirildiğinde veya `config.return_dict=False` olduğunda), yapılandırmaya ([ResNetConfig](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetConfig)) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

[ResNetModel](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetModel) forward metodu, `__call__` özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine `Module` örneğini çağırmak gerekir; çünkü ilki ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

- **last_hidden_state** (`torch.Tensor`, şekli `(batch_size, num_channels, height, width)`) -- Modelin son katmanının çıktısındaki gizli durumlar dizisi.
- **pooler_output** (`torch.Tensor`, şekli `(batch_size, hidden_size)`) -- Uzamsal boyutlar üzerinde bir havuzlama işlemi uygulandıktan sonraki son katman gizli durumu.
- **hidden_states** (`tuple(torch.Tensor)`, *isteğe bağlı*, `output_hidden_states=True` geçirildiğinde veya `config.output_hidden_states=True` olduğunda döndürülür) -- `torch.Tensor` (gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren ve `(batch_size, num_channels, height, width)` biçiminde bir demet.

  Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

Örnek:

```python
```

## ResNetForImageClassification[[transformers.ResNetForImageClassification]]

#### transformers.ResNetForImageClassification[[transformers.ResNetForImageClassification]]

```python
transformers.ResNetForImageClassification(config: ResNetConfig)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/modeling_resnet.py#L340)

**Parametreler:**

config ([ResNetConfig](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetConfig)) : Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için [from_pretrained()](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) yöntemine göz atın.

Üstünde bir görüntü sınıflandırma başlığı (toplanmış özelliklerin üzerinde doğrusal bir katman) bulunan ResNet modeli, örneğin ImageNet için.

Bu model [PreTrainedModel](/docs/transformers/v5.23.0/tr/main_classes/model#transformers.PreTrainedModel) sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden ayarlama, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

#### forward[[transformers.ResNetForImageClassification.forward]]

```python
forward(pixel_values: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

[Kaynak](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/resnet/modeling_resnet.py#L353)

**Parametreler:**

pixel_values (`torch.Tensor`, şekli `(batch_size, num_channels, image_size, image_size)`, *isteğe bağlı*) : Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri [ConvNextImageProcessor](/docs/transformers/v5.23.0/tr/model_doc/convnext#transformers.ConvNextImageProcessor) kullanılarak elde edilebilir. Ayrıntılar için [ConvNextImageProcessor.__call__()](/docs/transformers/v5.23.0/tr/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) bölümüne bakın (`processor_class`, görüntü işleme için [ConvNextImageProcessor](/docs/transformers/v5.23.0/tr/model_doc/convnext#transformers.ConvNextImageProcessor) kullanır).

labels (`torch.LongTensor`, şekli `(batch_size,)`, *isteğe bağlı*) : Görüntü sınıflandırma/geri dönüşüm kaybını hesaplamak için etiketler. Endeksler `[0, ..., config.num_labels - 1]` aralığında olmalıdır. `config.num_labels > 1` ise bir sınıflandırma kaybı (Cross-Entropy) hesaplanır.

output_hidden_states (`bool`, *isteğe bağlı*) : Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındaki `hidden_states` bölümüne bakın.

return_dict (`bool`, *isteğe bağlı*) : Düz bir tuple yerine [ModelOutput](/docs/transformers/v5.23.0/tr/main_classes/output#transformers.utils.ModelOutput) döndürülecek mi?

**Dönüş:** [ImageClassifierOutputWithNoAttention](/docs/transformers/v5.23.0/tr/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) veya `tuple(torch.Tensor)`

[ImageClassifierOutputWithNoAttention](/docs/transformers/v5.23.0/tr/main_classes/output#transformers.modeling_outputs.ImageClassifierOutputWithNoAttention) veya bir `torch.Tensor` demeti (eğer `return_dict=False` geçirildiyse veya `config.return_dict=False` ise), yapılandırmaya ([ResNetConfig](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetConfig)) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

[ResNetForImageClassification](/docs/transformers/v5.23.0/tr/model_doc/resnet#transformers.ResNetForImageClassification) forward metodu, `__call__` özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine `Module` örneğini çağırmak gerekir; çünkü ilki ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

- **loss** (`torch.Tensor`, şekli `(1,)`, *isteğe bağlı*, `labels` sağlandığında döndürülür) -- Sınıflandırma (config.num_labels==1 ise regresyon) kaybı.
- **logits** (`torch.Tensor`, şekli `(batch_size, config.num_labels)`) -- Sınıflandırma (veya config.num_labels==1 ise regresyon) puanları (SoftMax öncesi).
- **hidden_states** (`tuple(torch.Tensor)`, *isteğe bağlı*, `output_hidden_states=True` geçirildiğinde veya `config.output_hidden_states=True` olduğunda döndürülür) -- `torch.Tensor` (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her aşamanın çıktısı için bir tane) içeren bir tuple, şekli `(batch_size, num_channels, height, width)`. Modelin her aşamanın çıktısındaki gizli durumları (aynı zamanda özellik haritaları olarak da adlandırılır).

Örnek:

```python
>>> from transformers import AutoImageProcessor, ResNetForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("microsoft/resnet-50")
>>> model = ResNetForImageClassification.from_pretrained("microsoft/resnet-50")

>>> inputs = image_processor(image, return_tensors="pt")

>>> with torch.no_grad():
...     logits = model(**inputs).logits

>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...
```

