| |
| from rastgele import gauss_rastgele, tohum_uret |
|
|
| def agirlik_olustur(satirlar, sutunlar): |
| degerler = gauss_rastgele(tohum_uret(), satirlar * sutunlar) |
| return [ |
| [degerler[i * sutunlar + j] * 0.02 for j in range(sutunlar)] |
| for i in range(satirlar) |
| ] |
|
|
| def sifir_vektor(boyut): |
| return [0.0] * boyut |
|
|
| def bir_vektor(boyut): |
| return [1.0] * boyut |
|
|
| class KafaAgirliklari: |
| def __init__(self, model_boyutu, kafa_boyutu): |
| self.WQ = agirlik_olustur(model_boyutu, kafa_boyutu) |
| self.WK = agirlik_olustur(model_boyutu, kafa_boyutu) |
| self.WV = agirlik_olustur(model_boyutu, kafa_boyutu) |
|
|
| class AttentionAgirliklari: |
| def __init__(self, kafa_sayisi, model_boyutu): |
| kafa_boyutu = model_boyutu // kafa_sayisi |
| self.kafalar = [KafaAgirliklari(model_boyutu, kafa_boyutu) for _ in range(kafa_sayisi)] |
| self.WO = agirlik_olustur(model_boyutu, model_boyutu) |
| self.bO = sifir_vektor(model_boyutu) |
|
|
| class FFAgirliklari: |
| def __init__(self, model_boyutu, ff_boyutu): |
| self.W1 = agirlik_olustur(model_boyutu, ff_boyutu) |
| self.b1 = sifir_vektor(ff_boyutu) |
| self.W2 = agirlik_olustur(ff_boyutu, model_boyutu) |
| self.b2 = sifir_vektor(model_boyutu) |
|
|
| class KatmanAgirliklari: |
| def __init__(self, kafa_sayisi, model_boyutu, ff_boyutu): |
| self.attention = AttentionAgirliklari(kafa_sayisi, model_boyutu) |
| self.ff = FFAgirliklari(model_boyutu, ff_boyutu) |
| self.gamma1 = bir_vektor(model_boyutu) |
| self.beta1 = sifir_vektor(model_boyutu) |
| self.gamma2 = bir_vektor(model_boyutu) |
| self.beta2 = sifir_vektor(model_boyutu) |
|
|
| class SinirAgi: |
| def __init__(self, sozluk_boyutu, model_boyutu, ff_boyutu, kafa_sayisi, katman_sayisi): |
| self.sozluk_boyutu = sozluk_boyutu |
| self.model_boyutu = model_boyutu |
| self.ff_boyutu = ff_boyutu |
| self.kafa_sayisi = kafa_sayisi |
| self.katman_sayisi = katman_sayisi |
|
|
| self.embedding = agirlik_olustur(sozluk_boyutu, model_boyutu) |
| self.katmanlar = [ |
| KatmanAgirliklari(kafa_sayisi, model_boyutu, ff_boyutu) |
| for _ in range(katman_sayisi) |
| ] |
| self.cikti_W = agirlik_olustur(model_boyutu, sozluk_boyutu) |
| self.cikti_b = sifir_vektor(sozluk_boyutu) |