Nöronal ağlar birçok AI ve Genai uygulamasının motorudur. Bu makale dizisi bireysel unsurlar hakkında bir fikir sunar. Altıncı kısım, CO -Face Sinir Ağlarına (CNN) adanmıştır.
Dr. Michael Stal, 1991 yılından bu yana Siemens teknolojisi üzerinde çalışmaktadır. Yazılım mimarisi sorunları hakkında iş alanları önermektedir ve Siemens'in kıdemli yazılım mimarlarının mimari oluşumundan sorumludur.
Almanca'da nöronal katlama ağları olarak da adlandırılan kınama sinir ağları, topoloji ve ızgara görüntüleri ile verilerin işlenmesi için tasarlanmıştır. Her bir girişi her bir problemle tamamen bağlamak yerine, bir meclis üyesi her sorunu APUT'un yerelleştirilmiş bir alanına bağlar. Bu yerelleştirilmiş bağlantı, parametre sayısını azaltmak ve öğeden geçtiklerinde bile önemli kalan modelleri kaydetmek için verilerin mekansal yapısını kullanır.
Katlanır bir katmanın kalbi, gizli iki boyutlu katlama işlemidir. Giriş görüntüsünü IE bir öğrenme filtresi veya K ile çekirdeğe atarsak, bir boşluk konumunda (i, j) katlanma çift toplamla tanımlanır:
(İ * K)[i, j] = Σ_ {m = 0}^{k_h -1} σ_ {n = 0}^{k_w -1} k[m, n] · BEN[i + m, j + n]
Burada K_H ve K_W Çekirdeğin yüksekliği ve genişliği. Sonuç, çekirdek tarafından kodlanan modelin meydana geldiği görüntünün tüm yerlerini vurgulayan bir işlevsellik kartıdır.
Pytorch, sınıfta 2D katlama katmanını temsil eder torch.nn.Conv2d
hazır. Bu modül, modülle (out_channel, in_channel, k_h, k_w) bir dizi filtreyi yönetir ve modülün bir giriş giriş sensörüne (Batch_size, In_chanes, yükseklik, genişlik) dönüştürür. Bükme ayrıca konumları atlamak için çığlık atılmış bir parametre ve girişin etrafına sıfırın bir kenarını eklemek için bir dolgu parametresi kullanır. Çıkışın yüksekliği ve genişliği şu şekilde hesaplanır:
H_out = zemin ((h_in + 2 · dolgu – dilatasyon · (k_h – 1) – Scree + 1)
W_out = zemin ((w_in + 2 · dolgu – dilatasyon · (k_w – 1) – Scree + 1)
Aşağıdaki kod katlanır bir seviye oluşturur ve her biri 32 × 32 piksel boyutunda bir RGB görüntüsü pil kullanır.
import torch
import torch.nn as nn
# Erstellen Sie einen Stapel von acht RGB-Bildern mit einer Größe von 32×32
batch_size, in_channels, H, W = 8, 3, 32, 32
images = torch.randn(batch_size, in_channels, H, W)
# Definieren Sie eine Faltungsschicht mit 16 Ausgangskanälen, einem 3×3-Kernel, einem Schritt von eins und einer Auffüllung von eins
conv = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, stride=1, padding=1)
# Wende die Faltung auf die Bilder an
features = conv(images)
# features hat die Form (8, 16, 32, 32)
Adımın boyutu bir olduğunda ve dolgu aynı olduğunda (kernel_size−1)/2
Garip çekirdeğin boyutları nedeniyle, çıkış özelliklerinin haritası APUT ile aynı boşluk boyutuna sahiptir. Boyutların bu şekilde korunması, görüntülerin işleme ağlarının erken aşamalarında yaygındır. Aksine, birinden daha büyük bir adım veya havuz katmanlarının kullanımı, uzamsal boyutlarda bir azalmaya yol açar. Örneğin, girişinin hem yüksekliği hem de genişliği gibi, iki yarısına sahip maksimum iki iki yüzme havuzu tabakası.
Havuz, bir tür yerel çeviri değişmezliği sunar ve hesaplama çabalarını düşük seviyelere düşürür. Bir P × P penceresi üzerinden maksimum bir havuzlama işlemi, her pencereyi maksimum değeri ile değiştirirken, ortalama havuz pencereyi ortalaması ile değiştirir. Kodda bir havuz seviyesi oluşturulur torch.nn.MaxPool2d
VEYA torch.nn.AvgPool2d
somutlaştırılmış.
Koyuk katmanlar, derin özelliklere sahip hiyerarşiler oluşturmak için sırayla istiflenebilir. Birinci seviyeleri öğrenin, kenarlar ve grafikler gibi basit desenleri tanıyın ve sonraki katmanlar bu desenleri şekiller ve nesneler gibi soyut gösterimlerde birleştirir. Farklı şekerleme ve havuz seviyelerinden sonra, ortaya çıkan özellikler genellikle bir taşıyıcıya katlanır ve sınıflandırmayı veya regresyonu gerçekleştirmek için bunları tamamen bağlı seviyelerde yönlendirir.
Pytorch'taki minimal bir konjolition ağı aşağıdaki gibi görünebilir. Kodun her satırı mimarinin bir yönünü yakalar.
import torch
import torch.nn as nn
class SimpleCNN(nn.Module):
def __init__(self, num_classes=10):
super(SimpleCNN, self).__init__()
# Erster Faltungsblock: 3→16 Kanäle, Kernel 3×3, Auffüllung zur Beibehaltung der Größe
self.conv1 = nn.Conv2d(in_channels=3, out_channels=16, kernel_size=3, padding=1)
# Normalisieren Sie jede Merkmalskarte über den Batch auf einen Mittelwert von Null und eine Varianz von Eins
self.bn1 = nn.BatchNorm2d(num_features=16)
# Einführen von Nichtlinearität
self.relu = nn.ReLU()
# Zweiter Faltungsblock: 16→32 Kanäle
self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
self.bn2 = nn.BatchNorm2d(num_features=32)
# Downsampling um den Faktor zwei
self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
# Vollständig verbundene Schicht, die abgeflachten Merkmale auf Klassenscores abbildet
self.fc = nn.Linear(in_features=32 * 16 * 16, out_features=num_classes)
def forward(self, x):
x = self.conv1(x)
x = self.bn1(x)
x = self.relu(x)
x = self.conv2(x)
x = self.bn2(x)
x = self.relu(x)
x = self.pool(x)
x = x.view(x.size(0), -1)
scores = self.fc(x)
return scores
model = SimpleCNN(num_classes=10)
input_tensor = torch.randn(8, 3, 32, 32)
output_scores = model(input_tensor)
# output_scores hat die Form (8, 10)
İlk katlanır blok, girişi aynı boşluk boyutunun karakteristik on altı özellik içinde üç kanala dönüştürür. Bu nedenle parti normalizasyonu, genellikle eğitimi hızlandıran aktivasyonların dağılımını stabilize eder. Bir Relu yerlisi, gerekli doğrusal olmayanlığı tanıtır. İkinci blok bu modeli tekrarlar ve her bir işlevsellik kartının yüksekliğini ve genişliğini 32'den 16'ya düşürür. Son olarak, modülün iki boyutlu bir tensöründeki tüm işlevsellik kartlarını azaltır ve bir sınıf değerlendirmesi oluşturmak için doğrusal bir katmandan yönlendirir.
Kınama sinir ağları, görüntülerin ve ötesindeki en modern modellerin temelini oluşturur.
Serinin bir sonraki kısmı, sıralı verilerin işlenmesi için tasarlanmış özyinelemeli nöronal ağlara adanmıştır.
(RME)
Bir yanıt yazın