Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

nn - Sinir Ağları

Neural network katmanları ve aktivasyon fonksiyonları

15
Katman Tipi
8
Aktivasyon
38%
Hızlanma

Genel Bakış

nn modülü, modern sinir ağı mimarilerini oluşturmak için gereken tüm bileşenleri sağlar. PyTorch nn.Module API'sine benzer tasarım ile kolay kullanım sunar.

Katman Tipleri

Linear (Fully Connected)

Tam bağlantılı katman: y = xW^T + b

kullan ai/nn;

// 784 giriş → 128 çıkış
değişken layer = Linear::yeni(784, 128);

// Forward pass
değişken x = Tensor::rastgele([32, 784]);  // batch_size=32
değişken y = layer.ileri(x);               // [32, 128]

Conv2d (2D Convolution)

2D konvolüsyon katmanı

kullan ai/nn;

// 3 kanal → 64 kanal, 3×3 kernel
değişken conv = Conv2d::yeni(
    in_channels: 3,
    out_channels: 64,
    kernel_size: 3,
    stride: 1,
    padding: 1
);

değişken x = Tensor::rastgele([32, 3, 224, 224]);  // NCHW format
değişken y = conv.ileri(x);  // [32, 64, 224, 224]

LSTM (Long Short-Term Memory)

Tekrarlayan sinir ağı katmanı

kullan ai/nn;

// 100 girdi → 256 hidden units
değişken lstm = LSTM::yeni(
    input_size: 100,
    hidden_size: 256,
    num_layers: 2,
    dropout: 0.2
);

// Sequence: [batch, seq_len, features]
değişken x = Tensor::rastgele([32, 50, 100]);
değişken (output, (h_n, c_n)) = lstm.ileri(x);
// output: [32, 50, 256]

Aktivasyon Fonksiyonları

ReLU (Rectified Linear Unit)

kullan ai/nn;

değişken relu = ReLU::yeni();
değişken x = Tensor::yeni([2, 3], [-1.0, 0.0, 1.0, 2.0, -2.0, 3.0]);
değişken y = relu.ileri(x);  // [0.0, 0.0, 1.0, 2.0, 0.0, 3.0]

Sigmoid

kullan ai/nn;

değişken sigmoid = Sigmoid::yeni();
değişken x = Tensor::yeni([3], [0.0, 1.0, -1.0]);
değişken y = sigmoid.ileri(x);  // [0.5, 0.73, 0.27]

Softmax

kullan ai/nn;

değişken softmax = Softmax::yeni(dim: -1);  // Son eksen
değişken x = Tensor::yeni([2, 3], [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]);
değişken y = softmax.ileri(x);
// Her satır toplamı 1.0

Normalization Katmanları

BatchNorm

kullan ai/nn;

değişken bn = BatchNorm::yeni(
    num_features: 64,
    momentum: 0.1,
    epsilon: 1e-5
);

değişken x = Tensor::rastgele([32, 64, 28, 28]);
değişken y = bn.ileri(x);  // Normalized

LayerNorm

kullan ai/nn;

değişken ln = LayerNorm::yeni(
    normalized_shape: [512]
);

değişken x = Tensor::rastgele([32, 512]);
değişken y = ln.ileri(x);

Regularization

Dropout

kullan ai/nn;

değişken dropout = Dropout::yeni(p: 0.5);

// Training mode
dropout.eğitim();
değişken y_train = dropout.ileri(x);  // %50 dropout

// Eval mode
dropout.değerlendirme();
değişken y_eval = dropout.ileri(x);   // Dropout yok

Sequential Model

MNIST Classifier

kullan ai/nn;

değişken model = Sequential::yeni([
    Linear::yeni(784, 256),
    ReLU::yeni(),
    Dropout::yeni(0.2),
    Linear::yeni(256, 128),
    ReLU::yeni(),
    Dropout::yeni(0.2),
    Linear::yeni(128, 10),
    Softmax::yeni()
]);

// Forward pass
değişken x = Tensor::rastgele([32, 784]);
değişken logits = model.ileri(x);  // [32, 10]

Custom Module

Kendi Modülünüzü Oluşturun

kullan ai/nn;
kullan ai/tensor;

sınıf ResBlock {
    değişken conv1: Conv2d;
    değişken bn1: BatchNorm;
    değişken conv2: Conv2d;
    değişken bn2: BatchNorm;
    değişken relu: ReLU;
    
    fonksiyon yeni(channels: tamsayı) -> ResBlock yap
        ResBlock {
            conv1: Conv2d::yeni(channels, channels, 3, 1, 1),
            bn1: BatchNorm::yeni(channels),
            conv2: Conv2d::yeni(channels, channels, 3, 1, 1),
            bn2: BatchNorm::yeni(channels),
            relu: ReLU::yeni()
        }
    son
    
    fonksiyon ileri(değişken kendi, x: Tensor) -> Tensor yap
        değişken identity = x;
        
        değişken out = kendi.conv1.ileri(x);
        out = kendi.bn1.ileri(out);
        out = kendi.relu.ileri(out);
        
        out = kendi.conv2.ileri(out);
        out = kendi.bn2.ileri(out);
        
        out = out.topla(identity);  // Residual connection
        out = kendi.relu.ileri(out);
        
        dön out;
    son
}

Loss Functions

CrossEntropyLoss

kullan ai/nn;

değişken criterion = CrossEntropyLoss::yeni();

değişken logits = model.ileri(x);      // [32, 10]
değişken targets = Tensor::yeni([32]); // Class indices
değişken loss = criterion(logits, targets);

yazdir("Loss: {:.4f}", loss.değer());

MSELoss

kullan ai/nn;

değişken criterion = MSELoss::yeni();

değişken predictions = model.ileri(x);
değişken targets = Tensor::rastgele([32, 1]);
değişken loss = criterion(predictions, targets);

Performans

ModelÖncesiSonrasıİyileştirme
Small NN (128→64)178K infer/sec246K infer/sec+38%
Medium NN (256→128)6.4K infer/sec10.1K infer/sec+58%

API Referansı

Katmanlar

  • Linear: Fully connected layer
  • Conv2d: 2D convolution
  • Conv3d: 3D convolution
  • LSTM: Long short-term memory
  • GRU: Gated recurrent unit
  • Transformer: Attention layer

Aktivasyonlar

  • ReLU: max(0, x)
  • LeakyReLU: max(0.01x, x)
  • Sigmoid: 1/(1+e^-x)
  • Tanh: (e^x - e^-x)/(e^x + e^-x)
  • Softmax: e^xi / Σe^xj
  • GELU: Gaussian error linear unit