Einstein Toplamı

Python'da Tensör İşlemleri
Einstein Toplama Teknikleri
Numpy ve Tensör Akış Örnekleri
Einstein Toplamı cover image

Einstein Toplama gösterimi, tensör işlemlerini temsil etmenin kısa ve güçlü bir yoludur ve sıklıkla fizikte ve makine öğreniminde kullanılır. Tensörler üzerine karmaşık hesaplamaları kompakt bir biçimde yazmamızı sağlar. Einstein toplamının temellerini, bunun Python'da Numpy ve Tensorflow ile nasıl kullanılacağını ele alacağız ve kullanımını göstermek için örnekler sunacağız.

Einstein Toplamasının Temelleri

Einstein Toplama notasyonu (Einsum), tensör ifadelerinde tekrarlanan indeksler üzerinden toplama fikrine dayanmaktadır. Aşağıdaki iki kurala dayanmaktadır:

1. Tekrarlanan endeksler üzerinden toplama: Bir endeks bir dönemde iki kez görünüyorsa toplanır

2. Serbest indeksler: Yalnızca bir kez görünen indeksler serbest indekslerdir ve çıkış tensörünün eksenlerini temsil eder

Bunu iki A ve B matrisinin çarpılması örneğiyle açıklayalım: Ortaya çıkan C matrisi şu şekilde tanımlanır:

Cik=jAijBjkC_{ik} = \sum\limits_{j}^{}A_{ij}B_{jk}

Python'da hem Numpy hem de Tensorflow kitaplıkları bir einsum işlevi sağlar.

Numpy

import numpy as np

# Define two matrices A and B
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

# Perform matrix multiplication using einsum
C = np.einsum('ij,jk->ik', A, B)

print(C)
# [[19 22]
#  [43 50]]

Yukarıdaki örnekte ij,jk->ik einsum dizesidir:

'ij' A matrisinin indekslerini temsil eder

'jk' B matrisinin indekslerini temsil eder

->ik çıktı matrisi C'nin indekslerini belirtir

İşlem j indeksi üzerinden toplanır

Tensorflow'taki aynı kod şöyle görünecektir:

import tensorflow as tf

# Define two matrices A and B
A = tf.constant([[1, 2], [3, 4]], dtype=tf.float32)
B = tf.constant([[5, 6], [7, 8]], dtype=tf.float32)

# Perform matrix multiplication using einsum
C = tf.einsum('ij,jk->ik', A, B)

print(C)
# tf.Tensor(
# [[19. 22.]
#  [43. 50.]], shape=(2, 2), dtype=float32)

Daha Fazla Örnek

Vektörlerin İç Çarpımı

İki vektör a ve b'nin iç çarpımı (nokta çarpımı) şu şekilde tanımlanır:

c=iaibic = \sum\limits_{i}^{}a_{i}b_{i}

a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

c = np.einsum('i,i->', a, b)

print(c)  # Output: 32

Vektörlerin Dış Çarpımı

İki vektör a ve b'nin dış çarpımı şu şekilde verilir:

Cij=aibjC_{ij} = a_{i}b_{j}

C = np.einsum('i,j->ij', a, b)

print(C)
# Output
# [[4 5 6]
#  [8 10 12]
#  [12 15 18]]

Bir Matrisin Transpozu

Bir A matrisinin transpozu indeksleri değiştirilerek elde edilebilir

A_transpose = np.einsum('ij->ji', A)

print(A_transpose)
# Output
# [[1. 3.]
#  [2. 4.]]

Bir Matrisin İzi

Bir A matrisinin izi köşegen elemanlarının toplamıdır:

Tr(A)=iAiiAiiTr(A) = \sum\limits_{i}^{}A_{ii}A_{ii}


trace = np.einsum('ii->', A)

print(trace)
# Output: 5.0

Toplu Matris Çarpımı

Einsum özellikle toplu işlemler için kullanışlıdır. A ve B matrislerinden oluşan bir grubumuz olduğunu ve gruptaki karşılık gelen matrisleri çarpmak istediğimizi varsayalım:


A = np.random.rand(3, 2, 2)
B = np.random.rand(3, 2, 2)

# Perform batch matrix multiplication
C = np.einsum('bij,bjk->bik', A, B)

print(C)

Burada 'b' parti boyutunu temsil ediyor.

Einsum Gösteriminin Avantajları

1. Kısalık: Einsum notasyonu kompakttır ve karmaşık işlemleri kısa ve öz bir şekilde temsil edebilir

2. Esneklik: Dizileri açıkça yeniden şekillendirmeden veya yer değiştirmeden çok çeşitli tensör işlemlerini gerçekleştirebilir

3. Verimlilik: Pek çok kitaplık, einsum işlemlerini dahili olarak optimize ederek potansiyel olarak daha iyi performans sağlar.


Career Services background pattern

Kariyer Hizmetleri

Contact Section background image

İletişimde kalalım

Code Labs Academy © 2025 Her hakkı saklıdır.