• Yapay zeka soru ve sorunlarınızı uygun olan kategorilere açıp yanıt alabilirsiniz...

TensorFlow modellerine attention katmanı nasıl eklenir?

Garfield

YZF Admin
Yaş
40
Konum
YurtDışı
Katılım
27 Eki 2026
Konular
664
Mesajlar
689
AI Seviyesi
Yeni
TensorFlow modeline attention eklemek için sorgu, anahtar ve değer tensörlerini uygun şekillerde bir attention katmanına bağlayın. tf.keras.layers.MultiHeadAttention, girdileri başlıklara ayırıp ilişkili konumların bilgisini birleştirir. Aynı dizi query, key ve value olarak kullanılırsa self-attention; sorgu başka bir kaynaktaki bilgilere bakıyorsa cross-attention oluşur.

Tensörlerin görevini belirleyin​


Girdi genellikle (batch, uzunluk, özellik) biçimindedir. Attention, veri sırasının yerine geçmez; görevde konum önemliyse uygun konum bilgisini de modele ekleyin. Temel giriş ve çıktı sözleşmesi resmî MultiHeadAttention belgesinde açıklanır.

TensörGöreviTipik şekil
queryHangi konumlar için bilgi aranacağını belirler.(B, T, Dq)
keySorguyla karşılaştırılacak anahtarları taşır.(B, S, Dk)
valueDikkat ağırlıklarıyla birleştirilecek bilgiyi taşır.(B, S, Dv)
çıktıHer sorgu konumu için bir temsil verir.Varsayılan output_shape ile (B, T, Dq)

Key ve value uzunlukları aynı olmalıdır. key verilmezse value hem anahtar hem değer olarak kullanılır. key_dim, bütün modelin genişliği değil, her attention başlığının sorgu/anahtar boyutudur.

Self-attention ve artık bağlantı ekleme​


Aşağıdaki örnek, beş konum ve sekiz özellikten oluşan iki varsayımsal diziyi işler. İlk çağrıdaki iki aynı girdi query ve value’dur; key varsayılan olarak value’dan alınır:

Python:
import tensorflow as tf

inputs = tf.keras.Input(shape=(None, 8))
attention = tf.keras.layers.MultiHeadAttention(num_heads=2, key_dim=4)
attended = attention(query=inputs, value=inputs)
x = tf.keras.layers.Add()([inputs, attended])
x = tf.keras.layers.LayerNormalization()(x)
model = tf.keras.Model(inputs=inputs, outputs=x)

sample = tf.random.normal((2, 5, 8))
output = model(sample, training=False)
print(output.shape)  # (2, 5, 8)

Varsayılan çıktı genişliği sorgunun son boyutu olan 8’e döner. Bu nedenle Add() için giriş ve attention çıktısının şekilleri eşleşir. Çıktı genişliğini değiştirdiyseniz artık bağlantıya eklemeden önce uygun bir Dense izdüşümüyle boyutları eşitleyin. Model çağrısının şekil üretmesi, attention ağırlıklarının görevi öğrendiğini göstermez; görev için çıkış katmanı, kayıp ve eğitim verisi ayrıca tanımlanmalıdır.

Cross-attention nasıl farklıdır?​


Sorgu ile kaynak dizinin uzunluğu aynı olmak zorunda değildir. Örneğin üç sorgu konumunun yedi kaynak konumunu kullanması şöyle yazılabilir:

Python:
import tensorflow as tf

query = tf.random.normal((2, 3, 8))
source = tf.random.normal((2, 7, 12))
attention = tf.keras.layers.MultiHeadAttention(num_heads=2, key_dim=4)
result = attention(query=query, value=source, key=source)
print(result.shape)  # (2, 3, 8)

Bu katman sorgu, anahtar ve değerleri kendi öğrenilen izdüşümleriyle işler. Sonuç sorgunun üç konumuna karşılık gelir; kaynak uzunluğu olan yedi, çıktı dizisinin uzunluğu olmaz.

Maske ve gelecek bilgisi​


Dolgu konumları gerçek veri olarak kullanılmamalıdır. Gerekli durumda (B, T, S) biçiminde boolean attention_mask verin; True erişime izin verir, False engeller. Bir sonraki öğeyi geçmişten tahmin eden self-attention kullanımında gelecekteki konumlara bakılmaması için çağrıya use_causal_mask=True ekleyin. Dizinin tamamı mevcutken yapılan bir sınıflandırmanın maske gereksinimi farklı olabilir.

Sık sorulan soru​


Attention eklediğimde Add katmanı neden şekil hatası veriyor?​


Query uzunluğunu, çıktı genişliğini ve artık bağlantıya verilen tensörün şeklini kontrol edin. Farklı kaynak uzunluğunu sorgu uzunluğuyla karıştırmayın. Attention çıktısının shape değeri ve eklenecek tensör uyumlu olduktan sonra modeli küçük bir örnek üzerinde kontrol edin.
 
Son düzenleme:

Sen de şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic
Geri
Üst