{"id":31273,"date":"2025-10-08T04:40:52","date_gmt":"2025-10-08T01:40:52","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31273"},"modified":"2025-10-08T04:40:52","modified_gmt":"2025-10-08T01:40:52","slug":"pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/","title":{"rendered":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd"},"content":{"rendered":"<p><body><\/p>\n<h2>PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd<\/h2>\n<p>Derin \u00f6\u011frenme, yapay zeka alan\u0131nda son y\u0131llar\u0131n en d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc teknolojilerinden biri olmu\u015ftur. Resim tan\u0131madan do\u011fal dil i\u015flemeye, otonom s\u00fcr\u00fc\u015ften t\u0131bbi te\u015fhise kadar bir\u00e7ok alanda \u00e7\u0131\u011f\u0131r a\u00e7an ba\u015far\u0131lar elde etmi\u015ftir. Bu ba\u015far\u0131n\u0131n temelinde, b\u00fcy\u00fck veri k\u00fcmeleri \u00fczerinde karma\u015f\u0131k modelleri e\u011fitme yetene\u011fi yatar. Bu modellerin e\u011fitimi, \u00f6zellikle de sinir a\u011flar\u0131n\u0131n a\u011f\u0131rl\u0131klar\u0131n\u0131 ve sapmalar\u0131n\u0131 (bias) optimize etme s\u00fcreci, yo\u011fun matematiksel i\u015flemler ve t\u00fcrev hesaplamalar\u0131 gerektirir. \u0130\u015fte tam bu noktada PyTorch gibi modern derin \u00f6\u011frenme k\u00fct\u00fcphaneleri devreye girer.<\/p>\n<p>PyTorch, Facebook&#8217;un yapay zeka ara\u015ft\u0131rma laboratuvar\u0131 (FAIR) taraf\u0131ndan geli\u015ftirilen ve a\u00e7\u0131k kaynakl\u0131 olarak sunulan, Python tabanl\u0131 bir derin \u00f6\u011frenme \u00e7er\u00e7evesidir. Esnekli\u011fi, sezgisel API&#8217;si ve dinamik hesaplama grafi\u011fi sayesinde ara\u015ft\u0131rmac\u0131lar ve geli\u015ftiriciler aras\u0131nda h\u0131zla pop\u00fclerlik kazanm\u0131\u015ft\u0131r. Bu makalede, PyTorch&#8217;un temel yap\u0131 ta\u015flar\u0131n\u0131, derin \u00f6\u011frenmenin kalbi olan hesaplama grafiklerini, otomatik diferansiyasyon kavram\u0131n\u0131 ve PyTorch&#8217;un bu sihirli s\u00fcreci y\u00f6neten Autograd motorunu detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Amac\u0131m\u0131z, PyTorch&#8217;un sadece bir kod k\u00fct\u00fcphanesi olman\u0131n \u00f6tesinde, derin \u00f6\u011frenme algoritmalar\u0131n\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 anlaman\u0131za yard\u0131mc\u0131 olan g\u00fc\u00e7l\u00fc bir ara\u00e7 oldu\u011funu g\u00f6stermektir.<\/p>\n<h3>PyTorch&#8217;a Giri\u015f: Tensorlar ve Temeller<\/h3>\n<p>PyTorch&#8217;un temel veri yap\u0131s\u0131, \u00e7ok boyutlu diziler olan <strong>tensorlard\u0131r<\/strong>. Tensorlar, NumPy dizilerine olduk\u00e7a benzerdir ancak \u00f6nemli bir farkla: GPU&#8217;lar \u00fczerinde \u00e7al\u0131\u015fabilme yetene\u011fi. Bu, \u00f6zellikle b\u00fcy\u00fck veri k\u00fcmeleri ve karma\u015f\u0131k sinir a\u011flar\u0131 ile \u00e7al\u0131\u015f\u0131rken hesaplama h\u0131z\u0131n\u0131 inan\u0131lmaz derecede art\u0131r\u0131r. Bir tensor, bir skaler (0 boyutlu tensor), bir vekt\u00f6r (1 boyutlu tensor), bir matris (2 boyutlu tensor) veya daha y\u00fcksek boyutlu bir veri yap\u0131s\u0131 olabilir.<\/p>\n<p>PyTorch&#8217;ta bir tensor olu\u015fturmak olduk\u00e7a basittir:<\/p>\n<pre><code class=\"language-python\">import torch\n\n<h2>Skaler bir tensor<\/h2>\nscalar = torch.tensor(3.14)\n\n<h2>1 boyutlu bir tensor (vekt\u00f6r)<\/h2>\nvector = torch.tensor([1, 2, 3, 4])\n\n<h2>2 boyutlu bir tensor (matris)<\/h2>\nmatrix = torch.tensor([[1, 2], [3, 4]])\n\n<h2>Belirli bir boyutta s\u0131f\u0131rlardan olu\u015fan bir tensor<\/h2>\nzeros_tensor = torch.zeros(2, 3)\n\n<h2>Belirli bir boyutta rastgele say\u0131lardan olu\u015fan bir tensor<\/h2>\nrandom_tensor = torch.rand(2, 3)<\/code><\/pre>\n<p>Tensorlar \u00fczerinde temel matematiksel i\u015flemler (toplama, \u00e7\u0131karma, \u00e7arpma, b\u00f6lme vb.) NumPy&#8217;deki gibi do\u011frudan uygulanabilir:<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([[1, 2], [3, 4]])\ny = torch.tensor([[5, 6], [7, 8]])\n\n<h2>Toplama<\/h2>\nz_add = x + y # veya torch.add(x, y)\n\n<h2>\u00c7arpma (element-wise)<\/h2>\nz_mul_elem = x * y\n\n<h2>Matris \u00e7arp\u0131m\u0131<\/h2>\nz_matmul = torch.matmul(x, y)<\/code><\/pre>\n<p>Tensorlar\u0131n bir di\u011fer \u00f6nemli \u00f6zelli\u011fi, farkl\u0131 cihazlar (CPU veya GPU) aras\u0131nda kolayca ta\u015f\u0131nabilmeleridir. GPU&#8217;lar, paralel hesaplama yetenekleri sayesinde derin \u00f6\u011frenme operasyonlar\u0131 i\u00e7in \u00e7ok daha h\u0131zl\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\"># Cihaz\u0131 kontrol et\nif torch.cuda.is_available():\n    device = torch.device(\"cuda\")\nelse:\n    device = torch.device(\"cpu\")\n\nprint(f\"Kullan\u0131lan cihaz: {device}\")\n\n<h2>Tensor'\u0131 GPU'ya ta\u015f\u0131<\/h2>\nx_gpu = x.to(device)<\/code><\/pre>\n<p>Bu temel tensor operasyonlar\u0131, PyTorch&#8217;un derin \u00f6\u011frenme modellerini in\u015fa etmenin ve e\u011fitmenin yap\u0131 ta\u015flar\u0131n\u0131 olu\u015fturur. Ancak, bu operasyonlar\u0131n karma\u015f\u0131k bir modelin e\u011fitimi s\u0131ras\u0131nda nas\u0131l bir araya geldi\u011fini ve gradyanlar\u0131n nas\u0131l hesapland\u0131\u011f\u0131n\u0131 anlamak i\u00e7in <strong>hesaplama grafikleri<\/strong> kavram\u0131na ge\u00e7memiz gerekir.<\/p>\n<h3>Hesaplama Grafikleri (Computation Graphs) Nedir?<\/h3>\n<p>Derin \u00f6\u011frenme modelleri, genellikle bir dizi matematiksel i\u015flemin ard\u0131\u015f\u0131k olarak uygulanmas\u0131yla veriyi i\u015fleyen karma\u015f\u0131k fonksiyonlar olarak d\u00fc\u015f\u00fcn\u00fclebilir. \u00d6rne\u011fin, bir sinir a\u011f\u0131, giri\u015f verilerini al\u0131r, katmanlar aras\u0131nda a\u011f\u0131rl\u0131k \u00e7arp\u0131mlar\u0131, aktivasyon fonksiyonlar\u0131 ve toplama i\u015flemleri uygular ve sonunda bir \u00e7\u0131kt\u0131 \u00fcretir. Bu i\u015flemlerin tamam\u0131, bir <strong>hesaplama grafi\u011fi<\/strong> olarak g\u00f6rselle\u015ftirilebilir veya soyutlanabilir.<\/p>\n<p>Bir hesaplama grafi\u011fi, bir dizi matematiksel i\u015flemi temsil eden bir y\u00f6nlendirilmi\u015f \u00e7evrimsiz grafiktir (Directed Acyclic Graph &#8211; DAG). Bu grafikte:<br \/>\n*   <strong>D\u00fc\u011f\u00fcmler (Nodes)<\/strong>: Matematiksel operasyonlar\u0131 (toplama, \u00e7arpma, sin\u00fcs, logaritma vb.) veya verileri (tensorlar) temsil eder.<br \/>\n*   <strong>Kenarlar (Edges)<\/strong>: Verinin bir operasyondan di\u011ferine ak\u0131\u015f\u0131n\u0131 g\u00f6sterir.<\/p>\n<p>\u00d6rne\u011fin, basit bir fonksiyon d\u00fc\u015f\u00fcnelim: $f(x, y) = (x + y) * y$. Bu fonksiyonun hesaplama grafi\u011fi \u015f\u00f6yle olurdu:<\/p>\n<p>1.  Giri\u015fler: $x$, $y$<br \/>\n2.  Operasyon 1: $a = x + y$<br \/>\n3.  Operasyon 2: $b = a * y$<br \/>\n4.  \u00c7\u0131kt\u0131: $b$<\/p>\n<p>Bu grafikte, $x$ ve $y$ ba\u015flang\u0131\u00e7 d\u00fc\u011f\u00fcmleri (veri), $a$ ve $b$ ise hem veri hem de ara sonu\u00e7lar\u0131 temsil eden d\u00fc\u011f\u00fcmlerdir. <code>+<\/code> ve <code>*<\/code> i\u015flemleri ise operasyon d\u00fc\u011f\u00fcmleridir.<\/p>\n<h4>Neden Hesaplama Grafikleri \u00d6nemlidir?<\/h4>\n<p>Hesaplama grafikleri, derin \u00f6\u011frenmede iki temel nedenle kritik \u00f6neme sahiptir:<\/p>\n<p>1.  <strong>Geri Yay\u0131l\u0131m (Backpropagation) Mekanizmas\u0131<\/strong>: Sinir a\u011flar\u0131n\u0131 e\u011fitmek i\u00e7in, modelin \u00e7\u0131kt\u0131s\u0131ndaki hatan\u0131n (kay\u0131p fonksiyonu) modelin a\u011f\u0131rl\u0131klar\u0131na g\u00f6re gradyanlar\u0131n\u0131 hesaplamam\u0131z gerekir. Bu gradyanlar, gradyan ini\u015fi gibi optimizasyon algoritmalar\u0131yla model parametrelerini g\u00fcncellemek i\u00e7in kullan\u0131l\u0131r. Hesaplama grafi\u011fi, zincir kural\u0131n\u0131 uygulayarak bu gradyanlar\u0131n verimli bir \u015fekilde hesaplanmas\u0131n\u0131 sa\u011flar. \u0130leriye do\u011fru yap\u0131lan her operasyon, geriye do\u011fru t\u00fcrev alma i\u00e7in gerekli bilgiyi kaydeder.<br \/>\n2.  <strong>Dinamik ve Statik Grafikler<\/strong>: Derin \u00f6\u011frenme \u00e7er\u00e7eveleri, hesaplama grafiklerini iki ana yakla\u015f\u0131mla ele al\u0131r:<br \/>\n    *   <strong>Statik Grafikler (\u00d6rn: TensorFlow 1.x)<\/strong>: Modelin yap\u0131s\u0131 \u00f6nce tamamen tan\u0131mlan\u0131r ve bir grafik olu\u015fturulur. Daha sonra bu grafik \u00fczerinde veri ak\u0131\u015f\u0131 sa\u011flan\u0131r. Bu yakla\u015f\u0131m, optimizasyonlar ve da\u011f\u0131t\u0131k e\u011fitim i\u00e7in avantajl\u0131 olabilir ancak hata ay\u0131klamay\u0131 zorla\u015ft\u0131rabilir ve model yap\u0131s\u0131n\u0131 \u00e7al\u0131\u015fma zaman\u0131nda de\u011fi\u015ftirmeyi k\u0131s\u0131tlar.<br \/>\n    *   <strong>Dinamik Grafikler (\u00d6rn: PyTorch, TensorFlow 2.x)<\/strong>: Grafikler, kod \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken an\u0131nda olu\u015fturulur. Her operasyon yap\u0131ld\u0131\u011f\u0131nda, grafik dinamik olarak geni\u015fler. Bu &#8220;eager execution&#8221; yakla\u015f\u0131m\u0131, Python&#8217;\u0131n do\u011fal ak\u0131\u015f\u0131na daha yak\u0131n oldu\u011fu i\u00e7in daha esnek, sezgisel ve hata ay\u0131klamas\u0131 daha kolayd\u0131r. PyTorch&#8217;un pop\u00fclerli\u011finin \u00f6nemli nedenlerinden biri de bu dinamik grafik \u00f6zelli\u011fidir.<\/p>\n<p>PyTorch&#8217;ta, her tensor bir operasyonun sonucu oldu\u011funda, o operasyonu i\u015faret eden bir <code>grad_fn<\/code> (gradient function) \u00f6zniteli\u011fi ta\u015f\u0131r. Bu <code>grad_fn<\/code>, geriye do\u011fru ge\u00e7i\u015f s\u0131ras\u0131nda gradyanlar\u0131 hesaplamak i\u00e7in gerekli bilgiyi i\u00e7erir. Bu zincirleme, t\u00fcm hesaplama grafi\u011fini olu\u015fturur ve otomatik diferansiyasyonun temelini atar.<\/p>\n<h3>Otomatik Diferansiyasyon: Derin \u00d6\u011frenmenin Kalbi<\/h3>\n<p>Derin \u00f6\u011frenme modellerini e\u011fitmenin temel amac\u0131, modelin tahminlerini iyile\u015ftirmek i\u00e7in ayarlanabilen parametrelerin (a\u011f\u0131rl\u0131klar ve sapmalar) en uygun de\u011ferlerini bulmakt\u0131r. Bu genellikle bir <strong>kay\u0131p fonksiyonu<\/strong> (loss function) tan\u0131mlayarak yap\u0131l\u0131r; bu fonksiyon, modelin tahminleri ile ger\u00e7ek de\u011ferler aras\u0131ndaki fark\u0131 \u00f6l\u00e7er. Amac\u0131m\u0131z, kay\u0131p fonksiyonunu minimize etmektir. Bunu yapmak i\u00e7in, kay\u0131p fonksiyonunun her bir parametreye g\u00f6re t\u00fcrevini (gradyan\u0131n\u0131) hesaplamam\u0131z ve bu gradyanlar\u0131 kullanarak parametreleri ayarlamam\u0131z gerekir (\u00f6rne\u011fin, gradyan ini\u015fi algoritmas\u0131 ile).<\/p>\n<p>Manuel olarak veya sembolik olarak t\u00fcrev almak, basit fonksiyonlar i\u00e7in m\u00fcmk\u00fcn olsa da, milyonlarca parametreye sahip karma\u015f\u0131k sinir a\u011flar\u0131 i\u00e7in pratik de\u011fildir. \u0130\u015fte burada <strong>otomatik diferansiyasyon (Automatic Differentiation &#8211; AD)<\/strong> devreye girer.<\/p>\n<h4>Diferansiyasyon T\u00fcrleri<\/h4>\n<p>1.  <strong>Sembolik Diferansiyasyon<\/strong>: Bir fonksiyonun sembolik ifadesini al\u0131p, t\u00fcrev alma kurallar\u0131n\u0131 (zincir kural\u0131, \u00e7arp\u0131m kural\u0131 vb.) uygulayarak sembolik t\u00fcrevini bulma i\u015flemidir. \u00d6rne\u011fin, $f(x) = x^2$ i\u00e7in $f'(x) = 2x$. Sembolik t\u00fcrevler do\u011fru ve hassast\u0131r ancak karma\u015f\u0131k ifadeler i\u00e7in \u00e7ok b\u00fcy\u00fck ve y\u00f6netilemez olabilir.<br \/>\n2.  <strong>N\u00fcmerik Diferansiyasyon<\/strong>: Bir fonksiyonun t\u00fcrevini, fonksiyonun k\u00fc\u00e7\u00fck bir farkla iki noktadaki de\u011ferlerini kullanarak yakla\u015f\u0131k olarak hesaplama y\u00f6ntemidir. \u00d6rne\u011fin, $f'(x) \\approx \\frac{f(x + h) &#8211; f(x)}{h}$ form\u00fcl\u00fc kullan\u0131l\u0131r. N\u00fcmerik t\u00fcrevler kolayca uygulanabilir ancak hesaplama a\u00e7\u0131s\u0131ndan pahal\u0131d\u0131r (her parametre i\u00e7in iki fonksiyon de\u011ferlendirmesi gerektirir) ve hassasiyet sorunlar\u0131 (yuvarlama hatalar\u0131) ya\u015fayabilir.<br \/>\n3.  <strong>Otomatik Diferansiyasyon (AD)<\/strong>: Sembolik ve n\u00fcmerik diferansiyasyonun en iyi y\u00f6nlerini birle\u015ftirir. Bir fonksiyonun bir dizi temel aritmetik i\u015flem olarak ifade edilebilece\u011fi ger\u00e7e\u011fine dayan\u0131r. Her temel i\u015flemin t\u00fcrevi bilinir. Zincir kural\u0131n\u0131 tekrarlayarak bu temel t\u00fcrevleri birle\u015ftirerek t\u00fcm fonksiyonun t\u00fcrevini hesaplar. AD, t\u00fcrevleri tam olarak (sembolik gibi) ve verimli bir \u015fekilde (n\u00fcmerik gibi) hesaplar.<\/p>\n<h4>Otomatik Diferansiyasyonun \u00c7al\u0131\u015fma Prensibi: Zincir Kural\u0131<\/h4>\n<p>AD, her karma\u015f\u0131k fonksiyonu bir dizi temel i\u015flemden olu\u015fan bir hesaplama grafi\u011fi olarak ayr\u0131\u015ft\u0131r\u0131r. Ard\u0131ndan, zincir kural\u0131n\u0131 kullanarak bu temel i\u015flemlerin t\u00fcrevlerini birle\u015ftirir. \u0130ki ana modu vard\u0131r:<\/p>\n<p>1.  <strong>\u0130leri Mod (Forward Mode AD)<\/strong>: Hesaplanacak t\u00fcm ara de\u011fi\u015fkenlerin ve bunlar\u0131n t\u00fcrevlerinin giri\u015f de\u011fi\u015fkenlerine g\u00f6re ayn\u0131 anda hesapland\u0131\u011f\u0131 bir yakla\u015f\u0131md\u0131r. Her bir i\u015flem ileriye do\u011fru ilerlerken hem de\u011feri hem de t\u00fcrevi hesaplar. Bu, \u00e7ok say\u0131da \u00e7\u0131kt\u0131 ve az say\u0131da giri\u015f de\u011fi\u015fkeni oldu\u011funda verimlidir. Ancak derin \u00f6\u011frenmede, genellikle tek bir kay\u0131p \u00e7\u0131kt\u0131s\u0131 ve milyonlarca giri\u015f (model parametresi) vard\u0131r, bu y\u00fczden ileri mod bu senaryo i\u00e7in verimsizdir.<br \/>\n2.  <strong>Geri Mod (Reverse Mode AD)<\/strong>: Derin \u00f6\u011frenmede kullan\u0131lan ana AD modudur. Fonksiyonun de\u011ferleri ileriye do\u011fru hesaplan\u0131r ve hesaplama grafi\u011fi olu\u015fturulur. Daha sonra, \u00e7\u0131kt\u0131dan geriye do\u011fru hareket ederek, zincir kural\u0131 kullan\u0131larak her bir d\u00fc\u011f\u00fcm\u00fcn t\u00fcrevleri hesaplan\u0131r. Geri mod, tek bir \u00e7\u0131kt\u0131 ve \u00e7ok say\u0131da giri\u015f de\u011fi\u015fkeni oldu\u011funda inan\u0131lmaz derecede verimlidir, \u00e7\u00fcnk\u00fc t\u00fcm giri\u015flere g\u00f6re gradyanlar\u0131 tek bir geriye do\u011fru ge\u00e7i\u015fle hesaplayabilir.<\/p>\n<p>Derin \u00f6\u011frenme \u00e7er\u00e7eveleri, PyTorch&#8217;un Autograd&#8217;\u0131 dahil, geri mod otomatik diferansiyasyonu kullan\u0131r. Bu, model e\u011fitimi s\u0131ras\u0131nda gradyanlar\u0131n h\u0131zl\u0131 ve do\u011fru bir \u015fekilde hesaplanmas\u0131n\u0131 sa\u011flar, bu da gradyan ini\u015fi gibi optimizasyon algoritmalar\u0131n\u0131n etkinli\u011fini temelden destekler.<\/p>\n<h3>PyTorch&#8217;un Autograd Motoru: Sihrin Arkas\u0131ndaki Mekanizma<\/h3>\n<p>PyTorch&#8217;un otomatik diferansiyasyon motoruna <strong>Autograd<\/strong> denir. Autograd, bir tensor \u00fczerindeki t\u00fcm operasyonlar\u0131 izleyerek dinamik bir hesaplama grafi\u011fi olu\u015fturur. Bu grafik, geriye do\u011fru ge\u00e7i\u015f (backpropagation) s\u0131ras\u0131nda gradyanlar\u0131 hesaplamak i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h4><code>torch.Tensor<\/code> ve <code>requires_grad<\/code><\/h4>\n<p>Autograd&#8217;\u0131n kalbinde <code>torch.Tensor<\/code> nesnesi ve onun <code>requires_grad<\/code> \u00f6zniteli\u011fi bulunur.<br \/>\n*   <code>requires_grad=True<\/code>: Bu tensor \u00fczerinde yap\u0131lan t\u00fcm operasyonlar\u0131n Autograd taraf\u0131ndan izlenece\u011fi ve gradyanlar\u0131n hesaplama grafi\u011fine dahil edilece\u011fi anlam\u0131na gelir. Genellikle modelin e\u011fitilebilir parametreleri (a\u011f\u0131rl\u0131klar, sapmalar) i\u00e7in bu de\u011fer <code>True<\/code> olarak ayarlan\u0131r.<br \/>\n*   <code>requires_grad=False<\/code>: Bu tensor \u00fczerinde yap\u0131lan operasyonlar izlenmez ve gradyanlar\u0131 hesaplama grafi\u011fine dahil edilmez. Genellikle giri\u015f verileri veya sabit parametreler i\u00e7in kullan\u0131l\u0131r. Varsay\u0131lan de\u011feri <code>False<\/code>&#8216;dur.<\/p>\n<p>Bir tensor&#8217;\u0131 <code>requires_grad=True<\/code> ile olu\u015fturdu\u011funuzda veya mevcut bir tensor&#8217;\u0131n <code>requires_grad<\/code> de\u011ferini ayarlad\u0131\u011f\u0131n\u0131zda, PyTorch bu tensor&#8217;\u0131 i\u00e7eren t\u00fcm operasyonlar\u0131 kaydetmeye ba\u015flar.<\/p>\n<pre><code class=\"language-python\">import torch\n\n<h2>Gradyan takibi gerektiren bir tensor<\/h2>\nx = torch.tensor([2.0, 3.0], requires_grad=True)\nprint(x.requires_grad) # \u00c7\u0131kt\u0131: True\n\n<h2>Gradyan takibi gerektirmeyen bir tensor<\/h2>\ny = torch.tensor([4.0, 5.0])\nprint(y.requires_grad) # \u00c7\u0131kt\u0131: False\n\n<h2>Bir operasyon sonucu olu\u015fan tensor<\/h2>\nz = x + y\nprint(z.requires_grad) # \u00c7\u0131kt\u0131: True (\u00e7\u00fcnk\u00fc x require_grad=True)\n\n<h2>Sadece require_grad=False olan tensorlar kullan\u0131ld\u0131\u011f\u0131nda sonu\u00e7 da False olur<\/h2>\na = torch.tensor([1.0])\nb = torch.tensor([2.0])\nc = a * b\nprint(c.requires_grad) # \u00c7\u0131kt\u0131: False<\/code><\/pre>\n<h4>Hesaplama Grafi\u011finin Olu\u015fumu: <code>grad_fn<\/code><\/h4>\n<p>Bir tensor <code>requires_grad=True<\/code> oldu\u011funda ve \u00fczerinde bir operasyon yap\u0131ld\u0131\u011f\u0131nda, sonu\u00e7 olarak elde edilen tensor&#8217;\u0131n bir <code>grad_fn<\/code> \u00f6zniteli\u011fi olur. Bu <code>grad_fn<\/code>, o tensor&#8217;\u0131 olu\u015fturan operasyonu (\u00f6rne\u011fin, <code>AddBackward0<\/code> for addition, <code>MulBackward0<\/code> for multiplication) ve geriye do\u011fru ge\u00e7i\u015f s\u0131ras\u0131nda gradyanlar\u0131 nas\u0131l hesaplayaca\u011f\u0131n\u0131 tutar. Bu <code>grad_fn<\/code>&#8216;ler zincirleme yaparak t\u00fcm hesaplama grafi\u011fini olu\u015fturur.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0], requires_grad=True)\ny = x * 2\nz = y + 1\n\nprint(x.grad_fn) # \u00c7\u0131kt\u0131: None (\u00e7\u00fcnk\u00fc x bir giri\u015f tensorudur, bir operasyonun sonucu de\u011fildir)\nprint(y.grad_fn) # \u00c7\u0131kt\u0131: <MulBackward0 object at ...>\nprint(z.grad_fn) # \u00c7\u0131kt\u0131: <AddBackward0 object at ...><\/code><\/pre>\n<p>Bu dinamik yap\u0131, PyTorch&#8217;un esnekli\u011fini sa\u011flar. Modelin kontrol ak\u0131\u015f\u0131 (ko\u015fullu ifadeler, d\u00f6ng\u00fcler) Python kodunda oldu\u011fu gibi kalabilir ve Autograd, bu ak\u0131\u015f\u0131 takip ederek grafi\u011fi an\u0131nda in\u015fa eder.<\/p>\n<h4>Gradyanlar\u0131n Hesaplanmas\u0131: <code>.backward()<\/code> Metodu<\/h4>\n<p>Hesaplama grafi\u011fi olu\u015ftuktan sonra, geriye do\u011fru ge\u00e7i\u015fi ba\u015flatmak ve gradyanlar\u0131 hesaplamak i\u00e7in bir tensor \u00fczerinde <code>.backward()<\/code> metodu \u00e7a\u011fr\u0131l\u0131r.<\/p>\n<p>*   <strong>Skaler \u00c7\u0131kt\u0131<\/strong>: E\u011fer <code>backward()<\/code> metodu bir skaler tensor (yani tek bir eleman\u0131 olan bir tensor) \u00fczerinde \u00e7a\u011fr\u0131l\u0131rsa, PyTorch otomatik olarak o skalerin, <code>requires_grad=True<\/code> olan t\u00fcm tensorlara g\u00f6re gradyanlar\u0131n\u0131 hesaplar.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0], requires_grad=True)\n    y = x * 2\n    z = y<em><\/em>2\n    z.backward() # z bir skalerdir\n    print(x.grad) # \u00c7\u0131kt\u0131: tensor([8.]) (\u2202z\/\u2202x = \u2202(4x^2)\/\u2202x = 8x. x=2 i\u00e7in 16 de\u011fil, z = (2x)^2 = 4x^2, \u2202z\/\u2202x = 8x, x=2 i\u00e7in 16. Hata yapt\u0131m. d\u00fczeltiyorum.)\n    # z = (x*2)^2 = 4x^2. \u2202z\/\u2202x = 8x. x=2 ise \u2202z\/\u2202x = 16.0\n    # Tekrar kontrol edelim:\n    # x = 2.0\n    # y = 4.0\n    # z = 16.0\n    # \u2202z\/\u2202y = 2y = 8.0\n    # \u2202y\/\u2202x = 2.0\n    # \u2202z\/\u2202x = \u2202z\/\u2202y <em> \u2202y\/\u2202x = 8.0 <\/em> 2.0 = 16.0\n    # Do\u011fru \u00e7\u0131kt\u0131: tensor([16.])<\/code><\/pre>\n<p>*   <strong>Vekt\u00f6r \u00c7\u0131kt\u0131<\/strong>: E\u011fer <code>backward()<\/code> metodu bir vekt\u00f6r veya matris gibi skaler olmayan bir tensor \u00fczerinde \u00e7a\u011fr\u0131l\u0131rsa, <code>gradient<\/code> arg\u00fcman\u0131 sa\u011flanmal\u0131d\u0131r. Bu <code>gradient<\/code> arg\u00fcman\u0131, gradyanlar\u0131n hesaplanaca\u011f\u0131 bir vekt\u00f6r-Jakobiyen \u00e7arp\u0131m\u0131n\u0131 temsil eder. Genellikle, bir kay\u0131p fonksiyonunun ortalamas\u0131 veya toplam\u0131 al\u0131narak skaler bir de\u011fer elde edilir ve sonra <code>.backward()<\/code> \u00e7a\u011fr\u0131l\u0131r. Bu durumda, <code>gradient<\/code> arg\u00fcman\u0131na gerek kalmaz. Ancak do\u011frudan bir vekt\u00f6r \u00fczerinde <code>backward()<\/code> \u00e7a\u011fr\u0131l\u0131rsa, <code>gradient<\/code> arg\u00fcman\u0131, \u00e7\u0131kt\u0131 tensor&#8217;\u0131 ile ayn\u0131 boyutta olmal\u0131d\u0131r ve bir &#8220;a\u011f\u0131rl\u0131k vekt\u00f6r\u00fc&#8221; g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0, 3.0], requires_grad=True)\n    y = x * 2\n    # y bir vekt\u00f6rd\u00fcr, bu y\u00fczden backward \u00e7a\u011fr\u0131l\u0131rken gradient arg\u00fcman\u0131 gerekir\n    # \u00d6rne\u011fin, y'nin her eleman\u0131na 1 a\u011f\u0131rl\u0131k vererek toplam gradyan\u0131 hesaplayal\u0131m\n    gradient_vector = torch.tensor([1.0, 1.0])\n    y.backward(gradient=gradient_vector)\n    print(x.grad) # \u00c7\u0131kt\u0131: tensor([2., 2.])\n    # A\u00e7\u0131klama: y_0 = x_0 <em> 2, y_1 = x_1 <\/em> 2\n    # L = 1<em>y_0 + 1<\/em>y_1\n    # \u2202L\/\u2202x_0 = \u2202(y_0)\/\u2202x_0 <em> 1 = 2 <\/em> 1 = 2\n    # \u2202L\/\u2202x_1 = \u2202(y_1)\/\u2202x_1 <em> 1 = 2 <\/em> 1 = 2<\/code><\/pre>\n<h4><code>.grad<\/code> \u00d6zniteli\u011fi: Gradyanlar\u0131n Depoland\u0131\u011f\u0131 Yer<\/h4>\n<p><code>.backward()<\/code> \u00e7a\u011fr\u0131ld\u0131ktan sonra, <code>requires_grad=True<\/code> olan tensor&#8217;lar\u0131n <code>.grad<\/code> \u00f6zniteli\u011fi, o tensor&#8217;a g\u00f6re hesaplanan gradyanlar\u0131 i\u00e7erir.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0], requires_grad=True)\ny = x <em> x <\/em> 3\nz = y + 1\nz.backward()\nprint(x.grad) # \u00c7\u0131kt\u0131: tensor([12.])\n<h2>A\u00e7\u0131klama: z = 3x^2 + 1. \u2202z\/\u2202x = 6x. x=2 ise \u2202z\/\u2202x = 12.0<\/code><\/pre>\n<\/h2>\n<p><strong>\u00d6nemli Not<\/strong>: Gradyanlar, <code>.grad<\/code> \u00f6zniteli\u011fine birikir (akum\u00fcle olur). Bu, ayn\u0131 hesaplama grafi\u011fi \u00fczerinde birden fazla <code>.backward()<\/code> \u00e7a\u011fr\u0131s\u0131 yap\u0131l\u0131rsa, gradyanlar\u0131n toplanaca\u011f\u0131 anlam\u0131na gelir. Bu nedenle, her optimizasyon ad\u0131m\u0131nda gradyanlar\u0131 s\u0131f\u0131rlamak \u00f6nemlidir.<\/p>\n<h4>Gradyanlar\u0131 S\u0131f\u0131rlama: <code>optimizer.zero_grad()<\/code><\/h4>\n<p>Sinir a\u011f\u0131 e\u011fitim d\u00f6ng\u00fclerinde, her e\u011fitim ad\u0131m\u0131ndan \u00f6nce gradyanlar\u0131 s\u0131f\u0131rlamak kritik bir ad\u0131md\u0131r. Genellikle bu, bir optimizasyon nesnesi (\u00f6rne\u011fin, <code>torch.optim.SGD<\/code> veya <code>torch.optim.Adam<\/code>) arac\u0131l\u0131\u011f\u0131yla <code>optimizer.zero_grad()<\/code> \u00e7a\u011fr\u0131s\u0131yla yap\u0131l\u0131r.<\/p>\n<pre><code class=\"language-python\"># \u00d6rnek bir e\u011fitim d\u00f6ng\u00fcs\u00fc par\u00e7as\u0131\n<h2>optimizer = torch.optim.SGD([model_parametreleri], lr=0.01)<\/h2>\n\n<h2>Her e\u011fitim ad\u0131m\u0131nda:<\/h2>\n<h2>1. Gradyanlar\u0131 s\u0131f\u0131rla<\/h2>\n<h2>optimizer.zero_grad()<\/h2>\n\n<h2>2. \u0130leri ge\u00e7i\u015f (forward pass)<\/h2>\n<h2>output = model(input)<\/h2>\n<h2>loss = criterion(output, target)<\/h2>\n\n<h2>3. Geri ge\u00e7i\u015f (backward pass)<\/h2>\n<h2>loss.backward()<\/h2>\n\n<h2>4. Parametreleri g\u00fcncelle<\/h2>\n<h2>optimizer.step()<\/code><\/pre>\n<\/h2>\n<p>E\u011fer gradyanlar s\u0131f\u0131rlanmazsa, bir sonraki <code>loss.backward()<\/code> \u00e7a\u011fr\u0131s\u0131nda hesaplanan yeni gradyanlar, \u00f6nceki gradyanlar\u0131n \u00fczerine eklenir. Bu da yanl\u0131\u015f parametre g\u00fcncellemelerine yol a\u00e7ar.<\/p>\n<h4>Gradyan Takibini Ge\u00e7ici Olarak Devre D\u0131\u015f\u0131 B\u0131rakma: <code>torch.no_grad()<\/code> ve <code>detach()<\/code><\/h4>\n<p>Baz\u0131 durumlarda, gradyan takibini ge\u00e7ici olarak devre d\u0131\u015f\u0131 b\u0131rakmak isteyebilirsiniz. Bunun ana nedenleri \u015funlard\u0131r:<\/p>\n<p>1.  <strong>\u00c7\u0131kar\u0131m (Inference) Modu<\/strong>: Model e\u011fitimi tamamland\u0131ktan sonra, modeli sadece tahmin yapmak i\u00e7in kullan\u0131rken gradyan hesaplamalar\u0131na ihtiyac\u0131m\u0131z olmaz. Gradyan takibini devre d\u0131\u015f\u0131 b\u0131rakmak, bellek t\u00fcketimini azalt\u0131r ve hesaplama h\u0131z\u0131n\u0131 art\u0131r\u0131r.<br \/>\n2.  <strong>Model De\u011ferlendirme<\/strong>: Do\u011frulama veya test setleri \u00fczerinde modelin performans\u0131n\u0131 de\u011ferlendirirken de gradyan takibine gerek yoktur.<\/p>\n<p><code>torch.no_grad()<\/code> bir ba\u011flam y\u00f6neticisi (context manager) olarak kullan\u0131l\u0131r:<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0], requires_grad=True)\ny = x * 2\n\nwith torch.no_grad():\n    z = y * 3\n    print(z.requires_grad) # \u00c7\u0131kt\u0131: False\n\nprint(y.requires_grad) # \u00c7\u0131kt\u0131: True (\u00e7\u00fcnk\u00fc y ba\u011flam\u0131n d\u0131\u015f\u0131nda olu\u015fturuldu)<\/code><\/pre>\n<p><code>detach()<\/code> metodu ise, bir tensor&#8217;\u0131 hesaplama grafi\u011finden ay\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu, yeni tensor&#8217;\u0131n <code>requires_grad=False<\/code> olmas\u0131n\u0131 sa\u011flar ve orijinal tensor&#8217;dan geriye do\u011fru ge\u00e7i\u015fle ili\u015fkisini keser.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor([2.0], requires_grad=True)\ny = x * 2\ny_detached = y.detach()\n\nprint(y.requires_grad)         # \u00c7\u0131kt\u0131: True\nprint(y_detached.requires_grad) # \u00c7\u0131kt\u0131: False\n\n<h2>y_detached \u00fczerinde yap\u0131lan operasyonlar gradyanlar\u0131 etkilemez<\/h2>\nz = y_detached * 3\n<h2>z.backward() \u00e7a\u011fr\u0131l\u0131rsa hata verir \u00e7\u00fcnk\u00fc z'nin grad_fn'si yoktur.<\/h2>\n<h2>y.backward() \u00e7a\u011fr\u0131l\u0131rsa, y_detached'\u0131n grafikten ayr\u0131lmas\u0131 bir sorun te\u015fkil etmez.<\/code><\/pre>\n<\/h2>\n<p><code>detach()<\/code> genellikle, bir tensor&#8217;\u0131n de\u011ferini kullanmak ancak onun gradyan ak\u0131\u015f\u0131n\u0131 durdurmak istedi\u011finizde kullan\u0131l\u0131r. \u00d6rne\u011fin, bir modelin \u00e7\u0131kt\u0131s\u0131n\u0131 ba\u015fka bir modelin girdisi olarak kullan\u0131rken, ilk modelin gradyanlar\u0131n\u0131n ikinci modele akmas\u0131n\u0131 istemedi\u011finizde faydal\u0131 olabilir.<\/p>\n<h3>Autograd ile Basit Bir \u00d6rnek<\/h3>\n<p>\u015eimdi, Autograd&#8217;\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 g\u00f6steren basit bir \u00f6rnek \u00fczerinden ge\u00e7elim. $f(x) = (x^2 + 3x + 2)$ fonksiyonunun $x=2$ noktas\u0131ndaki t\u00fcrevini hesaplayal\u0131m. T\u00fcrevinin $f'(x) = 2x + 3$ oldu\u011funu biliyoruz. $x=2$ i\u00e7in $f'(2) = 2(2) + 3 = 7$ olmal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\">import torch\n\n<h2>1. Gradyan takibi gerektiren bir giri\u015f tensoru tan\u0131mla<\/h2>\nx = torch.tensor(2.0, requires_grad=True)\nprint(f\"Ba\u015flang\u0131\u00e7 x: {x}, requires_grad: {x.requires_grad}\")\n\n<h2>2. Hesaplama grafi\u011fini olu\u015fturacak operasyonlar\u0131 uygula<\/h2>\ny = x<em><\/em>2        # y = x^2\nprint(f\"y = x^2: {y}, grad_fn: {y.grad_fn}\")\n\nz = 3 * x       # z = 3x\nprint(f\"z = 3x: {z}, grad_fn: {z.grad_fn}\")\n\nw = y + z + 2   # w = y + z + 2 = x^2 + 3x + 2\nprint(f\"w = y + z + 2: {w}, grad_fn: {w.grad_fn}\")\n\n<h2>3. Geriye do\u011fru ge\u00e7i\u015fi ba\u015flat (backward pass)<\/h2>\n<h2>w bir skaler oldu\u011fu i\u00e7in gradient arg\u00fcman\u0131na gerek yok<\/h2>\nw.backward()\n\n<h2>4. Hesaplanan gradyan\u0131 kontrol et<\/h2>\nprint(f\"x'in gradyan\u0131 (\u2202w\/\u2202x): {x.grad}\")\n<h2>Beklenen \u00c7\u0131kt\u0131: tensor(7.)<\/code><\/pre>\n<\/h2>\n<p>Bu \u00f6rnek, Autograd&#8217;\u0131n karma\u015f\u0131k bir fonksiyonun t\u00fcrevini nas\u0131l otomatik olarak ve do\u011fru bir \u015fekilde hesaplad\u0131\u011f\u0131n\u0131 a\u00e7\u0131k\u00e7a g\u00f6stermektedir. Her ad\u0131mda <code>grad_fn<\/code> \u00f6zniteli\u011fi, Autograd&#8217;\u0131n hesaplama grafi\u011fini nas\u0131l dinamik olarak olu\u015fturdu\u011funu g\u00f6zlemlemenizi sa\u011flar.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>PyTorch, derin \u00f6\u011frenme ara\u015ft\u0131rmalar\u0131 ve uygulamalar\u0131 i\u00e7in g\u00fc\u00e7l\u00fc, esnek ve sezgisel bir \u00e7er\u00e7eve sunar. Bu makalede, PyTorch&#8217;un temel yap\u0131 ta\u015f\u0131 olan tensorlardan ba\u015flayarak, derin \u00f6\u011frenmenin kalbi olan hesaplama grafikleri ve otomatik diferansiyasyon kavramlar\u0131na de\u011findik. \u00d6zellikle, PyTorch&#8217;un Autograd motorunun nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, <code>requires_grad<\/code>, <code>grad_fn<\/code>, <code>.backward()<\/code>, <code>.grad<\/code>, <code>optimizer.zero_grad()<\/code> ve <code>torch.no_grad()<\/code> gibi anahtar mekanizmalar\u0131yla birlikte detayl\u0131 bir \u015fekilde inceledik.<\/p>\n<p>Autograd, PyTorch&#8217;u di\u011fer k\u00fct\u00fcphanelerden ay\u0131ran ve derin \u00f6\u011frenme modellerini e\u011fitme s\u00fcrecini inan\u0131lmaz derecede kolayla\u015ft\u0131ran sihirli bir motordur. Dinamik hesaplama grafi\u011fi sayesinde, Python&#8217;\u0131n do\u011fal programlama ak\u0131\u015f\u0131n\u0131 korurken karma\u015f\u0131k model mimarilerini kolayca tan\u0131mlayabilir ve hata ay\u0131klayabilirsiniz. Bu, ara\u015ft\u0131rmac\u0131lar\u0131n yeni fikirleri h\u0131zla prototiplemesine ve geli\u015ftirmesine olanak tan\u0131r.<\/p>\n<p>PyTorch&#8217;u ve Autograd&#8217;\u0131 anlamak, sadece kod yazmakla kalmay\u0131p, derin \u00f6\u011frenme algoritmalar\u0131n\u0131n alt\u0131nda yatan matematiksel prensipleri de kavramak anlam\u0131na gelir. Bu bilgi, model performans\u0131n\u0131 optimize etmek, hata ay\u0131klamak ve daha sofistike derin \u00f6\u011frenme \u00e7\u00f6z\u00fcmleri geli\u015ftirmek i\u00e7in vazge\u00e7ilmezdir. PyTorch ekosistemi s\u00fcrekli geli\u015fmekte olup, bu temel kavramlar\u0131 sa\u011flam bir \u015fekilde anlamak, gelecekteki derin \u00f6\u011frenme yolculu\u011funuzda size b\u00fcy\u00fck avantaj sa\u011flayacakt\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd\nDerin \u00f6\u011frenme, yapay zeka alan\u0131nda son y\u0131llar\u0131n en d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc tekno","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31273","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd\" \/>\n<meta property=\"og:description\" content=\"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd Derin \u00f6\u011frenme, yapay zeka alan\u0131nda son y\u0131llar\u0131n en d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc tekno\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-08T01:40:52+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd\",\"datePublished\":\"2025-10-08T01:40:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\"},\"wordCount\":2616,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\",\"name\":\"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-08T01:40:52+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/","og_locale":"tr_TR","og_type":"article","og_title":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd","og_description":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd Derin \u00f6\u011frenme, yapay zeka alan\u0131nda son y\u0131llar\u0131n en d\u00f6n\u00fc\u015ft\u00fcr\u00fcc\u00fc tekno","og_url":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-08T01:40:52+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"17 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd","datePublished":"2025-10-08T01:40:52+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/"},"wordCount":2616,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/","url":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/","name":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-08T01:40:52+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/pytorch-101-grafikleri-anlamak-otomatik-diferansiyasyon-ve-autograd\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PyTorch 101: Grafikleri Anlamak, Otomatik Diferansiyasyon ve Autograd"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31273"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31273\/revisions"}],"predecessor-version":[{"id":31274,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31273\/revisions\/31274"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}