{"id":32724,"date":"2025-10-25T06:41:04","date_gmt":"2025-10-25T03:41:04","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=32724"},"modified":"2025-10-25T06:41:04","modified_gmt":"2025-10-25T03:41:04","slug":"pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/","title":{"rendered":"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek"},"content":{"rendered":"<h2>PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek<\/h2>\n<p><body><\/p>\n<h3>Giri\u015f<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, yapay zeka (YZ) ve onun alt dallar\u0131 olan makine \u00f6\u011frenimi (ML) ve derin \u00f6\u011frenme (DL), hayat\u0131m\u0131z\u0131n bir\u00e7ok alan\u0131nda devrim niteli\u011finde de\u011fi\u015fiklikler yaratmaktad\u0131r. G\u00f6r\u00fcnt\u00fc tan\u0131ma, do\u011fal dil i\u015fleme, otonom ara\u00e7lar ve ki\u015fiselle\u015ftirilmi\u015f \u00f6neri sistemleri gibi uygulamalar, derin \u00f6\u011frenmenin g\u00fcc\u00fcyle m\u00fcmk\u00fcn hale gelmi\u015ftir. Derin \u00f6\u011frenme, insan beyninin \u00e7al\u0131\u015fma prensiplerinden esinlenerek tasarlanm\u0131\u015f yapay sinir a\u011flar\u0131n\u0131 (YSA) kullanarak karma\u015f\u0131k veri desenlerini \u00f6\u011frenme yetene\u011fine sahiptir.<\/p>\n<p>Bu alanda geli\u015ftirilen bir\u00e7ok g\u00fc\u00e7l\u00fc k\u00fct\u00fcphane aras\u0131nda PyTorch, esnekli\u011fi, Pythonic yap\u0131s\u0131 ve dinamik hesaplama grafikleri sayesinde ara\u015ft\u0131rmac\u0131lar ve geli\u015ftiriciler aras\u0131nda pop\u00fclerli\u011fini giderek art\u0131rmaktad\u0131r. Facebook AI taraf\u0131ndan geli\u015ftirilen PyTorch, \u00f6zellikle prototipleme ve ara\u015ft\u0131rmadan \u00fcretime ge\u00e7i\u015f s\u00fcre\u00e7lerinde sundu\u011fu kolayl\u0131klarla \u00f6ne \u00e7\u0131kar.<\/p>\n<p>Bu makalenin amac\u0131, PyTorch&#8217;u kullanarak el yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131yabilen basit bir yapay sinir a\u011f\u0131 in\u015fa etme s\u00fcrecini ad\u0131m ad\u0131m a\u00e7\u0131klamakt\u0131r. Bu yolculukta, derin \u00f6\u011frenmenin temel kavramlar\u0131n\u0131 PyTorch&#8217;un pratik uygulamalar\u0131yla birle\u015ftirerek, okuyucunun hem teorik bilgi edinmesini hem de kendi derin \u00f6\u011frenme modellerini olu\u015fturma becerisi kazanmas\u0131n\u0131 sa\u011flamay\u0131 hedefliyoruz. MNIST veri k\u00fcmesi, derin \u00f6\u011frenme d\u00fcnyas\u0131n\u0131n &#8220;Merhaba D\u00fcnya&#8221; \u00f6rne\u011fi olarak kabul edilir ve bu alana yeni ba\u015flayanlar i\u00e7in m\u00fckemmel bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. Makale boyunca PyTorch&#8217;un temel bile\u015fenlerini, veri haz\u0131rl\u0131\u011f\u0131n\u0131, model mimarisini, e\u011fitim s\u00fcrecini ve model de\u011ferlendirmesini detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<h3>PyTorch Nedir?<\/h3>\n<p>PyTorch, a\u00e7\u0131k kaynakl\u0131 bir makine \u00f6\u011frenimi k\u00fct\u00fcphanesi olup, \u00f6zellikle derin \u00f6\u011frenme uygulamalar\u0131 i\u00e7in tasarlanm\u0131\u015ft\u0131r. NumPy&#8217;ye benzer bir yap\u0131ya sahip tensor hesaplamalar\u0131 sunarken, ayn\u0131 zamanda GPU h\u0131zland\u0131rmas\u0131n\u0131 da destekler. Bu, b\u00fcy\u00fck veri k\u00fcmeleri ve karma\u015f\u0131k modellerle \u00e7al\u0131\u015f\u0131rken performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. PyTorch&#8217;un temel \u00f6zelliklerini ve bile\u015fenlerini a\u015fa\u011f\u0131da inceleyelim:<\/p>\n<h4>Tensor&#8217;lar: PyTorch&#8217;un Temel Yap\u0131 Ta\u015f\u0131<\/h4>\n<p>PyTorch&#8217;taki en temel veri yap\u0131s\u0131 <code>torch.Tensor<\/code>&#8216;d\u0131r. Tensor&#8217;lar, \u00e7ok boyutlu dizilerdir ve NumPy dizilerine benzerler, ancak GPU \u00fczerinde \u00e7al\u0131\u015fabilme yetenekleri sayesinde derin \u00f6\u011frenme operasyonlar\u0131 i\u00e7in \u00e7ok daha verimlidirler. Tensor&#8217;lar, modelin giri\u015f verilerini, \u00e7\u0131kt\u0131lar\u0131n\u0131, a\u011f\u0131rl\u0131klar\u0131n\u0131 ve gradyanlar\u0131n\u0131 temsil etmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p>Bir tensor olu\u015fturmak olduk\u00e7a basittir:<\/p>\n<pre><code class=\"language-python\">import torch\n\n<h2>Skaler (0 boyutlu tensor)<\/h2>\nx = torch.tensor(42)\n\n<h2>Vekt\u00f6r (1 boyutlu tensor)<\/h2>\ny = torch.tensor([1, 2, 3])\n\n<h2>Matris (2 boyutlu tensor)<\/h2>\nz = torch.tensor([[1, 2], [3, 4]])\n\n<h2>Boyutlar\u0131 ve veri tipini kontrol etme<\/h2>\nprint(x.shape, x.dtype) # torch.Size([]) torch.int64\nprint(y.shape, y.dtype) # torch.Size([3]) torch.int64\nprint(z.shape, z.dtype) # torch.Size([2, 2]) torch.int64<\/code><\/pre>\n<p>Tensor&#8217;lar farkl\u0131 veri tiplerini (float, int, bool vb.) destekler ve CPU ile GPU aras\u0131nda kolayca ta\u015f\u0131nabilirler (<code>.to('cuda')<\/code> veya <code>.to('cpu')<\/code>).<\/p>\n<h4>Otomatik T\u00fcrevleme (Autograd): Geri Yay\u0131l\u0131m\u0131n Kolay Yolu<\/h4>\n<p>Derin \u00f6\u011frenmede, modelin a\u011f\u0131rl\u0131klar\u0131n\u0131 optimize etmek i\u00e7in kay\u0131p fonksiyonunun parametrelere g\u00f6re gradyanlar\u0131n\u0131 (t\u00fcrevlerini) hesaplamam\u0131z gerekir. Bu s\u00fcre\u00e7, geri yay\u0131l\u0131m (backpropagation) olarak bilinir ve manuel olarak yapmak olduk\u00e7a karma\u015f\u0131k ve hataya a\u00e7\u0131k olabilir. PyTorch&#8217;un <code>torch.autograd<\/code> mod\u00fcl\u00fc, bu s\u00fcreci otomatikle\u015ftirir.<\/p>\n<p>Bir tensor \u00fczerinde <code>requires_grad=True<\/code> olarak ayarland\u0131\u011f\u0131nda, PyTorch bu tensor \u00fczerinde yap\u0131lan t\u00fcm operasyonlar\u0131 izlemeye ba\u015flar. Bir hesaplama tamamland\u0131\u011f\u0131nda ve <code>loss.backward()<\/code> \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda, PyTorch hesaplama grafi\u011fini geriye do\u011fru izleyerek t\u00fcm ilgili tensor&#8217;lar i\u00e7in gradyanlar\u0131 otomatik olarak hesaplar ve bunlar\u0131 <code>.grad<\/code> \u00f6zniteli\u011finde saklar.<\/p>\n<pre><code class=\"language-python\">x = torch.tensor(2.0, requires_grad=True)\ny = x<em><\/em>2\nz = y + 3\nloss = z.sum()\n\nloss.backward() # Gradyanlar\u0131 hesapla\nprint(x.grad) # \u00c7\u0131kt\u0131: tensor(4.) (z = x^2 + 3, dz\/dx = 2x, x=2 i\u00e7in 4)<\/code><\/pre>\n<p>Bu mekanizma, model e\u011fitiminde kritik bir rol oynar ve geli\u015ftiricilerin gradyan hesaplama karma\u015f\u0131kl\u0131\u011f\u0131yla u\u011fra\u015fmak yerine model mimarisine odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Mod\u00fcller (<code>torch.nn<\/code>): Yapay Sinir A\u011flar\u0131n\u0131n Yap\u0131 Ta\u015flar\u0131<\/h4>\n<p><code>torch.nn<\/code> mod\u00fcl\u00fc, yapay sinir a\u011flar\u0131 olu\u015fturmak i\u00e7in gerekli t\u00fcm yap\u0131 ta\u015flar\u0131n\u0131 (katmanlar, aktivasyon fonksiyonlar\u0131, kay\u0131p fonksiyonlar\u0131 vb.) sa\u011flar. Bir derin \u00f6\u011frenme modeli, genellikle <code>nn.Module<\/code> s\u0131n\u0131f\u0131ndan t\u00fcretilerek tan\u0131mlan\u0131r. Bu s\u0131n\u0131f, modelin katmanlar\u0131n\u0131 tan\u0131mlayaca\u011f\u0131m\u0131z <code>__init__<\/code> metodunu ve verinin a\u011f \u00fczerinden nas\u0131l akaca\u011f\u0131n\u0131 belirleyece\u011fimiz <code>forward<\/code> metodunu i\u00e7erir.<\/p>\n<p>*   <strong>Katmanlar:<\/strong> <code>nn.Linear<\/code> (tam ba\u011flant\u0131l\u0131 katman), <code>nn.Conv2d<\/code> (evri\u015fimsel katman), <code>nn.MaxPool2d<\/code> (maksimum havuzlama katman\u0131) gibi bir\u00e7ok farkl\u0131 katman tipi bulunur.<br \/>\n*   <strong>Aktivasyon Fonksiyonlar\u0131:<\/strong> <code>nn.ReLU<\/code>, <code>nn.Sigmoid<\/code>, <code>nn.Tanh<\/code>, <code>nn.Softmax<\/code> gibi non-lineer aktivasyon fonksiyonlar\u0131, a\u011f\u0131n karma\u015f\u0131k ili\u015fkileri \u00f6\u011frenmesini sa\u011flar.<br \/>\n*   <strong>Kay\u0131p Fonksiyonlar\u0131:<\/strong> <code>nn.CrossEntropyLoss<\/code> (s\u0131n\u0131fland\u0131rma i\u00e7in), <code>nn.MSELoss<\/code> (regresyon i\u00e7in) gibi kay\u0131p fonksiyonlar\u0131, modelin tahminleri ile ger\u00e7ek etiketler aras\u0131ndaki fark\u0131 \u00f6l\u00e7er.<\/p>\n<h4>Optimizat\u00f6rler (<code>torch.optim<\/code>): Model Parametrelerini G\u00fcncelleme<\/h4>\n<p><code>torch.optim<\/code> mod\u00fcl\u00fc, modelin \u00f6\u011frenme s\u00fcrecinde a\u011f\u0131rl\u0131klar\u0131n\u0131 ve bias&#8217;lar\u0131n\u0131 g\u00fcncellemek i\u00e7in kullan\u0131lan optimizasyon algoritmalar\u0131n\u0131 i\u00e7erir. En yayg\u0131n optimizat\u00f6rler aras\u0131nda <code>optim.SGD<\/code> (Stokastik Gradyan \u0130ni\u015fi), <code>optim.Adam<\/code>, <code>optim.Adagrad<\/code> ve <code>optim.RMSprop<\/code> bulunur. Bir optimizat\u00f6r, modelin parametrelerini ve bir \u00f6\u011frenme oran\u0131n\u0131 al\u0131r. E\u011fitim d\u00f6ng\u00fcs\u00fcnde, gradyanlar hesapland\u0131ktan sonra <code>optimizer.step()<\/code> \u00e7a\u011fr\u0131s\u0131 ile parametreler g\u00fcncellenir.<\/p>\n<p>Bu temel bile\u015fenler, PyTorch&#8217;u derin \u00f6\u011frenme modelleri olu\u015fturmak i\u00e7in son derece g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7 haline getirir. \u015eimdi bu bile\u015fenleri kullanarak el yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131ma problemine odaklanal\u0131m.<\/p>\n<h3>MNIST Veri K\u00fcmesi<\/h3>\n<p>MNIST (Modified National Institute of Standards and Technology) veri k\u00fcmesi, derin \u00f6\u011frenme ve g\u00f6r\u00fcnt\u00fc s\u0131n\u0131fland\u0131rma alan\u0131nda en yayg\u0131n kullan\u0131lan veri k\u00fcmelerinden biridir. Genellikle &#8220;derin \u00f6\u011frenmenin Merhaba D\u00fcnya&#8217;s\u0131&#8221; olarak an\u0131l\u0131r ve yeni algoritmalar\u0131 test etmek veya derin \u00f6\u011frenmeye ba\u015flamak i\u00e7in ideal bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar.<\/p>\n<h4>Veri K\u00fcmesinin Yap\u0131s\u0131<\/h4>\n<p>MNIST, 0&#8217;dan 9&#8217;a kadar olan el yaz\u0131s\u0131 rakamlar\u0131n\u0131n gri tonlamal\u0131 g\u00f6r\u00fcnt\u00fclerinden olu\u015fur.<br \/>\n*   <strong>G\u00f6r\u00fcnt\u00fc Boyutu:<\/strong> Her g\u00f6r\u00fcnt\u00fc 28&#215;28 piksel boyutundad\u0131r. Bu, toplamda 784 piksel anlam\u0131na gelir.<br \/>\n*   <strong>Piksel De\u011ferleri:<\/strong> Piksel de\u011ferleri 0 ile 255 aras\u0131nda de\u011fi\u015fir; 0 siyah\u0131, 255 beyaz\u0131 temsil eder.<br \/>\n*   <strong>E\u011fitim Seti:<\/strong> 60.000 g\u00f6r\u00fcnt\u00fc i\u00e7erir ve modelin \u00f6\u011frenmesi i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Test Seti:<\/strong> 10.000 g\u00f6r\u00fcnt\u00fc i\u00e7erir ve modelin e\u011fitilmemi\u015f veriler \u00fczerindeki performans\u0131n\u0131 de\u011ferlendirmek i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Etiketler:<\/strong> Her g\u00f6r\u00fcnt\u00fc, temsil etti\u011fi rakam\u0131 (0-9) belirten bir etiketle birlikte gelir.<\/p>\n<h4>MNIST&#8217;i Y\u00fckleme ve \u00d6n \u0130\u015fleme<\/h4>\n<p>PyTorch&#8217;un <code>torchvision<\/code> k\u00fct\u00fcphanesi, pop\u00fcler veri k\u00fcmelerine (MNIST, CIFAR10 vb.) eri\u015fimi ve g\u00f6r\u00fcnt\u00fc d\u00f6n\u00fc\u015f\u00fcmlerini kolayla\u015ft\u0131r\u0131r. MNIST veri k\u00fcmesini y\u00fcklemek ve derin \u00f6\u011frenme modeline uygun hale getirmek i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleriz:<\/p>\n<p>1.  <strong>D\u00f6n\u00fc\u015f\u00fcmler (Transforms):<\/strong> G\u00f6r\u00fcnt\u00fcleri PyTorch tensor&#8217;lar\u0131na d\u00f6n\u00fc\u015ft\u00fcrmek ve normalle\u015ftirmek gerekir. Normalizasyon, piksel de\u011ferlerini belirli bir aral\u0131\u011fa (genellikle 0-1 veya -1-1) \u00f6l\u00e7ekleyerek modelin daha iyi \u00f6\u011frenmesine yard\u0131mc\u0131 olur. MNIST i\u00e7in genellikle [0, 1] aral\u0131\u011f\u0131na \u00f6l\u00e7ekleme ve ard\u0131ndan ortalama 0, standart sapma 1 olacak \u015fekilde standartla\u015ft\u0131rma yap\u0131l\u0131r.<br \/>\n2.  <strong>Veri K\u00fcmeleri (Datasets):<\/strong> <code>torchvision.datasets.MNIST<\/code> s\u0131n\u0131f\u0131, veri k\u00fcmesini indirir ve y\u00fckler.<br \/>\n3.  <strong>Veri Y\u00fckleyiciler (DataLoaders):<\/strong> <code>torch.utils.data.DataLoader<\/code>, veri k\u00fcmesini k\u00fc\u00e7\u00fck gruplara (batch&#8217;ler) ay\u0131rarak modelin e\u011fitim s\u00fcrecini daha verimli hale getirir. Ayr\u0131ca verileri kar\u0131\u015ft\u0131rma (shuffling) ve \u00e7oklu i\u015flem (multi-processing) ile y\u00fckleme gibi \u00f6zellikler sunar.<\/p>\n<pre><code class=\"language-python\">import torch\nfrom torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader\n\n<h2>Cihaz ayar\u0131 (GPU varsa 'cuda', yoksa 'cpu')<\/h2>\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\n<h2>Veri \u00f6n i\u015fleme d\u00f6n\u00fc\u015f\u00fcmleri<\/h2>\n<h2>ToTensor(): PIL Image veya NumPy dizisini [0, 1] aral\u0131\u011f\u0131nda bir Tensor'a d\u00f6n\u00fc\u015ft\u00fcr\u00fcr.<\/h2>\n<h2>Normalize(): Tensor'\u0131 belirli bir ortalama ve standart sapma ile standartla\u015ft\u0131r\u0131r.<\/h2>\n<h2>MNIST i\u00e7in ortalama ve std de\u011ferleri \u00f6nceden hesaplanm\u0131\u015ft\u0131r.<\/h2>\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.1307,), (0.3081,)) # MNIST'in ortalama ve std de\u011ferleri\n])\n\n<h2>E\u011fitim ve test veri k\u00fcmelerini indirme ve y\u00fckleme<\/h2>\ntrain_dataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ntest_dataset = datasets.MNIST(root='.\/data', train=False, download=True, transform=transform)\n\n<h2>Veri y\u00fckleyicileri olu\u015fturma<\/h2>\nbatch_size = 64\ntrain_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)\ntest_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)\n\n<h2>Bir \u00f6rnek batch'i inceleyelim<\/h2>\nimages, labels = next(iter(train_loader))\nprint(f\"Batch boyutu: {images.shape}\") # torch.Size([64, 1, 28, 28]) (batch_size, kanal, y\u00fckseklik, geni\u015flik)\nprint(f\"Etiketler: {labels.shape}\")   # torch.Size([64])<\/code><\/pre>\n<p>Burada <code>images.shape<\/code> \u00e7\u0131kt\u0131s\u0131 <code>[64, 1, 28, 28]<\/code> \u015feklindedir. Bu, 64 g\u00f6r\u00fcnt\u00fcl\u00fck bir batch, her g\u00f6r\u00fcnt\u00fc 1 kanal (gri tonlamal\u0131) ve 28&#215;28 piksel boyutunda demektir.<\/p>\n<h3>Yapay Sinir A\u011f\u0131 Mimarisi<\/h3>\n<p>El yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131mak i\u00e7in kullanaca\u011f\u0131m\u0131z yapay sinir a\u011f\u0131, temel bir \u00c7ok Katmanl\u0131 Alg\u0131lay\u0131c\u0131 (Multi-Layer Perceptron &#8211; MLP) veya di\u011fer ad\u0131yla Tam Ba\u011flant\u0131l\u0131 A\u011f (Fully Connected Network) olacakt\u0131r. Bu t\u00fcr bir a\u011f, derin \u00f6\u011frenmeye ba\u015flamak i\u00e7in iyi bir temel sa\u011flar.<\/p>\n<h4>Temel Kavramlar<\/h4>\n<p>*   <strong>Giri\u015f Katman\u0131:<\/strong> Modelin girdi verisini ald\u0131\u011f\u0131 katmand\u0131r. MNIST i\u00e7in 28&#215;28=784 pikselden olu\u015fan d\u00fczle\u015ftirilmi\u015f g\u00f6r\u00fcnt\u00fc vekt\u00f6rleri bu katmana girer.<br \/>\n*   <strong>Gizli Katmanlar:<\/strong> Giri\u015f ve \u00e7\u0131k\u0131\u015f katmanlar\u0131 aras\u0131nda yer alan katmanlard\u0131r. Bu katmanlarda, a\u011f\u0131n karma\u015f\u0131k desenleri ve ili\u015fkileri \u00f6\u011frenmesini sa\u011flayan hesaplamalar yap\u0131l\u0131r. Her gizli katman, bir dizi n\u00f6ron i\u00e7erir.<br \/>\n*   <strong>\u00c7\u0131k\u0131\u015f Katman\u0131:<\/strong> Modelin nihai tahminlerini \u00fcretti\u011fi katmand\u0131r. MNIST gibi 10 farkl\u0131 rakam\u0131 s\u0131n\u0131fland\u0131rma probleminde, bu katman 10 n\u00f6ron i\u00e7erir (her rakam i\u00e7in bir tane).<br \/>\n*   <strong>N\u00f6ronlar:<\/strong> Bir yapay sinir a\u011f\u0131n\u0131n temel i\u015flem birimidir. Gelen girdileri al\u0131r, a\u011f\u0131rl\u0131klarla \u00e7arpar, bias ekler ve bir aktivasyon fonksiyonundan ge\u00e7irerek bir \u00e7\u0131kt\u0131 \u00fcretir.<br \/>\n*   <strong>A\u011f\u0131rl\u0131klar (Weights) ve Bias&#8217;lar:<\/strong> A\u011f\u0131n \u00f6\u011frenilebilir parametreleridir. A\u011f\u0131rl\u0131klar, girdilerin \u00f6nemini belirlerken, bias&#8217;lar bir n\u00f6ronun aktivasyon e\u015fi\u011fini ayarlar.<br \/>\n*   <strong>Aktivasyon Fonksiyonlar\u0131:<\/strong> Bir n\u00f6ronun \u00e7\u0131kt\u0131s\u0131n\u0131 do\u011frusal olmayan hale getiren fonksiyonlard\u0131r. Bu non-lineerlik, a\u011f\u0131n daha karma\u015f\u0131k fonksiyonlar\u0131 modellemesini sa\u011flar. ReLU (Rectified Linear Unit) ve Sigmoid en yayg\u0131n kullan\u0131lanlardand\u0131r. S\u0131n\u0131fland\u0131rma problemlerinde \u00e7\u0131k\u0131\u015f katman\u0131nda genellikle Softmax kullan\u0131l\u0131r.<\/p>\n<h4>Modelin PyTorch&#8217;ta Tan\u0131mlanmas\u0131<\/h4>\n<p>PyTorch&#8217;ta bir yapay sinir a\u011f\u0131, <code>nn.Module<\/code> s\u0131n\u0131f\u0131ndan t\u00fcretilerek olu\u015fturulur. Bu s\u0131n\u0131f\u0131 miras alan her modelin iki ana metodu olmal\u0131d\u0131r:<\/p>\n<p>1.  <code>__init__(self)<\/code>: Bu metodda, a\u011f\u0131n katmanlar\u0131 (lineer katmanlar, evri\u015fimsel katmanlar vb.) ve di\u011fer mod\u00fcller tan\u0131mlan\u0131r.<br \/>\n2.  <code>forward(self, x)<\/code>: Bu metodda, girdi <code>x<\/code>&#8216;in a\u011f \u00fczerinden nas\u0131l ge\u00e7irilece\u011fi, yani katmanlar\u0131n ve aktivasyon fonksiyonlar\u0131n\u0131n s\u0131ras\u0131 tan\u0131mlan\u0131r. Bu metod, model \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda otomatik olarak \u00e7al\u0131\u015f\u0131r.<\/p>\n<p>MNIST i\u00e7in basit bir MLP modeli tan\u0131mlayal\u0131m. G\u00f6r\u00fcnt\u00fcler 28&#215;28=784 piksel oldu\u011fundan, giri\u015f katman\u0131m\u0131z 784 n\u00f6ron alacakt\u0131r. \u00c7\u0131k\u0131\u015f katman\u0131m\u0131z ise 10 farkl\u0131 rakam s\u0131n\u0131f\u0131 oldu\u011fu i\u00e7in 10 n\u00f6ronlu olacakt\u0131r. Arada bir veya iki gizli katman kullanabiliriz.<\/p>\n<pre><code class=\"language-python\">import torch.nn as nn\nimport torch.nn.functional as F\n\n<h2>Yapay Sinir A\u011f\u0131 modelimizi tan\u0131ml\u0131yoruz<\/h2>\nclass NeuralNetwork(nn.Module):\n    def __init__(self):\n        super(NeuralNetwork, self).__init__()\n        # Giri\u015f katman\u0131 (784 piksel) -> Gizli katman 1 (128 n\u00f6ron)\n        self.fc1 = nn.Linear(28 * 28, 128)\n        # Gizli katman 1 (128 n\u00f6ron) -> Gizli katman 2 (64 n\u00f6ron)\n        self.fc2 = nn.Linear(128, 64)\n        # Gizli katman 2 (64 n\u00f6ron) -> \u00c7\u0131k\u0131\u015f katman\u0131 (10 n\u00f6ron - 0'dan 9'a kadar rakamlar)\n        self.fc3 = nn.Linear(64, 10)\n\n    def forward(self, x):\n        # G\u00f6r\u00fcnt\u00fcleri d\u00fczle\u015ftirme (flatten)\n        # Giri\u015f boyutu: [batch_size, 1, 28, 28] -> [batch_size, 784]\n        x = x.view(-1, 28 * 28) # -1, batch boyutunun otomatik olarak belirlenmesini sa\u011flar\n\n        # Gizli katman 1 ve ReLU aktivasyonu\n        x = F.relu(self.fc1(x))\n        # Gizli katman 2 ve ReLU aktivasyonu\n        x = F.relu(self.fc2(x))\n        # \u00c7\u0131k\u0131\u015f katman\u0131 (aktivasyon fonksiyonu yok, CrossEntropyLoss i\u00e7inde Softmax uygulan\u0131r)\n        x = self.fc3(x)\n        return x\n\n<h2>Modeli olu\u015ftur ve cihaza ta\u015f\u0131<\/h2>\nmodel = NeuralNetwork().to(device)\nprint(model)<\/code><\/pre>\n<p>Yukar\u0131daki modelde, <code>F.relu<\/code> fonksiyonel API&#8217;den \u00e7a\u011fr\u0131l\u0131r. Alternatif olarak, <code>nn.ReLU()<\/code> mod\u00fcl\u00fcn\u00fc de <code>__init__<\/code> i\u00e7inde tan\u0131mlay\u0131p <code>forward<\/code> i\u00e7inde \u00e7a\u011f\u0131rabilirdik. <code>nn.Linear<\/code> katmanlar\u0131, giri\u015f ve \u00e7\u0131k\u0131\u015f boyutlar\u0131n\u0131 otomatik olarak y\u00f6netir. <code>x.view(-1, 28 * 28)<\/code> i\u015flemi, 28&#215;28 boyutundaki 2 boyutlu g\u00f6r\u00fcnt\u00fc verisini 784 boyutlu 1 boyutlu bir vekt\u00f6re d\u00f6n\u00fc\u015ft\u00fcrerek tam ba\u011flant\u0131l\u0131 katmanlara uygun hale getirir.<\/p>\n<h3>E\u011fitim S\u00fcreci<\/h3>\n<p>Bir yapay sinir a\u011f\u0131n\u0131n e\u011fitimi, modelin veri k\u00fcmesindeki desenleri \u00f6\u011frenerek tahmin yetene\u011fini geli\u015ftirmesi s\u00fcrecidir. Bu s\u00fcre\u00e7, bir dizi temel ad\u0131mdan olu\u015fur: kay\u0131p fonksiyonunun belirlenmesi, optimizat\u00f6r\u00fcn se\u00e7ilmesi ve e\u011fitim d\u00f6ng\u00fcs\u00fcn\u00fcn \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131.<\/p>\n<h4>Kay\u0131p Fonksiyonu (Loss Function)<\/h4>\n<p>Kay\u0131p fonksiyonu (veya maliyet fonksiyonu), modelin tahminleri ile ger\u00e7ek etiketler aras\u0131ndaki fark\u0131 \u00f6l\u00e7er. Bu fark ne kadar k\u00fc\u00e7\u00fckse, modelin performans\u0131 o kadar iyidir. S\u0131n\u0131fland\u0131rma problemleri i\u00e7in yayg\u0131n olarak kullan\u0131lan kay\u0131p fonksiyonu <code>nn.CrossEntropyLoss<\/code>&#8216;tur. Bu fonksiyon, Softmax aktivasyonunu ve Negatif Log Olabilirlik Kayb\u0131n\u0131 (Negative Log Likelihood Loss) birle\u015ftirir, bu da onu \u00e7ok s\u0131n\u0131fl\u0131 s\u0131n\u0131fland\u0131rma g\u00f6revleri i\u00e7in olduk\u00e7a uygun hale getirir. Modelin \u00e7\u0131k\u0131\u015f katman\u0131nda Softmax uygulamadan do\u011frudan bu kay\u0131p fonksiyonunu kullanabiliriz, \u00e7\u00fcnk\u00fc <code>nn.CrossEntropyLoss<\/code> bunu dahili olarak halleder.<\/p>\n<pre><code class=\"language-python\">criterion = nn.CrossEntropyLoss()<\/code><\/pre>\n<h4>Optimizat\u00f6r (Optimizer)<\/h4>\n<p>Optimizat\u00f6r, kay\u0131p fonksiyonunu minimize etmek i\u00e7in modelin \u00f6\u011frenilebilir parametrelerini (a\u011f\u0131rl\u0131klar ve bias&#8217;lar) nas\u0131l g\u00fcncelleyece\u011fini belirleyen algoritmad\u0131r. En pop\u00fcler optimizat\u00f6rlerden baz\u0131lar\u0131 SGD (Stokastik Gradyan \u0130ni\u015fi), Adam ve RMSprop&#8217;tur. Adam optimizat\u00f6r\u00fc, genellikle iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r \u00e7\u00fcnk\u00fc dinamik \u00f6\u011frenme oran\u0131 ayarlamas\u0131 yapar ve \u00e7o\u011fu durumda SGD&#8217;den daha h\u0131zl\u0131 yak\u0131nsar.<\/p>\n<p>Optimizat\u00f6r, modelin parametrelerini (<code>model.parameters()<\/code>) ve bir \u00f6\u011frenme oran\u0131n\u0131 (learning rate &#8211; <code>lr<\/code>) al\u0131r. \u00d6\u011frenme oran\u0131, her g\u00fcncellemede parametrelerin ne kadar de\u011fi\u015ftirilece\u011fini kontrol eden kritik bir hiperparametredir.<\/p>\n<pre><code class=\"language-python\">learning_rate = 0.001\noptimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)<\/code><\/pre>\n<h4>E\u011fitim D\u00f6ng\u00fcs\u00fc (Training Loop)<\/h4>\n<p>E\u011fitim d\u00f6ng\u00fcs\u00fc, modelin veri k\u00fcmesi \u00fczerinde birden fazla kez (epoch) e\u011fitildi\u011fi s\u00fcre\u00e7tir. Her epoch, t\u00fcm e\u011fitim veri k\u00fcmesinin modelden bir kez ge\u00e7irilmesi anlam\u0131na gelir. Her epoch i\u00e7inde, veri k\u00fcmesi k\u00fc\u00e7\u00fck batch&#8217;lere ayr\u0131l\u0131r ve her batch i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar uygulan\u0131r:<\/p>\n<p>1.  <strong>Gradyanlar\u0131 S\u0131f\u0131rlama (<code>optimizer.zero_grad()<\/code>):<\/strong> PyTorch, gradyanlar\u0131 varsay\u0131lan olarak biriktirir. Her yeni batch i\u00e7in \u00f6nceki batch&#8217;ten kalan gradyanlar\u0131n temizlenmesi gerekir, aksi takdirde yanl\u0131\u015f g\u00fcncellemeler yap\u0131l\u0131r.<br \/>\n2.  <strong>\u0130leri Yay\u0131l\u0131m (Forward Pass):<\/strong> Giri\u015f verisi (g\u00f6r\u00fcnt\u00fcler) modele beslenir ve model tahminler (<code>outputs<\/code>) \u00fcretir.<br \/>\n3.  <strong>Kay\u0131p Hesaplama (Loss Calculation):<\/strong> Modelin tahminleri ile ger\u00e7ek etiketler (<code>labels<\/code>) aras\u0131ndaki fark, kay\u0131p fonksiyonu kullan\u0131larak hesaplan\u0131r.<br \/>\n4.  <strong>Geri Yay\u0131l\u0131m (Backward Pass):<\/strong> Hesaplanan kay\u0131p, a\u011f boyunca geriye do\u011fru yay\u0131l\u0131r ve her \u00f6\u011frenilebilir parametre i\u00e7in gradyanlar (<code>.grad<\/code>) hesaplan\u0131r. Bu i\u015flem <code>loss.backward()<\/code> ile yap\u0131l\u0131r.<br \/>\n5.  <strong>Parametreleri G\u00fcncelleme (<code>optimizer.step()<\/code>):<\/strong> Optimizat\u00f6r, hesaplanan gradyanlar\u0131 kullanarak modelin a\u011f\u0131rl\u0131klar\u0131n\u0131 ve bias&#8217;lar\u0131n\u0131 g\u00fcnceller.<\/p>\n<pre><code class=\"language-python\">num_epochs = 5 # E\u011fitim epoch say\u0131s\u0131\n\nfor epoch in range(num_epochs):\n    for i, (images, labels) in enumerate(train_loader):\n        # Veriyi cihaza ta\u015f\u0131\n        images = images.to(device)\n        labels = labels.to(device)\n\n        # \u0130leri yay\u0131l\u0131m\n        outputs = model(images)\n        loss = criterion(outputs, labels)\n\n        # Geri yay\u0131l\u0131m ve optimizasyon\n        optimizer.zero_grad() # Gradyanlar\u0131 s\u0131f\u0131rla\n        loss.backward()       # Geri yay\u0131l\u0131m\n        optimizer.step()      # Parametreleri g\u00fcncelle\n\n        if (i+1) % 100 == 0:\n            print(f'Epoch [{epoch+1}\/{num_epochs}], Step [{i+1}\/{len(train_loader)}], Loss: {loss.item():.4f}')<\/code><\/pre>\n<p>Bu d\u00f6ng\u00fc, modelin her epoch&#8217;ta t\u00fcm e\u011fitim verisi \u00fczerinde \u00f6\u011frenmesini ve parametrelerini iyile\u015ftirmesini sa\u011flar. <code>loss.item()<\/code> kullan\u0131larak kay\u0131p de\u011feri Python skalerine d\u00f6n\u00fc\u015ft\u00fcr\u00fcl\u00fcr ve yazd\u0131r\u0131l\u0131r.<\/p>\n<h3>Modelin De\u011ferlendirilmesi<\/h3>\n<p>Model e\u011fitildikten sonra, ne kadar iyi performans g\u00f6sterdi\u011fini de\u011ferlendirmemiz gerekir. Bu de\u011ferlendirme, modelin e\u011fitim s\u0131ras\u0131nda g\u00f6rmedi\u011fi test veri k\u00fcmesi \u00fczerinde yap\u0131l\u0131r. Bu, modelin genelleme yetene\u011fini \u00f6l\u00e7mek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>De\u011ferlendirme s\u00fcreci, e\u011fitim d\u00f6ng\u00fcs\u00fcne benzer ancak birka\u00e7 \u00f6nemli farkla:<br \/>\n1.  <strong>Gradyan Hesaplamas\u0131n\u0131 Devre D\u0131\u015f\u0131 B\u0131rakma:<\/strong> Test a\u015famas\u0131nda modelin parametrelerini g\u00fcncellememiz gerekmedi\u011fi i\u00e7in gradyan hesaplamas\u0131na ihtiyac\u0131m\u0131z yoktur. <code>torch.no_grad()<\/code> ba\u011flam y\u00f6neticisi kullan\u0131larak bu i\u015flem devre d\u0131\u015f\u0131 b\u0131rak\u0131l\u0131r, bu da bellek kullan\u0131m\u0131n\u0131 azalt\u0131r ve hesaplamalar\u0131 h\u0131zland\u0131r\u0131r.<br \/>\n2.  <strong>Do\u011fruluk (Accuracy) Metri\u011fi:<\/strong> S\u0131n\u0131fland\u0131rma problemlerinde en yayg\u0131n de\u011ferlendirme metri\u011fi do\u011fruluktur (accuracy). Bu, do\u011fru tahmin edilen \u00f6rneklerin toplam \u00f6rnek say\u0131s\u0131na oran\u0131d\u0131r.<\/p>\n<pre><code class=\"language-python\"># Modeli de\u011ferlendirme moduna al\n<h2>Dropout ve Batch Normalization gibi katmanlar\u0131n davran\u0131\u015f\u0131n\u0131 test moduna g\u00f6re ayarlar<\/h2>\nmodel.eval()\n\nwith torch.no_grad(): # Gradyan hesaplamas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\n    correct = 0\n    total = 0\n    for images, labels in test_loader:\n        images = images.to(device)\n        labels = labels.to(device)\n        outputs = model(images)\n        _, predicted = torch.max(outputs.data, 1) # En y\u00fcksek olas\u0131l\u0131\u011fa sahip s\u0131n\u0131f\u0131 bul\n        total += labels.size(0)\n        correct += (predicted == labels).sum().item()\n\n    print(f'Test veri k\u00fcmesinde modelin do\u011frulu\u011fu: {100 * correct \/ total:.2f}%')\n\n<h2>E\u011fitimi bitirdikten sonra modeli tekrar e\u011fitim moduna alabiliriz<\/h2>\nmodel.train()<\/code><\/pre>\n<p><code>torch.max(outputs.data, 1)<\/code> fonksiyonu, modelin her bir g\u00f6r\u00fcnt\u00fc i\u00e7in \u00fcretti\u011fi 10 olas\u0131l\u0131k de\u011ferinden (logit) en y\u00fcksek olan\u0131n indeksini (yani tahmin edilen s\u0131n\u0131f\u0131) bulur. <code>_<\/code> de\u011fi\u015fkeni, maksimum de\u011feri tutarken, <code>predicted<\/code> de\u011fi\u015fkeni maksimum de\u011ferin indeksini tutar. <code>(predicted == labels).sum().item()<\/code> ise do\u011fru tahmin edilen \u00f6rneklerin say\u0131s\u0131n\u0131 verir.<\/p>\n<h3>Pratik Uygulama Kodu<\/h3>\n<p>\u015eimdiye kadar ele ald\u0131\u011f\u0131m\u0131z t\u00fcm ad\u0131mlar\u0131 bir araya getirerek, PyTorch ile el yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131yan bir yapay sinir a\u011f\u0131 olu\u015fturan eksiksiz bir Python kodu \u00f6rne\u011fini sunal\u0131m.<\/p>\n<pre><code class=\"language-python\">import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader\n\n<h2>1. Cihaz Ayar\u0131<\/h2>\n<h2>GPU (cuda) varsa kullan, yoksa CPU kullan<\/h2>\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nprint(f\"Kullan\u0131lan cihaz: {device}\")\n\n<h2>2. Hiperparametreler<\/h2>\nnum_epochs = 10       # E\u011fitim d\u00f6ng\u00fcs\u00fc say\u0131s\u0131\nbatch_size = 128      # Her bir e\u011fitim ad\u0131m\u0131nda kullan\u0131lacak \u00f6rnek say\u0131s\u0131\nlearning_rate = 0.001 # Optimizat\u00f6r\u00fcn \u00f6\u011frenme oran\u0131\n\n<h2>3. Veri \u00d6n \u0130\u015fleme ve Y\u00fckleme<\/h2>\n<h2>MNIST i\u00e7in d\u00f6n\u00fc\u015f\u00fcmler: Tensor'a \u00e7evir ve normalle\u015ftir<\/h2>\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.1307,), (0.3081,)) # MNIST'in ortalama ve std de\u011ferleri\n])\n\n<h2>E\u011fitim ve test veri k\u00fcmelerini indirme ve y\u00fckleme<\/h2>\ntrain_dataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ntest_dataset = datasets.MNIST(root='.\/data', train=False, download=True, transform=transform)\n\n<h2>Veri y\u00fckleyicileri olu\u015fturma<\/h2>\ntrain_loader = DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True)\ntest_loader = DataLoader(dataset=test_dataset, batch_size=batch_size, shuffle=False)\n\n<h2>4. Yapay Sinir A\u011f\u0131 Modelinin Tan\u0131mlanmas\u0131<\/h2>\nclass NeuralNetwork(nn.Module):\n    def __init__(self):\n        super(NeuralNetwork, self).__init__()\n        # Giri\u015f katman\u0131 (784 piksel) -> Gizli katman 1 (256 n\u00f6ron)\n        self.fc1 = nn.Linear(28 * 28, 256)\n        # Gizli katman 1 (256 n\u00f6ron) -> Gizli katman 2 (128 n\u00f6ron)\n        self.fc2 = nn.Linear(256, 128)\n        # Gizli katman 2 (128 n\u00f6ron) -> Gizli katman 3 (64 n\u00f6ron)\n        self.fc3 = nn.Linear(128, 64)\n        # Gizli katman 3 (64 n\u00f6ron) -> \u00c7\u0131k\u0131\u015f katman\u0131 (10 n\u00f6ron)\n        self.fc4 = nn.Linear(64, 10)\n        # Dropout katman\u0131, a\u015f\u0131r\u0131 \u00f6\u011frenmeyi (overfitting) azaltmak i\u00e7in kullan\u0131l\u0131r\n        self.dropout = nn.Dropout(0.2) # %20 ihtimalle n\u00f6ronlar\u0131 kapat\n\n    def forward(self, x):\n        # G\u00f6r\u00fcnt\u00fcleri d\u00fczle\u015ftirme: [batch_size, 1, 28, 28] -> [batch_size, 784]\n        x = x.view(-1, 28 * 28)\n\n        # Katmanlar ve aktivasyon fonksiyonlar\u0131\n        x = F.relu(self.fc1(x))\n        x = self.dropout(x) # Dropout uygulama\n        x = F.relu(self.fc2(x))\n        x = self.dropout(x)\n        x = F.relu(self.fc3(x))\n        x = self.dropout(x)\n        x = self.fc4(x) # \u00c7\u0131k\u0131\u015f katman\u0131, CrossEntropyLoss i\u00e7inde Softmax uygulanacak\n        return x\n\n<h2>Modeli olu\u015ftur ve cihaza ta\u015f\u0131<\/h2>\nmodel = NeuralNetwork().to(device)\nprint(\"\\nModel Mimarisi:\")\nprint(model)\n\n<h2>5. Kay\u0131p Fonksiyonu ve Optimizat\u00f6r<\/h2>\ncriterion = nn.CrossEntropyLoss() # S\u0131n\u0131fland\u0131rma i\u00e7in uygun kay\u0131p fonksiyonu\noptimizer = torch.optim.Adam(model.parameters(), lr=learning_rate) # Adam optimizat\u00f6r\u00fc\n\n<h2>6. Model E\u011fitimi<\/h2>\nprint(\"\\nE\u011fitim Ba\u015flad\u0131...\")\ntotal_steps = len(train_loader)\nfor epoch in range(num_epochs):\n    for i, (images, labels) in enumerate(train_loader):\n        # Veriyi cihaza ta\u015f\u0131\n        images = images.to(device)\n        labels = labels.to(device)\n\n        # \u0130leri yay\u0131l\u0131m (Forward pass)\n        outputs = model(images)\n        loss = criterion(outputs, labels)\n\n        # Geri yay\u0131l\u0131m (Backward pass) ve optimizasyon\n        optimizer.zero_grad() # \u00d6nceki gradyanlar\u0131 s\u0131f\u0131rla\n        loss.backward()       # Gradyanlar\u0131 hesapla\n        optimizer.step()      # Parametreleri g\u00fcncelle\n\n        if (i+1) % 100 == 0:\n            print(f'Epoch [{epoch+1}\/{num_epochs}], Step [{i+1}\/{total_steps}], Loss: {loss.item():.4f}')\nprint(\"E\u011fitim Tamamland\u0131.\")\n\n<h2>7. Modelin De\u011ferlendirilmesi<\/h2>\nprint(\"\\nModel De\u011ferlendirme Ba\u015flad\u0131...\")\nmodel.eval() # Modeli de\u011ferlendirme moduna al (dropout'\u0131 devre d\u0131\u015f\u0131 b\u0131rak\u0131r)\nwith torch.no_grad(): # Gradyan hesaplamas\u0131n\u0131 devre d\u0131\u015f\u0131 b\u0131rak\n    correct = 0\n    total = 0\n    for images, labels in test_loader:\n        images = images.to(device)\n        labels = labels.to(device)\n        outputs = model(images)\n        _, predicted = torch.max(outputs.data, 1) # En y\u00fcksek olas\u0131l\u0131\u011fa sahip s\u0131n\u0131f\u0131 bul\n        total += labels.size(0)\n        correct += (predicted == labels).sum().item()\n\n    print(f'Test veri k\u00fcmesindeki do\u011fruluk: {100 * correct \/ total:.2f}%')\nprint(\"Model De\u011ferlendirme Tamamland\u0131.\")\n\n<h2>\u0130ste\u011fe ba\u011fl\u0131: Modelin kaydedilmesi<\/h2>\n<h2>torch.save(model.state_dict(), 'mnist_mlp_model.pth')<\/h2>\n<h2>print(\"Model kaydedildi: mnist_mlp_model.pth\")<\/code><\/pre>\n<\/h2>\n<p>Bu kod blo\u011fu, PyTorch&#8217;un t\u00fcm temel bile\u015fenlerini kullanarak MNIST veri k\u00fcmesi \u00fczerinde bir yapay sinir a\u011f\u0131 e\u011fitir ve de\u011ferlendirir. <code>nn.Dropout<\/code> katman\u0131, a\u015f\u0131r\u0131 \u00f6\u011frenmeyi (overfitting) azaltmaya yard\u0131mc\u0131 olan \u00f6nemli bir d\u00fczenlile\u015ftirme tekni\u011fidir. E\u011fitim s\u0131ras\u0131nda rastgele n\u00f6ronlar\u0131 devre d\u0131\u015f\u0131 b\u0131rakarak a\u011f\u0131n belirli \u00f6zelliklere a\u015f\u0131r\u0131 ba\u011f\u0131ml\u0131 olmas\u0131n\u0131 engeller.<\/p>\n<h3>\u0130leri Seviye Konular ve Sonraki Ad\u0131mlar<\/h3>\n<p>PyTorch ile el yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131ma projesi, derin \u00f6\u011frenmeye sa\u011flam bir giri\u015f noktas\u0131 sunar. Ancak bu sadece ba\u015flang\u0131\u00e7t\u0131r. Derin \u00f6\u011frenme d\u00fcnyas\u0131nda ke\u015ffedilecek \u00e7ok daha fazla konu ve uygulanacak teknik bulunmaktad\u0131r.<\/p>\n<h4>Evri\u015fimsel Sinir A\u011flar\u0131 (Convolutional Neural Networks &#8211; CNNs)<\/h4>\n<p>MNIST gibi g\u00f6r\u00fcnt\u00fc verileriyle \u00e7al\u0131\u015f\u0131rken, Evri\u015fimsel Sinir A\u011flar\u0131 (CNN&#8217;ler), Tam Ba\u011flant\u0131l\u0131 A\u011flardan (MLP&#8217;ler) genellikle daha \u00fcst\u00fcn performans g\u00f6sterir. CNN&#8217;ler, g\u00f6r\u00fcnt\u00fclerin mekansal hiyerar\u015fik \u00f6zelliklerini (kenarlar, dokular, nesne par\u00e7alar\u0131) otomatik olarak \u00f6\u011frenmek \u00fczere tasarlanm\u0131\u015ft\u0131r. <code>nn.Conv2d<\/code>, <code>nn.MaxPool2d<\/code> gibi katmanlar kullanarak \u00e7ok daha karma\u015f\u0131k ve ba\u015far\u0131l\u0131 g\u00f6r\u00fcnt\u00fc tan\u0131ma modelleri olu\u015fturabilirsiniz. MNIST \u00fczerinde bir CNN uygulamak, modelin do\u011frulu\u011funu \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131racakt\u0131r.<\/p>\n<h4>Veri Art\u0131rma (Data Augmentation)<\/h4>\n<p>Derin \u00f6\u011frenme modelleri, b\u00fcy\u00fck miktarda e\u011fitim verisine ihtiya\u00e7 duyar. Veri art\u0131rma, mevcut e\u011fitim verilerinden yeni, sentetik \u00f6rnekler \u00fcreterek veri k\u00fcmesinin boyutunu yapay olarak art\u0131rma tekni\u011fidir. G\u00f6r\u00fcnt\u00fc verileri i\u00e7in d\u00f6nd\u00fcrme, \u00e7evirme, \u00f6l\u00e7ekleme, k\u0131rpma, parlakl\u0131k\/kontrast ayarlar\u0131 gibi d\u00f6n\u00fc\u015f\u00fcmler uygulanabilir. Bu, modelin farkl\u0131 varyasyonlara kar\u015f\u0131 daha sa\u011flam olmas\u0131n\u0131 sa\u011flar ve a\u015f\u0131r\u0131 \u00f6\u011frenmeyi azaltmaya yard\u0131mc\u0131 olur. <code>torchvision.transforms<\/code> mod\u00fcl\u00fc, bu t\u00fcr veri art\u0131rma i\u015flemlerini kolayca uygulaman\u0131z\u0131 sa\u011flar.<\/p>\n<h4>Hiperparametre Ayar\u0131 (Hyperparameter Tuning)<\/h4>\n<p><code>learning_rate<\/code>, <code>batch_size<\/code>, gizli katman say\u0131s\u0131, n\u00f6ron say\u0131s\u0131, optimizat\u00f6r tipi gibi modelin e\u011fitimini etkileyen parametrelere hiperparametre denir. Bu hiperparametrelerin do\u011fru de\u011ferlerini bulmak, modelin performans\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde etkileyebilir. Izgara aramas\u0131 (Grid Search), rastgele arama (Random Search) veya Bayesian optimizasyon gibi teknikler kullan\u0131larak en iyi hiperparametre kombinasyonu bulunmaya \u00e7al\u0131\u015f\u0131l\u0131r.<\/p>\n<h4>Model Kaydetme ve Y\u00fckleme<\/h4>\n<p>E\u011fitilmi\u015f bir modeli yeniden kullanmak veya da\u011f\u0131tmak i\u00e7in kaydetmek ve daha sonra y\u00fcklemek \u00f6nemlidir. PyTorch&#8217;ta modelin durum s\u00f6zl\u00fc\u011f\u00fcn\u00fc (<code>model.state_dict()<\/code>) kaydetmek ve y\u00fcklemek en yayg\u0131n y\u00f6ntemdir.<\/p>\n<pre><code class=\"language-python\"># Modeli kaydetme\ntorch.save(model.state_dict(), 'model_weights.pth')\n\n<h2>Modeli y\u00fckleme<\/h2>\n<h2>\u00d6nce model mimarisini olu\u015fturman\u0131z gerekir<\/h2>\nloaded_model = NeuralNetwork().to(device)\nloaded_model.load_state_dict(torch.load('model_weights.pth'))\nloaded_model.eval() # De\u011ferlendirme i\u00e7in<\/code><\/pre>\n<h4>Transfer \u00d6\u011frenme (Transfer Learning)<\/h4>\n<p>Transfer \u00f6\u011frenme, bir problem \u00fczerinde e\u011fitilmi\u015f bir modelin \u00f6\u011frenilmi\u015f \u00f6zelliklerini ba\u015fka bir benzer problemde kullanma tekni\u011fidir. \u00d6zellikle veri k\u00fcmeniz k\u00fc\u00e7\u00fckse veya modelinizi s\u0131f\u0131rdan e\u011fitmek \u00e7ok maliyetliyse faydal\u0131d\u0131r. \u00d6rne\u011fin, ImageNet gibi b\u00fcy\u00fck bir veri k\u00fcmesi \u00fczerinde e\u011fitilmi\u015f \u00f6nceden e\u011fitilmi\u015f bir CNN modelini al\u0131p, son katmanlar\u0131n\u0131 kendi \u00f6zel s\u0131n\u0131fland\u0131rma g\u00f6revinize uyarlayabilirsiniz. PyTorch&#8217;un <code>torchvision.models<\/code> mod\u00fcl\u00fc, bir\u00e7ok \u00f6nceden e\u011fitilmi\u015f model sunar.<\/p>\n<h4>Ger\u00e7ek D\u00fcnya Uygulamalar\u0131<\/h4>\n<p>PyTorch ile \u00f6\u011frendi\u011finiz bu temel prensipler, \u00e7ok daha karma\u015f\u0131k ger\u00e7ek d\u00fcnya problemlerine uygulanabilir. \u00d6rne\u011fin:<br \/>\n*   <strong>G\u00f6r\u00fcnt\u00fc Tan\u0131ma:<\/strong> Daha b\u00fcy\u00fck ve karma\u015f\u0131k veri k\u00fcmeleri (CIFAR-10, ImageNet) \u00fczerinde nesne tan\u0131ma, g\u00f6r\u00fcnt\u00fc s\u0131n\u0131fland\u0131rma.<br \/>\n*   <strong>Do\u011fal Dil \u0130\u015fleme (NLP):<\/strong> Metin s\u0131n\u0131fland\u0131rma, duygu analizi, makine \u00e7evirisi, metin \u00fcretimi.<br \/>\n*   <strong>Ses \u0130\u015fleme:<\/strong> Konu\u015fma tan\u0131ma, ses s\u0131n\u0131fland\u0131rma.<br \/>\n*   <strong>Zaman Serisi Analizi:<\/strong> Finansal tahminler, sens\u00f6r verisi analizi.<\/p>\n<p>Bu konular, derin \u00f6\u011frenme yolculu\u011funuzda bir sonraki ad\u0131mlar\u0131n\u0131z\u0131 \u015fekillendirecek ve sizi daha ileri seviye projelere ta\u015f\u0131yacakt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, PyTorch k\u00fct\u00fcphanesini kullanarak el yaz\u0131s\u0131 rakamlar\u0131n\u0131 tan\u0131yabilen basit ama etkili bir yapay sinir a\u011f\u0131 in\u015fa etme s\u00fcrecini detayl\u0131 bir \u015fekilde inceledik. PyTorch&#8217;un temel yap\u0131 ta\u015flar\u0131 olan Tensor&#8217;lar\u0131, otomatik t\u00fcrevleme mekanizmas\u0131 Autograd&#8217;\u0131, <code>nn.Module<\/code> tabanl\u0131 model tan\u0131m\u0131n\u0131 ve e\u011fitim s\u00fcrecinin ana bile\u015fenlerini (kay\u0131p fonksiyonu, optimizat\u00f6r, e\u011fitim d\u00f6ng\u00fcs\u00fc) \u00f6\u011frendik. Ayr\u0131ca, MNIST veri k\u00fcmesinin nas\u0131l y\u00fcklendi\u011fini ve \u00f6n i\u015flendi\u011fini, modelin nas\u0131l e\u011fitildi\u011fini ve test veri k\u00fcmesi \u00fczerinde performans\u0131n\u0131n nas\u0131l de\u011ferlendirildi\u011fini pratik bir kod \u00f6rne\u011fiyle g\u00f6sterdik.<\/p>\n<p>PyTorch, sundu\u011fu esneklik, Pythonic aray\u00fcz ve dinamik hesaplama grafikleri sayesinde derin \u00f6\u011frenme ara\u015ft\u0131rmac\u0131lar\u0131 ve geli\u015ftiricileri i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Bu makaledeki \u00f6rnek, derin \u00f6\u011frenmeye ba\u015flamak i\u00e7in sa\u011flam bir temel sa\u011flamaktad\u0131r. Elde etti\u011fimiz y\u00fcksek do\u011fruluk oranlar\u0131, basit bir \u00e7ok katmanl\u0131 alg\u0131lay\u0131c\u0131n\u0131n bile iyi haz\u0131rlanm\u0131\u015f veriler \u00fczerinde ne kadar etkili olabilece\u011fini g\u00f6stermektedir.<\/p>\n<p>Derin \u00f6\u011frenme alan\u0131 s\u00fcrekli geli\u015fmekte olup, bu makalede \u00f6\u011frendikleriniz, daha karma\u015f\u0131k problemler ve daha geli\u015fmi\u015f a\u011f mimarileri i\u00e7in bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Evri\u015fimsel Sinir A\u011flar\u0131, veri art\u0131rma, hiperparametre ayar\u0131 ve transfer \u00f6\u011frenme gibi konular\u0131 ke\u015ffetmek, derin \u00f6\u011frenme becerilerinizi bir sonraki seviyeye ta\u015f\u0131yacakt\u0131r. Unutmay\u0131n, pratik yapmak ve farkl\u0131 projeler \u00fczerinde \u00e7al\u0131\u015fmak, derin \u00f6\u011frenme ustas\u0131 olman\u0131n anahtar\u0131d\u0131r. PyTorch ile bu heyecan verici d\u00fcnyaya ad\u0131m att\u0131n\u0131z; \u015fimdi s\u0131ra, kendi yarat\u0131c\u0131 projelerinizi hayata ge\u00e7irmekte!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek\nGiri\u015f\nG\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, yapay","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-32724","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&#039;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek - 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\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PyTorch&#039;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek\" \/>\n<meta property=\"og:description\" content=\"PyTorch&#039;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek  Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, yapay\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-25T03:41:04+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=\"23 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek\",\"datePublished\":\"2025-10-25T03:41:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\"},\"wordCount\":3336,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\",\"name\":\"PyTorch'a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-25T03:41:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek\"}]},{\"@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'a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek - 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\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/","og_locale":"tr_TR","og_type":"article","og_title":"PyTorch'a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek","og_description":"PyTorch'a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek  Giri\u015f G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla dijitalle\u015fen d\u00fcnyas\u0131nda, yapay","og_url":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-25T03:41:04+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"23 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek","datePublished":"2025-10-25T03:41:04+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/"},"wordCount":3336,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/","url":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/","name":"PyTorch'a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-25T03:41:04+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/pytorcha-giris-el-yazisi-rakamlari-taniyan-bir-yapay-sinir-agi-insa-etmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PyTorch&#8217;a Giri\u015f: El Yaz\u0131s\u0131 Rakamlar\u0131 Tan\u0131yan Bir Yapay Sinir A\u011f\u0131 \u0130n\u015fa Etmek"}]},{"@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\/32724","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=32724"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32724\/revisions"}],"predecessor-version":[{"id":32725,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32724\/revisions\/32725"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32724"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32724"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}