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 | Öncesi | Sonrası | İyileştirme |
|---|---|---|---|
| Small NN (128→64) | 178K infer/sec | 246K infer/sec | +38% |
| Medium NN (256→128) | 6.4K infer/sec | 10.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