<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Ümit on Medium]]></title>
        <description><![CDATA[Stories by Ümit on Medium]]></description>
        <link>https://medium.com/@realumit219?source=rss-c78ac58a21c8------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*0URLOdU1RTGiDwEEDJYVlg.jpeg</url>
            <title>Stories by Ümit on Medium</title>
            <link>https://medium.com/@realumit219?source=rss-c78ac58a21c8------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 16 May 2026 00:21:48 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@realumit219/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Difüzyon Modellerinin Temelleri : Zaman ve Bağlam Gömülü (Embedding) Katmanlarının Rolü ve U-Net…]]></title>
            <link>https://medium.com/@realumit219/dif%C3%BCzyon-modellerinin-temelleri-zaman-ve-ba%C4%9Flam-g%C3%B6m%C3%BCl%C3%BC-embedding-katmanlar%C4%B1n%C4%B1n-rol%C3%BC-ve-u-net-f24399b7386c?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/f24399b7386c</guid>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Sun, 10 Aug 2025 19:57:55 GMT</pubDate>
            <atom:updated>2025-08-10T20:17:43.544Z</atom:updated>
            <content:encoded><![CDATA[<h3>Difüzyon Modellerinin Temelleri : Zaman ve Bağlam Gömülü Katmanlarının Rolü ve U-Net Mimarisi</h3><p>Yapay zeka alanındaki görüntü üretme odaklı gelişmeler (Veo gibi modelleri hariç tutuyorum, şimdilik) özellikle de DALL-E, Midjourney ve Stable Diffusion gibi üretken modeller hayal gücünün sınırlarını zorlayan görseller yaratma kabiliyetleriyle hepimizi büyüledi. Bu devrimin merkezinde ise istatistiksel mekanik ve olasılık teorisinden ilham alan güçlü bir fikir yatmaktadır: <strong>Difüzyon Modelleri</strong></p><p>Bu yazının amacı, bu modellerin popüler uygulamalarının yüzeyini kazıyarak, çalışmalarını mümkün kılan temel matematiksel prensipleri ve teorik çerçeveyi ciddi bir dille incelemektir. Konumuz, bu alandaki temel makalelerden biri olan “Denoising Diffusion Probabilistic Models” (DDPM) üzerine yoğunlaşacaktır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Wipx6wr9ISFmFw8GRGzzyw.gif" /><figcaption>Lokal ortamımda test ettiğim 50 epoch ile gürültü tahmini</figcaption></figure><p>Hızlıca konuya giriş yapalım.</p><h3>İki Aşamalı Bir Süreç: Bozunma ve Yaratım</h3><p>Difüzyon modelleri, temelde iki zıt süreç üzerine kuruludur:</p><ol><li><strong>İleri Difüzyon Süreci (q):</strong> Bu süreç, yapılandırılmış bir veriyi (örneğin bir fotoğraf) alır ve adım adım stokastik gürültü ekleyerek onu tamamen anlamsız, saf bir gürültüye (genellikle bir Gauss dağılımına, diğer bir ismi de Normal dağılım) dönüştürür. Bu süreç sabittir, öğrenme gerektirmez ve matematiksel olarak kolayca modellenebilir.</li><li><strong>Geri Difüzyon Süreci (pθ​):</strong> Bu süreç ise tam tersini hedefler. Saf gürültüden başlayarak, ileri sürecin adımlarını tek tek geri almayı öğrenir. Her adımda, bir sinir ağı (θ parametreleri ile) gürültüyü bir miktar “temizleyerek” verinin orijinal yapısını yavaş yavaş yeniden inşa eder. Modelin tüm öğrenme kapasitesi bu süreçte yatar.</li></ol><p>Şimdi bu iki süreci matematiksel olarak formüle edelim.</p><h3>1. İleri Difüzyon Süreci: Kontrollü Kaos</h3><p>İleri süreç, bir Markov zinciri olarak tanımlanır. Bu, herhangi bir t anındaki durumun, yalnızca bir önceki andaki duruma bağlı olduğu anlamına gelir.</p><p>Başlangıç verimiz x0​∼q(x) olsun (veri dağılımından bir örnek).</p><p>T zaman adımı boyunca, her adımda veriye küçük bir miktar Gauss gürültüsü ekleriz. Bu geçiş olasılığı şu şekilde tanımlanır:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/488/1*_LziVVZSCfyfXV-D6-W5lg.png" /></figure><p>Burada:</p><ul><li>xt​, t zaman adımındaki gürültülü veridir.</li><li>βt​∈(0,1), her adımda eklenen gürültünün varyansını kontrol eden, önceden tanımlanmış bir “varyans çizelgesidir” (variance schedule). Genellikle t arttıkça βt​ de artar, yani süreç ilerledikçe daha fazla gürültü eklenir.</li><li>N(⋅;μ,σ2) bir Gauss (Normal) dağılımını temsil eder.</li><li>I birim matristir.</li></ul><p>Bu formül, xt​’nin, bir önceki adım xt−1​’in hafifçe küçültülmüş bir versiyonu ile ortalaması sıfır olan bir miktar gürültünün toplamı olduğunu söyler.</p><p>Bu Markov zincirinin en zarif özelliklerinden biri, herhangi bir t adımındaki xt​’yi doğrudan başlangıç verisi x0​’dan hesaplayabilmemizdir. Bu, “reparameterization trick” (yeniden parametrelendirme hilesi) kullanılarak yapılır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/347/1*mqCW6szMvgGB9hB8X98vjw.png" /></figure><p>a’yı formüldeki gibi tanımlarsak, xt​’yi şu kapalı formda ifade edebiliriz:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/324/1*0JY9_hGf9gCrEvg5v4rU1A.png" /></figure><p>Burada ϵ∼N(0,I) standart bir Gauss gürültüsüdür. Bu denklem, eğitim sürecinin bel kemiğidir. Bize herhangi bir görüntü (x0​) ve herhangi bir zaman adımı (t) için, tek bir adımda gürültülü versiyonunu (xt​) nasıl oluşturacağımızı söyler. αˉt​ t=0&#39;dan T’ye gittikçe 1&#39;den 0&#39;a yaklaştığı için, xT​ neredeyse tamamen saf gürültü (ϵ) haline gelir.</p><h3>2. Geri Difüzyon Süreci: Kaostan Düzen Yaratmak</h3><p>Asıl zorluk, bu süreci tersine çevirmektir. Yani, q(xt−1​∣xt​) dağılımını modellemektir. Eğer bunu tam olarak bilebilseydik, xT​ gürültüsünden başlayarak adım adım geriye gidip x0​’ı elde edebilirdik. Ancak bu dağılım, tüm veri kümesini gerektirdiği için hesaplanması olanaksızdır.</p><p>İşte burada derin öğrenme devreye girer. Bu bilinmeyen dağılımı, parametreleri θ olan bir sinir ağı ile yaklaşık olarak tahmin etmeye çalışırız:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/550/1*ze_R7AudbAnGkiB6uoAwlQ.png" /></figure><p>Modelimiz, xt​ ve t’yi girdi alarak, bir önceki adıma ait dağılımın ortalamasını (μθ​) ve varyansını (Σθ​) tahmin etmelidir.</p><p>DDPM makalesindeki kilit bulgu şudur: Eğer βt​ adımları yeterince küçükse, ters süreç q(xt−1​∣xt​) de Gauss dağılımına sahip olur. Bu, modelimizin bir Gauss dağılımını tahmin etme varsayımını güçlendirir. Dahası, varyans Σθ​ sabit bir değere ayarlanabilir ve modelin yalnızca ortalama μθ​(xt​,t)’yi öğrenmesi yeterli olur.</p><p>Peki, modelin öğrenmesi gereken bu ortalama μθ​ nedir? Bayes teoremini kullanarak ve x0​’ı koşul olarak ekleyerek q(xt−1​∣xt​,x0​) dağılımının ortalamasının şu şekilde ifade edilebildiği gösterilebilir:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/574/1*WhKPBw8tc7Baro8vD6wEag.png" /></figure><p>Bu denklemde bir sorun var: Ortalama, bilmediğimiz x0​’a bağlı. Ancak ileri süreç denklemimizi düzenlersek:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/354/1*JglnkY5AaQ_8uJw256h3Gw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/388/1*cfFNy98XKm4uKSp_-tqq1w.png" /></figure><p>Bu ifadeyi μ~​t​ denkleminde yerine koyduğumuzda, ortalamanın xt​ ve eklenen gürültü ϵ cinsinden ifade edilebildiğini görürüz. Ve şu devrimsel fikir ortaya çıkar:</p><p><strong>Sinir ağı, karmaşık bir ortalamayı veya temizlenmiş bir görüntüyü tahmin etmek yerine, yalnızca o adımdaki gürültüyü (ϵ) tahmin etmeyi öğrenebilir!</strong></p><p>Bu fikir öğrenme hedefini büyük ölçüde basitleştirir. Modelimiz artık ϵθ​(xt​,t) şeklinde, belirli bir gürültülü görüntü ve zaman adımı için eklenmiş olan gürültüyü tahmin eden bir fonksiyondur.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*1sWiUpADhiD-PHgm.jpg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*r1Wu2QtgTzh4qwUK.png" /><figcaption>Source : <a href="https://erdem.pl/2023/11/step-by-step-visual-introduction-to-diffusion-models">erdem.pl</a></figcaption></figure><h3>3. Öğrenme Hedefi: Basitleştirilmiş Kayıp Fonksiyonu</h3><p>Modeli eğitmek için, modelin tahmin ettiği gürültü (ϵθ​) ile ileri süreçte eklenen gerçek gürültünün (ϵ) birbirine olabildiğince yakın olmasını isteriz. Bu, sezgisel olarak basit bir Ortalama Kare Hatası (Mean Squared Error yani MSE) kayıp fonksiyonuna yol açar:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/701/1*HQidx3nVR-KenszFFrYyEQ.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/789/0*W2DM-x-5NNIwNaC9.jpg" /></figure><h3>Bir Algoritmanın Zarafeti</h3><p>Eğitim tamamlandığında, yeni bir görüntü yaratma (örnekleme) süreci, tamamen rastgele bir gürültü olan xT​∼N(0,I) ile başlar. Ardından, t=T,T−1,…,1 için döngüye girilir. Her adımda model, mevcut xt​’deki gürültüyü tahmin eder (ϵθ​(xt​,t)) ve bu tahmini kullanarak bir önceki, daha az gürültülü olan xt−1​’i hesaplar. Bu süreç, adım adım gürültüyü temizleyerek sonunda yapılandırılmış bir görüntü olan x0​’ı ortaya çıkarır.</p><p>Difüzyon modellerinin gücü, karmaşık bir üretken görevi, iyi tanımlanmış ve yönetilebilir bir dizi gürültü giderme adımına bölmesinden gelir. Temelindeki matematik, olasılık teorisinin ve stokastik süreçlerin derinliklerinden beslenir ve öğrenme hedefini “gürültüyü tahmin etme” gibi şaşırtıcı derecede basit bir amaca indirger. Bu zarafet, onları günümüz üretken yapay zekasının en önemli paradigmalarından biri haline getirmiştir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*fgKTknwRZtv7hw1C.png" /></figure><h3>CIFAR Diffusion : Diffüzyon Modellerinde Zaman ve Bağlam Gömülü (Embedding) Katmanlarının Rolü ve U-Net Mimarisi</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/734/1*xris_LTqmLKr1kLCcQCH0A.png" /></figure><p>Verilen şemada, modeldeki ileri beslemeli aşamada hidden (girdi) tensörünün nasıl işlendiğini ve farklı seviyelerde zaman (time) ve bağlam (context) gömülerinin nasıl eklendiğini gösteren soyut bir mimari şemadır.</p><ul><li><strong>hidden:</strong> Girdi özellik haritası (feature map) olarak düşünülebilir.</li><li><strong>up0, up1, up2:</strong> Modelin yukarı örnekleme (upsampling) aşamalarındaki ara katmanlarıdır.</li><li><strong>context ve time embedding:</strong> Zaman (diffüzyon adımı) ve koşul (sınıf etiketi veya bağlam) bilgilerini temsil eden vektörlerdir.</li><li>Şemada gömüler (embedding) kırmızı üçgenlerle gösterilmiş ve bu vektörler, ara katman çıktılarıyla toplanarak (⊕) veya çarpılarak (⊗) modelin farklı seviyelerine entegre edilmiştir.</li></ul><p>Bu yapı, modelin zaman ve sınıf koşullarını her katmanda bilerek işlerken, özgün ve koşullu örnekler üretebilmesini sağlar.</p><p>Kodda, zaman ve sınıf koşullu difüzyon modellerini eğitmek için küçük bir U-Net mimarisi ve Diffusion Probabilistic Models (DDPM) algoritması kullanılmıştır.</p><h3>1. Sinüsoidal Zaman Gömüsü (sinusoidal_embedding)</h3><pre>def sinusoidal_embedding(timesteps, dim):<br>    timesteps = timesteps.float()<br>    device = timesteps.device<br>    half = dim // 2<br>    inv_freq = torch.exp(-math.log(10000) * torch.arange(half, device=device) / (half - 1))<br>    args = timesteps[:, None] * inv_freq[None, :]<br>    return torch.cat([torch.sin(args), torch.cos(args)], dim=-1)</pre><ul><li><strong>Amaç:</strong> Zaman bilgisi, modelin farklı zaman adımlarını (diffüzyonun kademeleri) öğrenebilmesi için yüksek boyutlu bir vektörle temsil edilir.</li><li>Bu yaklaşım, Transformer modellerinde kullanılan pozisyonel kodlamalara benzer.</li><li>Böylece model, zamana göre değişen bilgiyi ağın her katmanına entegre edebilir.</li></ul><h3>2. ResBlock Sınıfı (Residual Block)</h3><pre>class ResBlock(nn.Module):<br>    def __init__(self, in_ch, out_ch, time_emb_dim, class_emb_dim):<br>        ...<br>    def forward(self, x, t_emb, c_emb):<br>        h = self.conv1(F.silu(self.norm1(x)))<br>        h = h + self.time_fc(t_emb)[:, :, None, None]<br>        h = h + self.class_fc(c_emb)[:, :, None, None]<br>        h = self.conv2(F.silu(self.norm2(h)))<br>        return h + self.res_conv(x)</pre><ul><li>Girişten çıkan x tensörü, önce gruplanmış normalizasyon ve konvolüsyonla işlenir.</li><li>Daha sonra, zaman ve sınıf gömüleri uygun lineer katmanlardan geçirilerek konvolüsyon çıktısına eklenir (bu da şemadaki kırmızı üçgenlerin uygulandığı yerlere denk gelir).</li><li>Son olarak, orijinal x ile skip connection (artımlı bağlantı) yapılır.</li><li><strong>Grup Norm</strong> kullanımı, küçük batch boyutlarında bile stabilite sağlar.</li></ul><h3>3. Küçük U-Net Mimarisi</h3><pre>class UNet(nn.Module):<br>    def __init__(self, num_classes, base_ch=16, time_emb_dim=64, class_emb_dim=64):<br>        ...<br>    def forward(self, x, t, y):<br>        t_emb = sinusoidal_embedding(t, self.time_mlp[0].in_features)<br>        t_emb = self.time_mlp(t_emb)<br>        c_emb = self.class_emb(y)<br>        ...<br>        # Downsampling<br>        x1 = self.in_conv(x)<br>        x2 = self.down1(x1, t_emb, c_emb)<br>        x3 = self.downsample(x2)<br>        x4 = self.down2(x3, t_emb, c_emb)<br>        x5 = self.downsample(x4)<br>        mid = self.bot(x5, t_emb, c_emb)<br>        # Upsampling + skip connections<br>        u = self.upsample(mid)<br>        u = self.up1(u, t_emb, c_emb) + self.skip_proj_4_to_2(x4)<br>        u = self.upsample(u)<br>        u = self.up2(u, t_emb, c_emb) + self.skip_proj_2_to_1(x2)<br>        return self.out_conv(u)</pre><ul><li>Girdi x (örneğin 32x32 RGB görüntü), önce konvolüsyonla işlenir.</li><li>down1 ve down2 residual blokları ile çözünürlük kademeli olarak düşürülür (downsampling).</li><li>Her residual blokta, zaman (t_emb) ve sınıf (c_emb) gömüleri eklenir.</li><li>bot katmanı, en düşük çözünürlükteki derin temsil için.</li><li>Yukarı örnekleme (upsampling) yapılırken, önceki katmanlardaki özellik haritalarının (x4, x2) projeksiyonları ile skip bağlantılar yapılır. Bu, özelliklerin bozulmadan geri taşınmasını sağlar.</li><li>Görseldeki up0, up1, up2 katmanları, bu yukarı örnekleme aşamalarına karşılık gelir.</li><li>Model çıkışı tekrar orijinal 3 kanallı görüntü boyutundadır.</li></ul><h3>4. DDPM Sınıfı (Diffusion Process)</h3><pre>class DDPM:<br>    def __init__(self, model, timesteps=100, beta_start=1e-4, beta_end=0.02):<br>        ...<br>    def q_sample(self, x_start, t, noise=None):<br>        ...<br>    def p_sample(self, x, t, y, guidance_scale=1.0):<br>        ...<br>    def sample(self, shape, device, y, guidance_scale=1.0):<br>        ...</pre><ul><li><strong>q_sample:</strong> Verilen temiz görüntüyü t zaman adımında gürültüyle bozar (forward diffusion).</li><li><strong>p_sample:</strong> Ters diffüzyon adımı, modelden tahmin edilen gürültüyle görüntüyü temizlemeye çalışır. Burada guidance_scale parametresiyle sınıf koşullu rehberlik sağlanır (classifier-free guidance).</li><li><strong>sample:</strong> Ters yönde tüm zaman adımlarını tekrarlayarak, rastgele gürültüden örnek üretir.</li></ul><h3>5. Eğitim Döngüsü</h3><ul><li>CIFAR-10 veri seti üzerinde eğitim yapılır.</li><li>Küçük batch boyutu (8) ile CPU kullanımını minimize eden ayarlar kullanılır. Kişisel bilgisayarımda GPU olmadığı için CPU ile çalıştım.</li><li>classifier-free guidance için %10 olasılıkla null (boş) sınıf etiketi verilir. Bu sayede model, koşullu ve koşulsuz üretim yapabilir.</li><li>Her batch için gürültü eklenir, model bu gürültüyü tahmin etmeye çalışır.</li><li>Eğitim sonunda model kaydedilir ve aralıklı olarak örnekler disk üzerine kaydedilir.</li></ul><p>Kaynak koda ulaşmak isterseniz :</p><p><a href="https://github.com/Umit-Yilmaz/Cifar10-Diffusion">https://github.com/Umit-Yilmaz/Cifar10-Diffusion</a></p><p><em>Okudğunuz için teşekkür ederim. Eğer yanlış ya da eksik bilgi varsa lütfen belirtin.</em></p><p>Bir sonraki yazımda görüşmek üzere…</p><p>Regards.</p><p>Ümit</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f24399b7386c" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Kelimelerden Sayılara : Vektör Temsilleri, Vektör Gömmeleri ve Transformer Mimarisi]]></title>
            <link>https://medium.com/@realumit219/kelimelerden-say%C4%B1lara-vekt%C3%B6r-temsilleri-vekt%C3%B6r-g%C3%B6mmeleri-ve-transformer-mimarisi-bed875c08265?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/bed875c08265</guid>
            <category><![CDATA[artificial-intelligence]]></category>
            <category><![CDATA[yapay-zeka]]></category>
            <category><![CDATA[derin-öğrenme]]></category>
            <category><![CDATA[nlp]]></category>
            <category><![CDATA[doğal-dil-işleme]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Sun, 20 Apr 2025 18:37:45 GMT</pubDate>
            <atom:updated>2025-04-20T18:37:45.922Z</atom:updated>
            <content:encoded><![CDATA[<h3>Kelimelerden Sayılara : Vektör Temsilleri, Vektör Gömmeleri ve Transformer Mimarisi</h3><p>Merhaba bu yazımda, “Vector Embeddings” yapılarından bahsedeceğim. Güzel dilimiz Türkçe’de yaygın olarak Vektör Gömme olarak geçse de, Vektör Temsili, Vektör Yerleştirme gibi kullanımları da mevcuttur.</p><p>Vektör Temsili, makine öğrenimindeki en büyüleyici ve kullanışlı kavramlardan birisidir. Birçok doğal dil işleme, öneri ve arama algoritmasının merkezinde yer alırlar. Öneri motorları, sesli asistanlar, dil çevirmenleri gibi yapılar kullandıysanız, yerleştirmelere dayanan sistemlerle karşılaşmışsınızdır.</p><p>Bilgisayarlar sadece sayıları anlar. Gerçek hayatta kullandığımız sayısal haricindeki tüm ifadeler bilgisayarlar için bir anlam ifade etmez. Ancak vektör temsilleri üreten makine öğrenimi modelleri sayesinde ifadeler anlam kazanır. Yani Vektör Temsilleri, yüksek boyutlu verilerin (örneğin metin, resim ve hatta ses) anlamsal ilişkileri koruyan yoğun, sayısal vektörlere eşlenmesi anlamına gelir.</p><p>Bilgisayarların yanına makine öğrenimi algoritmaları da, çalışmak için sayılara ihtiyaç duyar. Bazen sayısal değerlerden oluşan sütunlar veya bunlara çevrilebilen değerler (sıralı, kategorik, vb.) içeren bir veri kümemiz olur. Diğer zamanlarda ise tüm bir metin belgesi gibi daha soyut bir şeyle karşılaşırız. Bu tür verilerle çeşitli işlemler yapmak için sadece sayı listeleri olan vektör yerleştirmeleri oluştururuz. Tüm bir paragraf metin veya başka bir nesne bir vektöre indirgenebilir. Sayısal veriler bile daha kolay işlemler için vektörlere dönüştürülebilir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*OI531SQRSkHHEfM7" /><figcaption>Objelerin vektörlere dönüştürülmesi [Pinecone]</figcaption></figure><p>Basitçe ifade etmek gerekirse, vektör temsilleri makinelerin doğal dili anlayıp işleyebilmesi için kelimeleri veya cümleleri sayılara (yani vektörlere) dönüştürmenin bir yoludur.</p><p>Örneğin:</p><p>“Domates” → [0.12, 0.97, -0.45, …] (vektör biçimi)</p><p>Ancak vektörleri önemli hale getiren özel bir şey var. Bu gösterim, insanların algıladığı semantik benzerliği yani anlamı, vektör uzayındaki yakınlığa çevirmeyi mümkün kılıyor. Başka bir deyişle, görseller, ses kayıtları, haber makaleleri, kullanıcı profilleri, hava durumu desenleri ve siyasi görüşler gibi gerçek dünya nesnelerini ve kavramlarını vektör yerleştirmeleri olarak temsil ettiğimizde, bu nesnelerin ve kavramların anlamsal benzerliği, vektör uzaylarındaki noktalar olarak birbirlerine ne kadar yakın olduklarına göre ölçülebilir. Bu nedenle vektör temsilleri; kümeleme, öneri ve sınıflandırma gibi yaygın makine öğrenimi görevleri için mihenk taşıdır. Etkileyici değil mi :)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/764/0*XVMbWJUxgNEdsD0z.png" /><figcaption>Vektör yerleştirmeleri, ifadeleri sayısal uzaya eşleyerek bir olasılıklar evreninin kapılarını açar [DataCamp]</figcaption></figure><h3>Vektör Temsil Tipleri</h3><p>Bu Medium yazımda, yazı tipindeki ifadelerin vektörlere çevrilmesi için kullanılan yöntemler açıklanmıştır. Kelime, cümle, resim, ses gibi birçok farklı çeşitte ifadelerin vektörlere çevrilmesini sağlayan yöntemler mevcuttur.</p><h4>1. One-Hot Encoding</h4><p>Her kelime, kelime sayısı kadar uzunlukta bir vektörle temsil edilir. Sadece bir eleman 1, diğerleri 0’dır.</p><p>Örnek:</p><ul><li>“kedi” → [0, 1, 0, 0]</li><li>“köpek” → [1, 0, 0, 0]</li></ul><p><strong>Eksileri:</strong></p><ul><li>Anlam içermez.</li><li>Büyük veri setlerinde boyutu çok büyük olur, verimsizdir.</li></ul><h4>2. TF-IDF (Term Frequency-Inverse Document Frequency)</h4><p>Kelimelere, belgedeki önemine göre ağırlık verir. Sık geçen ama anlamsız kelimeler (“ve”, “bir”…) düşük ağırlık alır, nadir ama anlamlı kelimeler (örneğin “gömme”, “fotosentez”) yüksek değer alır.</p><p><strong>Eksileri:</strong></p><ul><li>Bağlam bilgisi taşımaz.</li></ul><blockquote>İki farklı cümlemiz olsun:</blockquote><blockquote><strong>“Paris’te tatil yaptım.”</strong></blockquote><blockquote><strong>“Paris Hilton yeni bir marka çıkardı.”</strong></blockquote><blockquote>TF-IDF her iki cümlede de <strong>“Paris”</strong> kelimesini aynı şekilde değerlendirir çünkü bu yöntem sadece kelimenin metin içinde ne kadar geçtiğine ve kaç belgede bulunduğuna bakar. Ancak:</blockquote><blockquote><strong>1. cümlede “Paris”</strong> → Şehir ismi</blockquote><blockquote><strong>2. cümlede “Paris”</strong> → Bir kişinin adı</blockquote><blockquote><strong>TF-IDF bu farkı anlayamaz.</strong><br> Yani bağlamsal anlamı göz önüne almadığı için aynı kelimenin farklı anlamlarını ayırt edemez.</blockquote><h4>3. Word Embeddings (Kelime Gömmeleri)</h4><p>Kelimeleri <strong>yoğun (dense) vektörler</strong> halinde temsil eder. Benzer anlamlı kelimeler, benzer vektörlere sahip olur.</p><h4>a.Word2Vec</h4><p>Google tarafından geliştirilen Word2Vec, kelime yerleştirmelerinde öncü modellerden biriydi. Büyük bir metin gövdesinden kelime ilişkilerini öğrenmek için sinir ağlarını kullanır. Word2Vec’in iki temel yaklaşımı vardır:</p><ol><li><strong>Bag of Words (CBOW)</strong> : CBOW modeli, bir cümlede <strong>çevresindeki kelimelere bakarak hedef kelimeyi tahmin etmeye çalışır</strong>.</li></ol><p><strong><em>“Bağlam → Hedef kelime”</em></strong><em> şeklinde çalışır.</em></p><blockquote>Cümlemiz şu olsun:</blockquote><blockquote><strong><em>“Köpek parkta oynuyor.”</em></strong></blockquote><blockquote>Modelin görevi, bazı kelimeleri bağlam olarak alıp, aradaki hedef kelimeyi tahmin etmektir.</blockquote><blockquote>Örneğin:</blockquote><blockquote><strong>Bağlam kelimeleri:</strong> “Köpek”, “oynuyor”</blockquote><blockquote><strong>Modelin tahmin etmeye çalıştığı kelime:</strong> <strong>“parkta”</strong></blockquote><blockquote>CBOW modeli şöyle çalışır:</blockquote><blockquote><em>“Köpek &lt;WORD&gt; oynuyor” cümlesinde &lt;WORD&gt; token’i yerine “parkta” kelimesini tahmin eder.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0GARYJFVfoX2EHGl.jpeg" /><figcaption>CBOW Mimarisi [Youtube: The Semicolon]</figcaption></figure><p><strong>2. Skip-Gram: Skip-Gram</strong>, CBOW modelinin tersidir.<br> Yani bu kez model:</p><p><strong><em>“Hedef kelime → Bağlam kelimeleri”</em></strong><em> ilişkisini öğrenmeye çalışır.</em></p><blockquote>Yine bir örnek ile açıklayayım. Bu kez cümlemiz şu olsun:</blockquote><blockquote><strong><em>“Çocuk parkta salıncağa bindi.”</em></strong></blockquote><blockquote>Burada model bir kelimeyi hedef olarak alır ve onun etrafındaki kelimeleri tahmin etmeye çalışır.</blockquote><blockquote>Bu cümlede örnek olarak hedef kelime salıncak olsun.</blockquote><blockquote><strong>Hedef kelime:</strong> <strong>“salıncak+a”</strong></blockquote><blockquote><strong>Modelin tahmin etmeye çalıştığı bağlam kelimeleri:</strong><br> <strong>“parkta”</strong>, <strong>“bindi”</strong></blockquote><blockquote>Skip-Gram modeli şöyle çalışır:</blockquote><blockquote><strong><em>“salıncağa” → “parkta” ve “bindi”</em></strong><em> kelimelerini tahmin et</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/850/0*Zl3MTU-Ssahy5W8G.png" /><figcaption>Skip-gram mimarisi</figcaption></figure><blockquote>Anlam ilişkilerini yakalar. Ünlü ve klasik bir örnek ile açıklamak gerekirse:<br>vektör(&quot;kral&quot;) - vektör(&quot;erkek&quot;) + vektör(&quot;kadın&quot;) ≈ vektör(&quot;kraliçe&quot;)</blockquote><h4>b.GloVe</h4><p>Stanford Üniversitesi tarafından geliştirilen GloVe, kelime yerleştirmeleri için bir diğer popüler modeldir. Tahmine dayalı olan Word2Vec’in aksine, GloVe tüm korpustaki kelimelerin eş-geçiş matrisini kullanan sayım tabanlı bir modeldir. GloVe, kelime eş-geçişlerinin (Literatürde : <strong><em>co-occurrence</em></strong> olarak geçiyor) küresel istatistiksel bilgilerini yakalayan kelime vektörleri oluşturmayı amaçlar.</p><p>Avantaj: GloVe hem yerel hem de küresel bağlamı yakalamada iyi performans gösterir ve bu da onu çeşitli NLP görevleri için uygun hale getirir.<br>Örnek: “Buz” ve “kar” gibi kelimeler bir korpusta sıklıkla <em>eş-geçiyorsa</em>, GloVe “buz” ve “kar”ın vektör uzayında yakın olduğu ve anlamsal ilişkilerini yansıtan vektörler oluşturur.</p><p>Kısacası, tüm metin boyunca kelime <strong><em>co-occurrence</em></strong> bilgilerini kullanır. Daha istatistiksel bir yöntemdir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/850/0*YXoW8UZ0hV0AR4x4.png" /><figcaption>GloVe Mimarisi</figcaption></figure><h4>4. Anlam Duyarlı Gömme Yöntemleri - Modern Yöntemler</h4><p>Aynı kelime farklı cümlelerde farklı anlamlar taşıyabilir. Bu yöntemler bunu dikkate alır.</p><h4>ELMo</h4><p>Kelimenin çevresindeki kelimelere göre vektör oluşturur.</p><blockquote><strong>ELMo</strong> ( <strong>dil modelinden yerleştirmeler</strong> ), bir kelime dizisini karşılık gelen bir vektör dizisi olarak temsil etmek için bir kelime yerleştirme yöntemidir. Allen Yapay Zeka Enstitüsü ve Washington Üniversitesi’ndeki araştırmacılar tarafından oluşturulmuş ve ilk olarak Şubat 2018&#39;de yayınlanmıştır. Giriş olarak karakter düzeyini alan ve yaklaşık 30 milyon cümle ve 1 milyar kelimeden oluşan bir gövdede eğitilen kelime düzeyinde yerleştirmeler üreten çift yönlü bir LSTM’dir [wikipedia].</blockquote><h4>BERT (Bidirectional Encoder Representations from Transformers)</h4><p>BERT, gömme modelleri alanında önemli bir ilerlemeyi temsil eder. Geleneksel modellerin kelimeleri bağımsız olarak ele almasının aksine, BERT bağlamsal (contextualized) gömmeler üretir. Yani aynı kelime, bulunduğu bağlama göre farklı vektörlerle temsil edilebilir. BERT, Transformer mimarisi üzerine kurulmuştur ve cümledeki kelimeler arasındaki ilişkileri modellemek için dikkat (attention) mekanizmalarını kullanır.</p><h4>Temel Özellik:</h4><p>BERT çift yönlü (bidirectional) bir yapıya sahiptir; yani eğitim sırasında bir kelimenin hem solundaki hem de sağındaki bağlamı dikkate alır. Bu, kelimenin cümle içindeki tam anlamını yakalayabilmesini sağlar. Bu özellik, kelimeleri yalnızca tek bir yönde işleyen modellere göre önemli bir avantaj sunar.</p><h4>Mimari:</h4><p>BERT, gömme oluşturmak için çok katmanlı Transformer yapısı kullanır. Her bir Transformer katmanı, kelimeler arasındaki ilişkileri, cümledeki uzaklıkları dikkate almaksızın, kendi üzerine dikkat (self-attention) mekanizmaları ile yakalar.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/824/0*BhIG7XyCBmg_In-W.png" /><figcaption><strong>Transformer mimarisi</strong> BERT’in <strong>temel yapı taşıdır</strong>.</figcaption></figure><h4>Eğitim:</h4><p>BERT iki görevle eğitilir:</p><ol><li><strong>Maskelenmiş Dil Modellemesi (Masked Language Modeling — MLM)</strong></li><li><strong>Sonraki Cümleyi Tahmin Etme (Next Sentence Prediction — NSP)</strong>.</li></ol><p><strong>MLM</strong> görevinde, giriş cümlesindeki bazı kelimeler maskelenir ve model bu eksik kelimeleri tahmin etmeyi öğrenir.</p><p><strong>NSP</strong> görevinde ise model, iki cümlenin ardışık olup olmadığını tahmin etmeyi öğrenir.</p><h4>Uygulama:</h4><p>BERT, soru-cevap sistemleri ve metin sınıflandırma gibi görevlerde oldukça başarılıdır. Örneğin, bir müşteri destek sisteminde BERT, müşteri sorularını yüksek doğrulukla anlayabilir ve yanıtlayabilir.</p><h4>Örnek:</h4><p><strong>“Çocuk nehrin kenarında oynarken ayağı banktan kaydı.”</strong></p><p>Bu cümlede <strong>BERT</strong>, <strong>“bank”</strong> kelimesi için bağlama göre <strong>farklı gömme vektörleri</strong> üretir.<br>Bu sayede, “bank” kelimesinin burada <strong>“oturulan bank”</strong> anlamında mı yoksa <strong>“finans kurumu”</strong> anlamında mı kullanıldığını doğru şekilde ayırt edebilir.</p><p>Örneğin yukarıdaki cümlede <strong>“bank”</strong> → <strong>“oturulan yer”</strong> anlamındadır.</p><p>Aynı kelime başka bir cümlede farklı anlamda olabilir:</p><blockquote><strong><em>“Banka, bu yıl iflas etti”</em></strong></blockquote><p>Bu cümlede ise <strong>“bank”</strong> → <strong>“finans kurumu”</strong> anlamındadır.</p><h4>Not:</h4><p><strong>BERT</strong>, her iki durumda da kelimenin <strong>bağlamını analiz ederek</strong> anlam farkını yakalar ve her kullanım için farklı bir vektör üretir.</p><p>Transformer mimarisinde iki ana bileşen vardır:</p><ul><li><strong>Encoder</strong> (BERT bunu kullanır)</li><li><strong>Decoder</strong> (GPT gibi modeller bunu kullanır)</li></ul><p>Yani:</p><ul><li><strong>BERT</strong> = Transformer’ın <strong>Encoder</strong> kısmını kullanır.</li><li><strong>GPT</strong> = Transformer’ın <strong>Decoder</strong> kısmını kullanır.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/0*itrYCFnrzNwkjmO7" /><figcaption>Cümle üretimi için decoder-only mimarisi</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/756/1*eZYOLKdl__N60fplPrqqPA.png" /><figcaption>Gömmelerin görselleştirilmesi : <a href="https://huggingface.co/spaces/jphwang/colorful_vectors">https://huggingface.co/spaces/jphwang/colorful_vectors</a></figcaption></figure><h3>Transformer Nedir?</h3><p>“Bir Transformer modeli, bu cümledeki kelimeler gibi sıralı verilerdeki ilişkileri izleyerek bağlamı ve dolayısıyla anlamı öğrenen bir sinir ağıdır.” [Openzeka Blog]</p><p>Transformer, 2017 yılında Google tarafından tanıtılan bir model mimarisidir. En önemli özellikleri:</p><ul><li><strong>Self-Attention</strong> (Kendi üzerine dikkat) mekanizması kullanır.</li><li>Uzun mesafeli kelime ilişkilerini etkili bir şekilde yakalayabilir.</li><li>LSTM veya GRU gibi sırayla çalışan modellere göre paralel çalışabilir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*CjZjyHGB1yNiqWqe.jpg" /><figcaption>Transformer mimarisindeki Multi-Headed Attention ve Self Attention</figcaption></figure><h3>Self-Attention</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/700/0*V9Il6GeNCocz0crh" /></figure><p>Self-Attention, bir kelimenin <strong>cümledeki diğer tüm kelimelere olan ilgisini</strong> (dikkatini) hesaplar. Amaç, her kelimenin <strong>bağlam içindeki anlamını</strong> yakalayabilmektir</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/893/0*nwkIQ0eG10mzrK9S" /><figcaption>Self-Attention Skoru</figcaption></figure><p>Q, Kᵀ ve V’nin ne olduğunu açıklayayım:</p><ul><li><strong>‘Q’</strong>, <em>Sorgu Matrisi</em>’dir (Query Matrix).</li><li><strong>‘Kᵀ’</strong>, <em>Anahtar Matrisinin transpozu</em>dur (Key Transpose).</li><li><strong>‘V’</strong>, <em>Değer Matrisi</em>’dir (Value Matrix).</li><li><strong>‘Z’</strong>, <em>Self-Attention Skor Matrisi</em>’dir.</li></ul><p>Q, K ve V; cümle/metin dizisi için oluşturulan matrislerdir. <strong>Bu çok önemli bir noktadır.</strong></p><p>Örnek cümle:<br> <strong>“Ali kitap okuyor çünkü sınavı var.”</strong></p><p>Bu cümlede “okuyor” kelimesi hem “Ali” ile hem de “kitap” ile anlam ilişkisi taşır.<br>-Self-Attention, “okuyor” kelimesinin bu ilişkileri öğrenmesini sağlar.</p><p>Her kelime için üç ayrı vektör oluşturulur:</p><ul><li><strong>Query (Sorgu)</strong></li><li><strong>Key (Anahtar)</strong></li><li><strong>Value (Değer)</strong></li></ul><p>Bu vektörler arasında “Self-Attention skoru” hesaplanır:</p><pre>Attention = softmax((Query × Keyᵀ) / √d_k) × Value</pre><p>Bu işlem sonucunda her kelimenin çıktısı, tüm diğer kelimelerle olan ilişkisini yansıtan <strong>ağırlıklı bir ortalama</strong> halini alır.</p><h3>Multi-Head Attention (Çok Başlı Dikkat)</h3><p>Multi-Head Attention, girdiyi birden fazla başa bölerek Self-Attention genişletir ve modelin çeşitli ilişkileri ve örüntüleri yakalamasını sağlar. Self-Attention çok güçlü bir yapı olsa da <strong>tek bir dikkat başlığı</strong>, sadece belirli bir ilişkiyi öğrenebilir. <strong>Multi-Head Attention</strong> ise aynı anda <strong>farklı dikkat başlıkları</strong> (attention heads) kullanarak:</p><ul><li>Farklı anlam ilişkilerini,</li><li>Farklı bağlamsal yapıları aynı anda öğrenir</li></ul><p>Örneğin, aşağıdaki gibi 4 başlıklı bir Multi-Head Attention düşünelim:</p><ol><li>başlık: Öznenin fiille olan ilişkisini öğrenir.</li><li>başlık: Zamirlerin önceki cümlelerle olan bağını yakalar.</li><li>başlık: Zaman ifadesiyle eylemin ilişkisini analiz eder.</li><li>başlık: Belirsiz kelimeleri netleştirir</li></ol><p>Her başlık kendi <strong>Query, Key ve Value</strong> setiyle Self-Attention hesaplar.<br>Sonuçlar birleştirilip bir <strong>lineer dönüşümle (dense layer)</strong> birleşik bir çıktıya dönüştürülür.</p><h4>1. Doğrusal Dönüşüm (Linear Transformation):</h4><p>Giriş verisi <strong>X</strong>, farklı ağırlık matrisleri kullanılarak daha küçük boyutlu alt uzaylara yansıtılır (projeksiyon yapılır):</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/208/1*nSEXnOXaNoGHA1diFI2tTw.png" /></figure><p>Burada <strong>i</strong>, attention head (kafa) indeksini belirtir.</p><h4>2. Bağımsız Attention Hesaplaması:</h4><p>Her head (kafa), scaled dot-product formülünü kullanarak kendi self-attention işlemini bağımsız şekilde gerçekleştirir.</p><h4>3. Birleştirme (Concatenation):</h4><p>Tüm head’lerden elde edilen çıktılar <strong>birleştirilir (concat edilir)</strong>.</p><h4>4. Son Doğrusal Dönüşüm:</h4><p>Birleştirilmiş çıktı, istenen boyuta dönüştürülmek üzere son bir ağırlık matrisi ile çarpılır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/766/1*28lP9g_C7gSKsLJMA-XTIQ.png" /><figcaption>Matematiksel gösterim</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/986/1*xKrsJZ-JvXJVaQiRh_UJMg.png" /></figure><p>PyTorch’un <strong>nn.MultiheadAttention</strong>’ını kullanarak çok başlı dikkati nasıl uygulayabileceğinizi aşağıdaki kod bloğunda bulabilirsiniz, açıklamak için bol yorum satırı kullandım :) .Bu kod bloğunda, 64 boyutlu bir gömme boyutuyla 8 başlı çok başlı dikkat mekanizmasını başlatır ve bunu bir örnek giriş tensörüne uygular.</p><pre>import torch<br>import torch.nn as nn<br><br>gomme_boyutu = 64       # Her kelime/öğe için embedding (gömme) boyutu<br>baslik_sayisi = 8       # Multi-head attention&#39;da kaç farklı &quot;head&quot; kullanılacağı<br>dizi_uzunlugu = 10      # Giriş dizisinin uzunluğu (örneğin, 10 kelime)<br>toplu_islem_boyutu = 2  # Aynı anda işlenecek örnek sayısı (batch size)<br><br># Rastgele giriş tensörü oluştur (şekil: [dizi_uzunluğu, batch_size, gömme_boyutu])<br>giris = torch.rand(dizi_uzunlugu, toplu_islem_boyutu, gomme_boyutu)<br><br># Multi-head attention katmanını tanımla<br>cok_baslikli_dikkat = nn.MultiheadAttention(embed_dim=gomme_boyutu, num_heads=baslik_sayisi)<br><br># Self-attention işlemi uygula (sorgu, anahtar ve değer olarak aynı giriş kullanılır)<br>cikis, _ = cok_baslikli_dikkat(giris, giris, giris)<br><br># Çıktının boyutunu yazdır<br>print(&quot;Çıktı şekli:&quot;, cikis.shape)</pre><h4><em>Neden Birden Fazla Attention Head Kullanılır?</em></h4><p>a.Farklı ilişkileri yakalar: Her head, girişteki farklı bağıntılara odaklanabilir.</p><p>b.Öğrenme verimliliğini artırır: Paralel çalıştığı için, bağımlılıkların daha iyi öğrenilmesini sağlar.</p><p>c.Modelin sağlamlığını artırır: Model, tek bir dikkat (attention) modeline bağımlı kalmaz; bu da aşırı öğrenmeyi (overfitting) azaltır.</p><p>Cümle: <strong>“Ayşe, onu dün aradı.</strong></p><ul><li><strong>Self-Attention</strong>, “onu” kelimesinin “Ayşe”ye mi yoksa başka birine mi referans verdiğini analiz eder.</li><li><strong>Multi-Head Attention</strong>, birden fazla dikkat mekanizmasıyla farklı olasılıkları değerlendirir (örneğin zaman, özne, bağlam analizi).</li></ul><p>Yapı görevi olarak kıyaslamak gerekirse Self-Attention, bir kelimenin cümledeki diğer kelimelerle olan bağını hesaplarken Multi-Head Attention, farklı Self-Attention’lar ile çok yönlü bağlam bilgisi yakalar.</p><p><em>Okudğunuz için teşekkür ederim. Eğer yanlış ya da eksik bilgi varsa lütfen belirtin.</em></p><p>Bir sonraki yazımda görüşmek üzere…</p><p>Regards.</p><p>Ümit</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=bed875c08265" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[24'ün Son Demlerinde Yapay Zeka Öğrenme Yol Haritası]]></title>
            <link>https://medium.com/@realumit219/24%C3%BCn-son-demlerinde-yapay-zeka-%C3%B6%C4%9Frenme-yol-haritas%C4%B1-d4bee36c7b44?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/d4bee36c7b44</guid>
            <category><![CDATA[mathematics]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[statistics]]></category>
            <category><![CDATA[machine-learning-ai]]></category>
            <category><![CDATA[deep-learning]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Wed, 06 Nov 2024 13:52:15 GMT</pubDate>
            <atom:updated>2024-11-06T14:15:10.333Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba bu yazımda 2025 yılına başlamadan, 2024 yılını bitirmeden Yapay Zeka öğrenmek için bir yol haritasını sizlerle paylaşmak istedim.</p><p>Bir önceki yazım olan “<a href="https://medium.com/@realumit219/herkese-açık-öğrenin-0a6eec766349">Herkese Açık Öğrenin</a>” yazımdaki felsefeyi uygulamak için projelerimi, yazılarımı herkese açık bir şekilde yayımlıyorum. Bu yazımda da bu felsefeye bağlı kalmak için öğrenme haritamı sizlerle paylaşmak istedim.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*N9fst7vCtWR7W461.png" /><figcaption>Popüler Yapay Zeka Kütüphaneleri ve Araçları</figcaption></figure><p>Bu yol haritası <em>bottom-up</em> yaklaşımına dayanmaktadır. Önce teori ardından kodlama şeklinde planlanmıştır.</p><p>Yol haritası şu şekildedir:</p><blockquote><em>1- Olasılık ve İstatistik</em></blockquote><blockquote><em>2- Yapay Zeka İçin Matematik</em></blockquote><blockquote><em>3- Programlama Dili</em></blockquote><blockquote><em>4- Veri Bilimi Kursu</em></blockquote><blockquote><em>5- Makine Öğrenimi</em></blockquote><blockquote><em>6- Derin Öğrenme</em></blockquote><blockquote><em>7- Framework (PyTorch)</em></blockquote><blockquote><em>8- Papers</em></blockquote><blockquote><em>Bonus: Cheatsheet ve ücretsiz kitaplar</em></blockquote><h4>1- Olasılık ve İstatistik</h4><blockquote><em>Yapay zeka, matematiğin üç temel direğine dayanır;</em><strong><em> linear algebra, calculus ve probability and statistics</em></strong><em>.</em></blockquote><p>Olasılık ve İstatistik, bilgisayar bilimleri dahil olmak üzere birçok bilim dalında önemli rol oynamaktadır. Bunun başlıca sebebi verinin temizlenmesi, analiz edilmesi, veri hakkında yorumlar yapılması gibi süreçler sonucunda veri hakkında çıkarımda bulunulabilir.</p><p>Eğer Olasılık ve İstatistik derslerini içeren bir bölümde okuyorsanız ve bu derslerin içeriği olan “Sürekli/Ayrık Değerler, Bayes Teoremi, Dağılımlar, Regresyon” gibi konuları anladıysanız ekstra olarak çalışma yapmanıza gerek yoktur.</p><p>Kaynaklar:</p><p>Zero-to-hero : <a href="https://www.youtube.com/playlist?list=PLcNWqzWzYG2ufnZbJYffUkgYkhh3kS44L">Boğaziçili 117 Video</a></p><p>Alternatif : <a href="https://www.youtube.com/playlist?list=PL3nE1Yo1b4CpcEOgS3s80YUys7nGRqVPM">Probability and Statistics for Engineers</a></p><p>Özet : <a href="https://youtu.be/FAO1bIyZnaw?si=_JxsoT0eI-o3IKr6">Probability and Statistics for Data Science</a></p><h4>2- Yapay Zeka İçin Matematik</h4><p>Olasılık ve İstatistikte bahsettiğim şeylerin hepsi geçerlidir ancak Calculus, Linear Algebra, Differential Equations (ne kadar gerekli tartışılır) derslerini başarıyla tamamladığınızdan emin olun.</p><p>Kaynaklar:<br>- Mükemmel Kaynak: [Math for ML](<a href="https://arxiv.org/pdf/1802.01528">https://arxiv.org/pdf/1802.01528</a>) <br>- [Collab ](<a href="https://github.com/wandb/edu/tree/main/math-for-ml">https://github.com/wandb/edu/tree/main/math-for-ml</a>)<br>- [Matematik Videoları (7 Video)](<a href="https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi">https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi</a>)<br>- Özet: [Matrix Calculus](<a href="https://mml-book.github.io/book/mml-book.pdf">https://mml-book.github.io/book/mml-book.pdf</a>)</p><p>3- Programlama Dili<br>Python öğrenin ardından C/C++ ile Data Structures and Algorithms konularına hakim olun.</p><p>Kaynaklar:<br>- C Veri Yapıları: [Veri Yapıları] <a href="https://www.youtube.com/playlist?list=PLh9ECzBB8tJN9bckI6FbWB03HkmogKrFT">https://www.youtube.com/playlist?list=PLh9ECzBB8tJN9bckI6FbWB03HkmogKrFT</a><br>- Algoritma Analizi: [Algoritma Analizi] <a href="https://www.youtube.com/playlist?list=PLh9ECzBB8tJPTWIUbZjHZMMGuZcpHUv5h">https://www.youtube.com/playlist?list=PLh9ECzBB8tJPTWIUbZjHZMMGuZcpHUv5h</a></p><h4>4- Veri Bilimi Kursu</h4><p>Veri biliminin ne olduğunu öğrenmek, içerikte neler yapıldığını anlamak yapay zeka kariyeriniz için olumlu bir katkı olacaktır. Bu yüzden beğendiğiniz bir veri bilimi kursunu kavrayarak bitirin.</p><p>Önerilen Uzman: Vahit Keskin</p><p>Kaynaklar:<br>- BTK Data Science<br>- BTK Tensorflow</p><h4>5- Makine Öğrenimi</h4><p>Makine öğrenimi Yapay Zekanın bir çocuğudur diyebiliriz. Popüler makine öğrenimi algoritmalarının matematiksel ve istatistiksel olarak kavranması ardından sıfırdan kodlanmasını öneriyorum.</p><p>Kaynaklar:<br>- Başlangıç: [Makine Öğrenmesine Giriş]<br>- ML From Scratch: [eriklindernoren/ML-From-Scratch](<a href="https://github.com/eriklindernoren/ML-From-Scratch">https://github.com/eriklindernoren/ML-From-Scratch</a>) <br>- ML From Scratch: [JeremyNixon/oracle](<a href="https://github.com/JeremyNixon/oracle">https://github.com/JeremyNixon/oracle</a>)</p><p>Bonus Kaynaklar:<br>- [Machine Learning Systems Design](<a href="https://chiphuyen/machine-learning-systems-design">https://chiphuyen/machine-learning-systems-design</a>) <br>- [Evidently AI — ML System Design](<a href="https://www.evidentlyai.com/ml-system-design">https://www.evidentlyai.com/ml-system-design</a>)</p><h4>6- Derin Öğrenme</h4><p>Şimdi en önemli kısıma geldik. Derin öğrenme, yapay zeka ile sıkı sıkıya bağlıdır. Temel derin öğrenme algoritmalarının nasıl çalıştığını öğrenin. Bu algoritmaların nasıl çalıştığını, hangi matematiksel yöntemlere dayandığını kavrayın. Bunları başka birisine anlatabilecek kadar iyi öğrenmelisiniz.</p><p>Kaynaklar:<br>- [Complete Course — Coursera Deep Learning Specialization](<a href="https://www.coursera.org/specializations/deep-learning">https://www.coursera.org/specializations/deep-learning</a>) <br>- Türkçe Cheatsheet: [Derin Öğrenme Rehberi](<a href="https://colab.research.google.com/github/ayyucekizrak/Kapsamli_Derin_Ogrenme_Rehberi/blob/master/Kapsaml%C4%B1_Derin_%C3%96%C4%9Frenme_Rehberi.ipynb">https://colab.research.google.com/github/ayyucekizrak/Kapsamli_Derin_Ogrenme_Rehberi/blob/master/Kapsaml%C4%B1_Derin_%C3%96%C4%9Frenme_Rehberi.ipynb</a>) <br>- [Deep Learning Course](<a href="https://fleuret.org/dlc/">https://fleuret.org/dlc/</a>) <br>- [Full Stack Deep Learning — 2022 Course]</p><h4>7- Framework (PyTorch)</h4><p>Bir framework öğrenin ve öğrendiklerinizle temel bir derin öğrenme ya da yapay zeka modeli geliştirin. Bu modeli test edin, sonuçlarını geliştirmek için çeşitli yöntemler deneyin.</p><p>Kaynaklar:<br>- [PyTorch Eğitim Videoları (54 Video)](<a href="https://www.youtube.com/playlist?list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz">https://www.youtube.com/playlist?list=PLhhyoLH6IjfxeoooqP9rhU3HJIAVAJ3Vz</a>) <br>- [PyTorch Örnekleri](<a href="https://pytorch.org/examples/">https://pytorch.org/examples/</a>) <br>- [Minitorch](<a href="https://minitorch.github.io/">https://minitorch.github.io/</a>)</p><h4>8- Papers</h4><p>Güncel makaleleri okuyun ve bu makaleleri implemente etmeye çalışın.</p><p>Önerilen Makaleler:<br>- [Model Evaluation, Model Selection, and Algorithm Selection in Machine Learning](<a href="https://arxiv.org/pdf/1811.12808">https://arxiv.org/pdf/1811.12808</a>) <br>- [Transformers](<a href="https://arxiv.org/pdf/1706.03762">https://arxiv.org/pdf/1706.03762</a>)</p><h4>Bonus: Cheatsheet ve Ücretsiz Kitaplar</h4><p>Yapay zeka alanında faydalanabileceğiniz bazı cheatsheet ve kitaplar:</p><p>- [Stanford CS 230 Cheatsheet](<a href="https://stanford.edu/~shervine/teaching/cs-230/">https://stanford.edu/~shervine/teaching/cs-230/</a>) <br>- [Deep Learning Book, 20 Bölüm](<a href="https://www.deeplearningbook.org/">https://www.deeplearningbook.org/</a>) <br>- [Machine Learning Book — PyTorch ve ScikitLearn ile](<a href="https://github.com/rasbt/machine-learning-book">https://github.com/rasbt/machine-learning-book</a>)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=d4bee36c7b44" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Herkese Açık Öğrenin]]></title>
            <link>https://medium.com/@realumit219/herkese-a%C3%A7%C4%B1k-%C3%B6%C4%9Frenin-0a6eec766349?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/0a6eec766349</guid>
            <category><![CDATA[learn-in-public]]></category>
            <category><![CDATA[learning]]></category>
            <category><![CDATA[machine-learning]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Mon, 10 Jun 2024 18:48:28 GMT</pubDate>
            <atom:updated>2024-06-10T18:48:28.459Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba bu yazımda, “Learn In Public” felsefesinden bahsedeceğim. Bu felsefeye bağlı kalarak öğrenme sürecinizin nasıl daha efektif hale getirebileceğinizi aktarmaya çalışacağım.</p><p>“Learn In Public” terimi, öğrenme sürecinizi ve deneyimlerinizi çevrimiçi ortamlarda paylaşma pratiğini ifade eder. Learn In Public,</p><ul><li>Blog yazıları yazmak,</li><li>Cheatsheets oluşturmak</li><li>Konferanslara katılmak</li><li>Stack Overflow’da sorular sormak ya da yanıtlamak</li><li>Bir bülten başlatmak</li><li>Projelerinizi GitHub gibi platformlarda açık kaynak olarak yayınlamak</li><li>YouTube’da eğitim videoları çekmek</li><li>X’i (Twitter) efektif kullanmak… gibi çeşitli yollarla yapılabilir.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/764/1*pRXOkmg3ebS8W2iBDnWhBg.png" /></figure><p>Yazının devamında güzel dilimiz Türkçe’nin kullanımına dikkat edebilmek için “Learn In Public” yerine “Herkese Açık Öğrenme” kullanılacaktır.</p><h3>Herkese Açık Öğrenme - Özel Öğrenme</h3><blockquote>You have been trained your entire life to learn in private. You go to<br>school. You do homework. You get grades. And you keep what you<br>learned to yourself. Success is doing this better than everyone else around<br>you, over and over again.</blockquote><p><strong>Özel Öğrenme</strong><br>Hayatımız boyunca, öğrendiklerimizi kendimize saklayacak şekilde eğitildik. Okula gidip ödevlerimizi yapar, notlar alır ve öğrendiklerimizi başkalarından saklarız. Başarı, bu süreci etrafımızdaki herkesten daha iyi yapmaktan gelir. En iyi notları almak, en iyi üniversitelere girmek ve en iyi işleri almak için yalnız ve rekabetçi bir yarışa gireriz. Kariyerimizde de çalışmalarımız genellikle gizli kalır ve rakiplerimizle sırlarımızı paylaşmaktan kaçınırız [1].</p><p><strong>Herkese Açık Öğrenme</strong><br>Teknoloji sektörü ise daha açık bir yapıya sahiptir. Blog yazıları yazar, teknik başarılarımızı paylaşır ve kodumuzu açık kaynak olarak sunarız. Ancak birçok geliştirici, öğrendiklerini paylaşmadan, yalnızca kendi kariyerlerinde ilerlemeye odaklanır. Bu şekilde çalışan geliştiricilere Scott Hanselman “Karanlık Madde Geliştiricileri” [2] adını verir; varlıkları gözle görülür olsa da, çalışmalarına dair doğrudan kanıt bulmak zordur. Ağları genellikle mevcut veya eski iş arkadaşlarından oluşur ve <strong>iş ararken her seferinde sıfırdan</strong> başlarlar. Fırsatları yalnızca kariyer sayfalarından veya işe alım uzmanlarından bulurlar ve yılların deneyimini bir sayfalık özgeçmişlere sığdırmak zorunda kalırlar.</p><blockquote><em>When </em><strong><em>job hunting, they</em></strong><em> </em><strong><em>start from zero </em></strong><em>every time.</em></blockquote><p><strong>Herkese Açık Öğrenmenin Faydaları</strong><br>Alternatif bir yol olarak Herkese Açık Öğrenme, öğrendiklerinizi, öğrendikçe paylaşmanız anlamına gelir. Bilginizi açık kaynak hale getirir, ilgi alanlarınızın ve ilerlemenizin kamuya açık bir kaydını oluşturur ve mentorlardan, akranlardan ve destekçilerden oluşan bir topluluğun ilgisini çekersiniz. Bu topluluk, kendi başınıza öğrenebileceğinizden daha hızlı öğrenmenize yardımcı olur. Ağınız çok geniş olabilir ve her alanda uzman kişilerden oluşabilir, bu da kariyerinizde size büyük avantaj sağlar. Potansiyel işverenler çalışmalarınızı takip edebilir ve size fırsatlar sunabilir. Daha büyük olasılıkla, hiçbir zaman yayınlanmayan işlerin %80&#39;inden biri için sizi kendileri arayabilirler.</p><p>Herkese Açık Öğrenmek, yeni teknolojileri daha hızlı ve etkili bir şekilde öğrenmenizi sağlar. Uzmanlarla doğrudan iletişime geçebilir ve onların deneyimlerinden faydalanabilirsiniz. Toplulukla etkileşimde bulunarak, öğrenme sürecinizde ve kariyer gelişiminizde daha sürdürülebilir bir yol izlersiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/351/1*cb9QSnMdoNUwvHycn6FWKg.png" /><figcaption>Bilginizi Açık Kaynak Haline Getirin</figcaption></figure><h3>Herkese Açık Öğrenme Felsefesinin Avantajları</h3><ol><li>Geri Bildirim Alma : Öğrenme sürecinizi paylaşarak, diğer insanlardan geri bildirim alabilir ve hatalarınızı daha hızlı düzeltebilirsiniz.</li><li>Motivasyon Artışı : Çevrimiçi toplulukların desteği, öğrenme sürecinizde sizi motive edebilir.</li><li>Ağ Kurma : Benzer ilgi alanlarına sahip insanlarla bağlantı kurabilir ve yeni fırsatlar elde edebilirsiniz.</li><li>Bilgi Paylaşımı : Öğrendiklerinizi başkalarıyla paylaşarak, topluluğa katkıda bulunabilir ve başkalarının da öğrenmesine yardımcı olabilirsiniz.</li><li>Kariyer Fırsatları : Uzmanlık alanınızda yetkinliğinizi göstererek, potansiyel işverenlerin dikkatini çekebilirsiniz.</li></ol><p>Örneğin, bir yazılım geliştirici olarak yeni bir programlama dili öğrenirken yazdığınız kodları GitHub’da paylaşabilir, karşılaştığınız zorlukları ve çözümleri blog yazılarında anlatabilir veya öğrendiklerinizi videolarla anlatabilirsiniz. Bu süreçte, diğer geliştiricilerden geri bildirim alabilir ve daha etkili bir şekilde öğrenebilirsiniz.</p><blockquote><em>Sonuç olarak, %100 halka açık olmanıza gerek yok, ancak %0&#39;dan %5 veya %10&#39;a çıkmayı deneyin ve kariyerinize nasıl olumlu etki ettiğini görün. Bu yaklaşım, hem sizin hem de topluluğun kazanmasına yardımcı olur.</em></blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*C5i_g7eJMZP4AByGMdR1NA.png" /><figcaption>Networking Önemi [3]</figcaption></figure><h3><strong>Herkese Açık Öğrenme İçin Örnek Yöntemler</strong></h3><p>Herkese Açık Öğrenme sayesinde elde edeceğiniz avantajlar sizi cezbetti ve bu felsefeyi benimseyerek öğrenme sürecinize devam etmek istediğinizi varsayalım. Bu felsefeyle ilerlemek için sanal dünyada yaptıklarınızı paylşarak görünür olmalısınız. Peki nasıl? Örneğin bu felsefeye bağlı kalarak Makine Öğrenmesi konusunda ilerlemek istiyorsunuz.</p><p>Makine Öğrenmesi konusunda Herkese Açık Öğrenme felsefesine bağlı kalarak ilerlemek için şu adımları takip edebilir ve paylaşımlar yapabilirsiniz:</p><ol><li>Öğrenme Sürecinizi Planlayın<br> — Hedef Belirleme : Hangi makine öğrenmesi alanında uzmanlaşmak istediğinizi belirleyin (örneğin, denetimli öğrenme gibi).<br> — Kaynaklar Seçimi : Online kurslar, kitaplar, araştırma makaleleri ve açık kaynak projeler gibi kaynaklardan öğrenmeye başlayın.</li><li>Blog Yazıları Yazın (<a href="https://medium.com/">Önerilen Platform: https://medium.com/</a>)<br> — Temel Kavramları Anlatın : Öğrendiğiniz temel makine öğrenmesi kavramlarını, algoritmaları ve teknikleri açıklayan blog yazıları yazın.<br> — Uygulama Örnekleri : Kendi projelerinizde uyguladığınız yöntemleri ve elde ettiğiniz sonuçları paylaşın.<br> — Sorun Çözme : Karşılaştığınız sorunları ve bunları nasıl çözdüğünüzü adım adım anlatın.</li><li>Projelerinizi GitHub’da Paylaşın<br> — Açık Kaynak Projeler: Yaptığınız projeleri GitHub üzerinde paylaşarak, başkalarının da bu projelerden faydalanmasını sağlayın. Başka donanımlarda çalışıp çalışmadığı hakkında geri dönütler alabilirsiniz.<br> — Detaylı Dokümantasyon : Projelerinize detaylı dokümantasyon ekleyin, böylece başkaları projelerinizi kolayca anlayabilir ve katkıda bulunabilir.<br> — Versiyon Kontrolü : GitHub üzerinde versiyon kontrolü yaparak, projelerinizin farklı aşamalarını ve gelişim sürecini gösterebilirsiniz.</li><li>Sosyal Medya ve Topluluk Katılımı<br> — Paylaşımlar Yapın : X (Twitter), LinkedIn gibi platformlarda öğrendiklerinizi, başarılarınızı ve projelerinizi paylaşın.<br> — Topluluklara Katılın : Makine öğrenmesi ile ilgili forumlara, sosyal medya gruplarına ve online topluluklara katılarak, sorular sorun ve yanıtlar verin.<br> — Etkinliklere Katılın : Konferanslara, meetuplara ve hackathonlara katılarak, ağınızı genişletin ve diğer uzmanlarla tanışın.</li><li>Eğitim ve Sunumlar<br> — Sunumlar Yapın : Yerel veya uluslararası etkinliklerde, okul topluluklarında öğrendiklerinizi ve projelerinizi sunumlar aracılığıyla paylaşın. Sunumlarda gelen sorularla hem kendinizi hem de katılımcıların gelişmesine katkıda bulunabilirsiniz.</li><li>Geri Bildirim Alın ve Sürekli Gelişim<br> — Geri Bildirim Talep Edin : Paylaştığınız çalışmalar hakkında geri bildirim isteyin ve bu geri bildirimleri dikkate alarak kendinizi geliştirin.<br> — Sürekli Öğrenin : Makine öğrenmesi sürekli gelişen bir alan olduğundan, yeni bilgiler edinmeye ve öğrendiklerinizi paylaşmaya devam edin.</li></ol><p>Bu adımları takip ederek, makine öğrenmesi konusunda hem kendinizi geliştirebilir hem de topluluğa değerli katkılarda bulunabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_AeK3GoDhZVbJplQ.jpeg" /></figure><h4>X (Twitter) Nasıl Efektif Kullanılır ?</h4><p>Nasıl tweet atılır? Bunun cevabını ben de bilmiyorum :D. Fakat araştırmalarım sonucunda etkili olabilecek bir kaynak buldum. Bu kaynağa bağlı kalarak tweet’ler atmaya çalışacağım.</p><p>Bu kaynak aylar içinde 0&#39;dan 14 bin takipçiye ulaşan Instructor’ın yaratıcısı Jason’ın Anatomy of a Tweet’i.</p><blockquote>How to Twitter Successfully</blockquote><blockquote><a href="https://near.blog/how-to-twitter-successfully/?curius=1935">https://near.blog/how-to-twitter-successfully/?curius=1935</a></blockquote><p>X hesabınız varsa beni takip etmeyi unutmayın.</p><p>X Hesabım : <a href="https://x.com/umitcoding">https://x.com/umitcoding</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/850/1*ACbQ96_XP6hOleNF990Q7A.png" /><figcaption>Youtube Video [5]</figcaption></figure><h3>Ayrıca</h3><p><strong>Not everything must be public [4]</strong></p><h3><strong>Kaynaklar</strong></h3><p><em>[1] : </em><a href="https://learninpublic.org/v1-principles-learn-in-public.pdf"><em>https://learninpublic.org/v1-principles-learn-in-public.pdf</em></a></p><p><em>[2] : </em><a href="https://www.hanselman.com/blog/dark-matter-developers-the-unseen-99"><em>https://www.hanselman.com/blog/dark-matter-developers-the-unseen-99</em></a></p><p><em>[3] : </em><a href="https://www.npr.org/2011/02/08/133474431/a-successful-job-search-its-all-about-networking"><em>https://www.npr.org/2011/02/08/133474431/a-successful-job-search-its-all-about-networking</em></a></p><p><em>[4] : </em><a href="https://www.swyx.io/learn-in-private"><em>https://www.swyx.io/learn-in-private</em></a></p><p><em>[5] : </em><a href="https://www.youtube.com/watch?v=mgbEGFOtgqM"><em>https://www.youtube.com/watch?v=mgbEGFOtgqM</em></a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=0a6eec766349" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Makine Öğrenimi Algoritma Türleri]]></title>
            <link>https://medium.com/@realumit219/makine-%C3%B6%C4%9Frenimi-algoritma-t%C3%BCrleri-e15fbabbd7bc?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/e15fbabbd7bc</guid>
            <category><![CDATA[makine-öğrenmesi]]></category>
            <category><![CDATA[data-science]]></category>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[veri-bilimi]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Thu, 29 Feb 2024 16:02:31 GMT</pubDate>
            <atom:updated>2024-02-29T16:02:31.463Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba bu yazımda, Makine Öğrenimi Algoritma türlerinden bahsedeceğim.</p><h3>Makine Öğrenimi Algoritmaları</h3><p>Makine öğrenimi algoritmaları; bilgiyi işleme gücüne sahip olan makinelerin açıkça kodlanmadan, belirli istatistiksel modellere dayalı olarak geliştirilen ve bu modellere bağlı olarak tahminsel sonuçlar üreten özel algoritmalardır.</p><p>Bilgi işleme gücüne sahip makineler, büyük miktarda geçmiş veriyi işlemek ve bu verilerden belirli düzenleri tanımlamak için makine öğrenimi algoritmalarını kullanır.</p><p>Örneğin, Veri Bilimciler bir tıbbi hastalığın milyonlarca tarama görüntüsünü ve bunlara karşılık gelen teşhisi makine öğrenimini algoritmalarına aktararak makineleri eğitebilir. Bu sayede bir hastalığın tespit edilmesi kolaylaşır.</p><h3>Makine Öğrenimi Algoritması Türleri</h3><p>Dörde ayrılır. Bunlar;</p><ol><li>Denetimli Makine Öğrenimi</li><li>Denetimsiz Makine Öğrenimi</li><li>Yarı Denetimli Öğrenme</li><li>Pekiştirmeli Makine Öğrenimi</li></ol><h3>Denetimli Makine Öğrenimi</h3><p>Makine Öğrenimi Algoritması’nın (modelin), <strong>işaretlenmiş veri seti </strong>aracılığyla eğitilmesine Denetimli Makine Öğrenimi denir.</p><p>Örneğin; modelinizin, verdiğiniz görüntü üzerinden kadın/erkek ayrımını yapmasını istiyorsunuz. Bu durumda modelinizi etiketlenmiş kadın/erkek veri seti ile eğitmeniz gerekmektedir.</p><p><em>Denetimli Makine Öğreniminin Avantajları</em></p><p>Denetimli Öğrenme modelleri, etiketli veriler üzerinde eğitildikleri için yüksek doğruluğa sahip olabilir.<br>Denetimli öğrenme modellerinde karar verme süreci genellikle yorumlanabilir.<br>Sıfırdan yeni modeller geliştirirken zamandan ve kaynaklardan tasarruf sağlayan önceden eğitilmiş modellerde sıklıkla kullanılabilir.</p><p><em>Denetimli Makine Öğreniminin Dezavantajları</em></p><p>Kalıpları bilme konusunda sınırlamaları vardır ve eğitim verilerinde bulunmayan, görülmeyen veya beklenmeyen kalıplarla mücadele edebilir.<br>Yeni verilere dayanarak zayıf genellemelere yol açabilir.</p><h3>Denetimsiz Makine Öğrenimi</h3><p>Denetimsiz Makine Öğrenimi, bir algoritmanın etiketlenmemiş verileri kullanarak düzenleri ve ilişkileri keşfettiği bir tür makine öğrenme algoritması tekniğidir.</p><p>Denetimsiz öğrenmenin temel amacı veriler içindeki gizli kalıpları, benzerlikleri veya kümeleri keşfetmektir; bunlar daha sonra veri araştırması, görselleştirme gibi çeşitli amaçlar için kullanılabilir.</p><p>Örneğin; denetimsiz makine öğrenimi algoritması (modeli), stackoverflow sitesindeki soruları kategorize edebilir. Bu model yeni soruları tarayarak önceden belirlenmiş çıktılar arasında anlamlı bağlantılar kurmaya çalışır.</p><p><em>Denetimsiz Makine Öğreniminin Avantajları</em></p><p>Veriler arasındaki gizli kalıpları ve çeşitli ilişkileri keşfetmeye yardımcı olur.<br>Etiketlenmiş verilere ihtiyaç duymaz ve veri etiketleme zahmetini azaltır.</p><p><em>Denetimsiz Makine Öğreniminin Dezavantajları</em></p><p>Etiketleri kullanmadan model çıktısının kalitesini tahmin etmek zor olabilir.<br>Küme Yorumlanabilirliği açık olmayabilir ve anlamlı yorumlara sahip olmayabilir.</p><h3>Yarı Denetimli Makine Öğrenimi</h3><p>Yarı Denetimli öğrenme; denetimli ve denetimsiz öğrenme arasında çalışan, böylece hem etiketli hem de etiketsiz veriler ile çalışan bir makine öğrenme algoritmasıdır.</p><p>Etiketli verileri elde etmenin maliyetli, zaman alıcı veya kaynak yoğun olduğu durumlarda oldukça faydalıdır. Yarı denetimli öğrenme, etiketli verilerin eğitilmesi veya ondan öğrenilmesi için beceriler ve ilgili kaynaklar gerektirdiğinde seçilir.</p><p><em>“ İlk olarak etiketli veriler kullanılarak makine öğrenimi algoritması kısmen eğitilir. Daha sonra, kısmen eğitilen algoritmanın kendisi etiketsiz verileri etiketler. Bu sürece psödo-etiketleme adı verilir. Model daha sonra açıkça programlanmadan ortaya çıkan veri karışımı üzerinde yeniden eğitilir. ”</em></p><p><em>Yarı Denetimli Makine Öğreniminin Avantajları</em></p><p>Hem etiketli hem de etiketsiz verileri aldığından denetimli öğrenmeye kıyasla daha iyi genellemeye yol açar.<br>Çok çeşitli verilere uygulanabilir.</p><p><em>Yarı Denetimli Makine Öğreniminin Dezavantajları</em></p><p>Yarı denetimli yöntemlerin uygulanması diğer yaklaşımlara göre daha karmaşık olabilir.<br>Her zaman mevcut olmayabilecek veya elde edilmesi kolay olmayabilecek bazı etiketli verilere hâlâ ihtiyaç duyulmaktadır.</p><h3>Pekiştirmeli Makine Öğrenimi</h3><p>Pekiştirmeli öğrenme, modelin farklı aşamalara geçmesi için ödüllerle süslendiği bir yöntemdir. Bu modelin amacı mümkün olduğunca fazla ödül puanı biriktirerek nihai hedefe ulaşmaktır. Yani bu türde model, davranışı veya düzeni öğrenmek için “Ödül Geri Bildirimini” kullanarak performansını artırmayı amaçlar. İyi tanımlanmış görevler için verimli değildir.</p><p><em>“Video oyunları dünyası son on yılda pekiştirmeli öğrenmenin en çok uygulandığı alan olmuştur. Gelişmiş pekiştirmeli öğrenme algoritmaları, genellikle insan rakiplerini farklı şekilde yenerek klasik ve modern oyunlarda etkileyici sonuçlar elde etmiştir.”</em></p><p><em>“Bu algoritmalar belirli bir soruna özeldir; Google Kendi Kendine Sürüş arabası, AlphaGo’da bir bot, Go Oyununda daha iyi performans gösterenler elde etmek için insanlarla ve hatta kendisiyle rekabet eder. Verileri her beslediğimizde, onlar öğrenir ve verileri kendi bilgilerine, yani eğitim verisine eklerler. Yani ne kadar çok öğrenirse o kadar iyi eğitilir ve dolayısıyla deneyimlenir.”</em></p><p><em>Pekiştirmeli Makine Öğreniminin Avantajları</em></p><p>Görevlere çok uygun olan robotik ve oyun oynama gibi bir dizi karar almayı öğrenebilen otonom karar verme mekanizmasına sahiptir.<br>Uzun vadede ulaşılması çok zor olan sonuçlara ulaşmak için bu teknik tercih edilmektedir.<br>Geleneksel tekniklerle çözülemeyen karmaşık problemleri çözmek için kullanılır.</p><p><em>Pekiştirmeli Makine Öğreniminin Dezavantajları</em></p><p>Eğitim Güçlendirme Öğrenme aracıları hesaplama açısından pahalı ve zaman alıcı olabilir.<br>Takviyeli öğrenme, basit problemleri çözmeye tercih edilmez.<br>Çok fazla veriye ve çok fazla hesaplamaya ihtiyaç duyuyor, bu da onu kullanışsız ve maliyetli kılıyor.</p><p>Bir sonraki yazımda görüşmek üzere…</p><p>Ümit</p><p>Regards.</p><p>Kaynakça :</p><p><a href="https://aws.amazon.com/">https://aws.amazon.com/</a></p><p><a href="https://www.geeksforgeeks.org/types-of-machine-learning/?ref=lbp">https://www.geeksforgeeks.org/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e15fbabbd7bc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Veri Yapıları]]></title>
            <link>https://medium.com/@realumit219/veri-yap%C4%B1lar%C4%B1-81e9f9419b0e?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/81e9f9419b0e</guid>
            <category><![CDATA[veri-yapilari]]></category>
            <category><![CDATA[veri-yapıları]]></category>
            <category><![CDATA[veri-yapısı]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Thu, 22 Jun 2023 19:52:15 GMT</pubDate>
            <atom:updated>2023-07-29T20:01:26.724Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba bu yazımda sizlere ; Veri Yapısını, ne işe yaradığını, avantajlarını ve önemli gördüğüm altı farklı veri yapısını sizlere aktaracağım.İyi okumalar.</p><h3>Veri Yapısı Nedir?</h3><p>Veri Yapısı ,bir algoritmanın çözüme kavuşması için gereken verilerin organize edilmiş halidir. Yani verilerin bir düzene göre kaydedilmesi ya da hafızada bir düzene bağlı kalarak tutulmasını gösteren yapılara Veri Yapısı denir.</p><p>Algoritmanın çözüme ulaştıracak olan veriler, Veri Yapıları sayesinde algoritmaya; hız kazandırır, temiz bir tasarım modeli sunar ve verileri fiziksel ortamda en efektif şekilde saklamamıza yardımcı olur.</p><p>“İyi bir yazılımcının iyi algoritma sunması” fikrinden yola çıkarak algoritma oluşturulurken doğru veri yapıları bu fikrin püf noktasıdır. Doğru veri yapılarıyla doğru bir biçimde oluşturulan algoritmalar diğer algoritmalara göre bir adım öndedir.</p><p><em>Bu yazıda işleyeceğimiz yapılar; Array, Linked List, Stack, Queue, Hash Table, Hash Function, Hash Collision yapılarıdır.</em></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*T7_qRDsSdWjDmeI--wL-hg.png" /><figcaption>C Dilinin Veri Yapıları</figcaption></figure><h3>Array</h3><p>Array birçok verinin bir arada tutulması mantığına dayalıdır. Veriler hafızada art arda koyularak oluşturulur. Bir array oluşturulmadan önce uzunluğu girilmelidir. Bu durumun sebebi hafızada array uzunluğu kadar boş yer açılması-bulunmasındandır. Örneğin üç elemanlı bir array oluşuturulurken hafızada üç elemanın da sığacağı büyüklükte yer aranır. Bu durum arraylerin bir dezavantajı olarak nitelendirilebilir. Çünkü bu array dört elemanlı olmasını istediğimiz anda, hafızada dört elemanlı yer aranır ardından tüm veriler yeni adrese yönlendirilir. Arraylerin bu dezavantajını<strong> Dynamic Array</strong> çözmektedir.</p><h3>Dynamic Array</h3><p>Dynamic Array sayesinde herhangi bir array’e atanan eleman sayısı esnektir. Yapı beş elemandan oluşabilir fakat dynamic array içerisinde dört eleman bulunabilir. Dynamic Array sayesinde eleman sayısının az olması ya da fazla olması durumunda hafıza içerisinde değişimler yapılabilmektedir. Tıpkı arraylerde olduğu gibi dynamic arraylerin de dezavantajları bulunmaktadır. Örneğin girilen eleman sayısından daha az eleman içeren bir dynamic array oluşturulduğunda hafızada fazladan yer ayrılmış olacaktır. Diğer bir dezavantaj senaryosu ise dynamic array içerisine atanan veri sayısının beklenenden fazla olması durumunda ortaya çıkmaktadır. Veri sayısı, atanmış olan eleman sayısından fazla olduğunda dynamic array, normal bir array gibi davranarak hafızada art arda boş bulunan yere yerleşir.</p><h3>Linked List</h3><p>Arraylerin tersine verileri hafızada art arda tutulmak yerine, hafızaya yayılmış (yani dağınık) olarak tutan veri yapısıdır. Yeni gelen eleman için hafızda yer açmak gerekmez. Linked List veri yapısında; son gelen eleman bir önceki elemana hafıza adresini bildirmek zorundadır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/838/1*TmhDeOpvZNMCt6pJPkTzew.png" /><figcaption>Linked List</figcaption></figure><p>Linked listin her bir elemanına node denir. Linked list birbirine bağlı node’lardan oluşur. Node’lar temelde iki bilgiyi tutar. Bunlar; Tutulacak olan veri (Data) ve kendinden bir sonraki node’ın adresidir (Next).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/997/1*V3VWp0TD-ZWasTX-aXHEpg.png" /></figure><p>Not : Arraylerde onuncu elemana ulaşmak sabit sürede gerçekleşir. Bu duruma “Random Access” denir. Linked Listlerde ise onuncu elemana ulaşmak için öncesinde gelen dokuz elemanın da hafıza adresleri bilinmelidir buna bağlı olarak erişim süresi değişkenlik gösterir.Random Access durumuna karşın linked listlerde elemanları silip-ekleme işlemi arraylere göre daha kolaydır.</p><h3>Stack</h3><p>Stack verilerin en son giren en önce çıkar prensibine dayanarak oluşturulan veri yapısıdır. En son giren en önce çıkar mantığı LIFO kısaltmasıyla da bilinir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/719/1*V-iMLzinfFjZSURuvupb4w.png" /><figcaption><a href="https://www.programiz.com/dsa/stack">Tabaklar LIFO mantığına göre yıkanır</a></figcaption></figure><p>Stack Pop ve Push adlı iki özel metoda sahiptir. Pop yığının en sondaki elemanını silerken Push yığının en başına yeni bir eleman ekler.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*fGYR_CLpD_oIxG4Stx6ing.png" /><figcaption><a href="https://www.programiz.com/dsa/stack">Stack Push and Pop</a></figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DnFC7_pxWD6OQFyKYReb6A.png" /><figcaption><a href="https://www.javatpoint.com/applications-of-stack-in-data-structure">LIFO Analojisi</a></figcaption></figure><h3>Queue</h3><p>ATM sırasında olduğumuzu düşünelim. Sıraya ilk giren ilk ayrılır. Queue veri yapısı da bu prensibe dayanarak oluşturulmuş bir veri yapısıdır. Bu prensip FIFO kısaltmasıyla da bilinir.</p><p>Queue, Enqueue ve Dequeue adlı iki farklı methoda sahiptir. Enqueue sıranın en sonuna eleman eklemesi yaparken Dequeue sıranın başından eleman silmek için kullanılır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/879/1*UujDNxUUXDwoEo9fUsm_uw.png" /><figcaption><a href="https://www.geeksforgeeks.org/queue-data-structure/">Queue Data Structure</a></figcaption></figure><h3>Hash Table</h3><p>Hash Table, key-value mantığıyla çalışan ve iki farklı arrayden oluşan bir kümedir. Key-value değerleri array olarak tutulduğu için bu değerlere ulaşma süremiz tıpkı arraylerde olduğu gibi sabittir. Hash Table, Hash Function kullanarak key değerinden value değerine ulaşır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/460/1*XpyJfVP-9FUkHcs6g4alFg.png" /><figcaption><a href="https://en.wikipedia.org/wiki/Hash_table">Hash Table</a></figcaption></figure><p>Not : Hash Function kullanılarak iki farklı key kullanılarak aynı value değeri üretilirse bu duruma Collison (çarpışma) denir. Bu Hash Function kullanılan algoritmanın yanlış çıktı vermesine sebep olacağından dolayı Hash Function üretilirken dikkatli olunmalıdır.</p><p>Bir sonraki yazımda görüşmek üzere…</p><p>Ümit</p><p>Regards.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=81e9f9419b0e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git Rehberi Bölüm-2]]></title>
            <link>https://medium.com/@realumit219/git-rehberi-b%C3%B6l%C3%BCm-2-1e828d252ed6?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/1e828d252ed6</guid>
            <category><![CDATA[git]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Sun, 18 Jun 2023 17:41:52 GMT</pubDate>
            <atom:updated>2023-06-18T17:41:52.549Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba, bu yazım Git Versiyon Kontrol Sistemi hakkında bilinmesi gereken önemli konuların ikinci bölümüdür. Git hakkındaki bilinmesi gereken neredeyse her şeyi sizlere iki bölüm halinde aktarmaya çalışacağım.</p><p>İyi okumalar.</p><h3>Önceki Bölümde …</h3><p>Git Rehberinin önceki bölümünde sizlere temel Git komutlarını ve ne işe yaradıklarını aktarmıştım. Bu bölümde ise Visual Studio Code Terminali içerisinden bu kodları nasıl kullanacağımızı, .gitignore dosyasının ne olduğunu anlatacağım.</p><h3>Visual Studio Code Üzerinden Git Kullanımı</h3><p>Visual Studio Code içinde Git nasıl kurulacağını “<a href="https://medium.com/@realumit219/visual-studio-code-ve-n%C3%BCanslar-8db60c8e4cc7">Visual Studio Code ve Nüanslar</a>” adlı yazımda bulabilirsiniz.</p><p>Visual Studio Code üzerinden Git’i farklı şekillerde kuallnabiliriz. Bunlardan birisi terminal üzerinden diğeri ise IDE içerisinde gömülü olarak gelen Git Butonlarıdır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/849/1*Zsia8Ra14-_PwLs7lP6UsQ.jpeg" /><figcaption>“Download For Windows” butonuna tıklayarak Git bilgisayarımıza kurulmalıdır.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/873/1*roiSRUJ5-9pUCLGjQtfvOw.jpeg" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/766/1*htHcr9cAq5AJ7BTaU94Q2w.jpeg" /><figcaption>Git kurulumundan sonra “git — version” komutu ile versiyonu kontrol edilebilir.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LYSyTFhc4NHzAAdGfX58dg.jpeg" /><figcaption>Proje dosyamız içerisinde terminal açılarak “git init” komutu ile initialize edilmelidir. Bu görselde proje dosyası içerisinde daha önce git initialize edildiğinden komut çıktısında “Reinitialized” ifadesi görülmektedir.</figcaption></figure><p>“<a href="https://medium.com/@realumit219/git-rehberi-b%C3%B6l%C3%BCm-1-caf3ba99b5ea">Önceki bölümde</a>” kullandığımız tüm kodları VS Code içerisindeki terminal üzerinden kullanabiliriz.</p><p>Henüz versiyon kontrolü altında olmayan bir projenin dizininde, boş bir git deposu oluşturmak için <strong>Activity Bar</strong> bölümünden <strong>Source Control </strong>ikonuna tıklayıp, <strong>Initialize Repository </strong>butonuna tıklamalıyız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/proxy/0*cr8yXKIzgS8-yZs_.png" /></figure><p>Yeni eklenen veya üzerinde değişiklik yapılan dosyaları <strong>staged</strong> ortamına göndermek için <strong>Stage Changes(+ işareti) </strong>butonuna tıklamalıyız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/505/0*kWeOq5L2dTktFYZI.png" /></figure><p>Staged ortamına dosyayı eklediğimizde aşağıdaki resimde olduğu gibi, dosyanın yanında <strong>“A” (1)</strong> <strong><em>(added)</em></strong> yazacaktır. Staged ortamına eklemediğimiz dosyalar olursa bu dosyaların yanında da <strong>“U” (2) <em>(untracked)</em> </strong>yazacaktır.</p><p>Yeni eklenen veya üzerinde değişiklik yapılan dosyaları staged ortamına göndermek için Stage Changes butonuna tıklanmalıdır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/306/0*Pc-2AqsCqPibg8mY.png" /></figure><p><em>Commit</em>, <strong>staged</strong> ortamına alınan dosyaların <em>Local Repository</em>’e gönderilmesidir. En iyi uygulama yöntemi her kayıt sırasında yapılan değişiklikleri açıklayıcı bir mesaj eklemektir. Ayrıca her commit benzersiz bir kimliğe<strong> (unique ID)</strong> sahip olur. Dosyalarımızı commit’lemek için <strong>Message</strong> bölümüne <strong>(1)</strong> commit’imizi açıklayıcı bir mesaj yazmalıyız ve ardından <strong>Commit</strong> butonuna<strong> (2)</strong> basmalıyız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/373/0*5iSgmqBVwU8z0CMn.png" /></figure><p>Commit’lenen dosya üzerinde değişiklik yaptığımızda, dosyanın yanında <strong>“M”</strong> <strong>(1) <em>(modified)</em></strong> yazacaktır.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/292/0*SvtDeUhkDQCGVqwi.png" /></figure><p>Dosyamızda yapılan değişikliği görüntülemek için, Source Control bölümünde, dosyanın üzerine tıkladığımızda <strong>(1)</strong>, iki farklı bölüm karşımıza geliyor. En sağdaki bölümde <strong>(3)</strong> dosyamızın üzerinde yapığımız değişiklileri görüntüleyebiliriz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*El540usLg-SmoT5V.png" /></figure><p>Bu değişiklikleri eğer geri almak istersek, tekrar sol bölümdeki<strong> (2)</strong> gibi olmasını istiyorsak <strong>Discard Changes</strong> butonuna tıklamalıyız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/352/0*WCEc0UjoaMnWynh3.png" /></figure><p>Eğer remote repository’e bağlıysak ve commit’lerimizi remote repository’e göndermek istersek <strong>Views and More Actions (1)</strong> butonuna tıklayıp, <strong>Push (2)</strong> seçeneğini seçmeliyiz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/426/0*uZLIhW6nACq95tTc.png" /></figure><h3>.gitignore Dosyası Nedir?</h3><p>.gitignore dosyası projemizin kök dizinine oluşturulan düz bir metin dosyasıdır. .gitignore dosyası projemizi remote repository’e aktarırken proje dosyamız içerisinde alınmasını istemediğimiz dosyaları kapsar. Örneğin local çalışma alanındaki takip edilmesini istemediğin, takım arkadaşların için gerekmeyen dosyaların varsa veya bu dosyaların boyutu reponuza atmanıza gerek olmayacak kadar büyük ölçekli ise dosya, .gitignore dosyası içerisinde tutulmalıdır.</p><p>Bu dosyanın içerisinde genel olarak hazır olarak alınmış paketler, resimler, videolar, şifreler ve kullandığınız IDE’ye göre projeye özel oluşturduğu dosyalar, paket yöneticisinden indirilen bağımlılıklar, sadece kendi çalışma alanınızda olması gereken başkaları tarafından görülmemesi gereken dosyalarınız (veritabanınıza ilişkin konfigürasyonlar), API anahtarları, kimlik bilgileri veya hassas bilgiler içeren dosyalardır(.env).</p><p>Bu dosyaları .gitignore dosyasına eklememizle birlikte GIT artık bu dosyaları takip etmez. Ayrıca bu işlemler yapılırken senin halihazırdaki dosyalarını da hiç bir şekilde etkilemez.</p><h3>Nasıl oluşturulur?</h3><p>Reponuzu oluştururken verilen seçeneklerde add gitignore file dosyasına tıklayarak reponuzla beraber oluşturabilirsiniz. Aynı şekilde editörünüzde .gitignore şeklinde de oluşturabilirsiniz.</p><p>Proje dizininize cd komutu ile gelerek</p><pre>$ touch .gitignore</pre><p>komutu ile oluşturulur.</p><h3>Nasıl çalışır, nasıl kullanılmalı?</h3><p>.gitignore dosyasının her satırına takip edilmesini istemediğimiz dosyaları veya dizinleri yazarak göz ardı edebiliriz.</p><p><strong>Tabii bu dosyaları yazarken bize kolaylık sağlayan bazı formatlar var. İşte onlar:</strong></p><p>.env</p><pre>- Dizinleri ise klasörün sonuna `/` işareti ekleyerek  belirtiriz.</pre><p>node-modules/ dist/ logs/</p><pre>- `*` yıldız karakteriyle ise belirtilen ilk örnekte `.log` uzantısına sahip dosyaların tümünü, ikinci örnekte ise `files` klasör içerisindeki bütün dosyaları izlemeyi bırakacaktır.</pre><p><em>.log files/</em></p><pre>- Eğer ki bir klasörümüzü içerisindeki bir dosya haricinde izlenmesini istemiyorsak `!` işareti ile bunu sağlayabiliriz. Bu örnekte `files` klasörü içerisindeki `example.txt` haricindeki dosyalar izlenmeyecektir. Files klasörü içerisindeki sadece **example.txt** git akışında görülecektir.</pre><p>!files/example.txt</p><pre>- Yukarıdaki örnekte dikkat edilmesi gereken önemli bir ayrıntıyı açıklayacak olursak eğer ki daha öncesinde `files` klasörü `.gitignore` dosyasına eklenmişse sonrasında ise `!`  içerisindeki dosya ile işlem yapmak işe **yaramayacaktır.**</pre><p>files/ !files/example.txt</p><pre>- `.gitignore` dosyasında yorum satırı oluşturmak için ise `#` karakteri kullanılır.</pre><h3>production</h3><p>/build</p><h3>dependencies</h3><p>/node_modules</p><pre>Kullanımından da bahsettiğimize göre gelelim dikkat edilmesi gereken hususlara...</pre><pre>## Neye dikkat etmeliyim?</pre><pre>- Eğer projenizi `git add .` veya `git commit ` etmişseniz sonrasında  `.gitignore`  dosyasına eklemek istediğiniz dosyayı ekleseniz de bu işlem gerçekleşmeyecektir ve o dosyanız reponuzda hala GIT ile takip edilecektir. Tabi her şeyin bir çözümü olduğu gibi bu sorunu da çözmenin bir yolu var. İşte o çözüm .</pre><pre>```bash $ git rm --cached FILENAME</pre><p>Ayrıca .gitignore dosyalarına da <a href="https://github.com/github/gitignore/tree/master/Global">buradan</a> erişebilirsiniz.</p><p>Bir sornaki yazımda görüşmek üzere.</p><p>Regards.</p><p><em>Kaynak: Patika.dev, Medium</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=1e828d252ed6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Git Rehberi Bölüm-1]]></title>
            <link>https://medium.com/@realumit219/git-rehberi-b%C3%B6l%C3%BCm-1-caf3ba99b5ea?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/caf3ba99b5ea</guid>
            <category><![CDATA[git-bash]]></category>
            <category><![CDATA[github]]></category>
            <category><![CDATA[git]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Thu, 09 Mar 2023 15:49:21 GMT</pubDate>
            <atom:updated>2023-03-09T15:49:21.687Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba, bu yazım Git Versiyon Kontrol Sistemi hakkında bilinmesi gereken önemli konuların ilk bölümüdür. Git hakkındaki bilinmesi gereken neredeyse her şeyi sizlere iki bölüm halinde aktarmaya çalışacağım.İyi okumalar.</p><h3>Git Nedir ?</h3><blockquote>Git is a distributed version control system developed by Junio Hamano and Linus Torvalds (kernel.org)</blockquote><p>Git “versiyon kontrol sistemidir”. Peki versiyon kontrol sistemi nedir ?</p><p>Versiyon kontrol sistemi; profesyonel işler başarmak isteyen tüm yazılımcıların kullanması gereken, bir projedeki tüm değişiklikleri adım adım izleyen, ince eleyip sık dokuyan aynı zamanda isterseniz projenizi uzaktaki bir bilgisayarda ya da yerel cihazlarınızda saklyabilen bir sistemdir.Bu sistem sayesinde cihaz ayrımı olmadan, istediğiniz cihazdan projelerinize erişebilir ve aynı zamanda proje takımlarınızı projeye dahil ederek sürecin daha kolay izlenebilir olmasını sağlayabilirsiniz. Takımınızın projenizdeki yaptığı değişiklikleri kolayca inceleyebilirsiniz.</p><blockquote>Git Versiyon Kontrol Sistemini kullanmak için bilgisayarımıza <a href="https://git-scm.com/download/win">https://git-scm.com/download/win</a> adresinden, işletim sisteminizi destekleyen sürümünü indirip kurarak Git ile çalışmaya başlayabilirsiniz.</blockquote><h3>Git ile Çalışmaya Başlamak</h3><p>Git bilgisayarınızda kurulu ise Git’i kullanmanın farklı yolları mevcuttur.Git’i gömülü olarak içinde barındıran Visual Studio Code ile ya da halihazırdaki proje dosyanıza sağ tıklayarak “Git Bash Here” seçeneği ile ya da terminal ekranınızdan “git init” kodu ile Git ortamınızı oluşturabilirsiniz.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/532/1*9w9k-L0rXCsaqUV5w15m3w.png" /><figcaption>İlk Yöntem: Proje dosyanıza sağ tık yaparak Git Bash Here seçeneiği ile Git’i kullanabilirsniz.</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/849/1*RDB8boebHlrelwwle6Ogow.png" /><figcaption>İkinci Yöntem: Terminalden proje dosyanızın bulunduğu dizine giderek “git init” komutu ile Git’i kullanabilirsiniz.</figcaption></figure><blockquote>“git init” kodu proje dosyanızın içinde gizli bir git dosyası oluşturur.</blockquote><blockquote>Proje dosyalarınn masaüstü dizini gibi kolay erişilebilen bir dizinde olmaması gerektiği konusunu “<a href="https://medium.com/@realumit219/visual-studio-code-ve-nüanslar-8db60c8e4cc7">Visual Studio Code ve Nüanslar</a>” adlı yazımda bahsetmiştim fakat burada örnek olması için Masaüstü dizininde deneme_projesi adlı boş bir dizin açılmıştır.</blockquote><h3>Başlamadan Önce Bilinmesi Gerekenler</h3><ul><li><strong><em>untracked (izlenmeyen):</em></strong><em> GIT tarafından henüz takip edilmeyen, yani yeni oluşturulmuş dosyaları ifade eder.</em></li><li><strong><em>unstaged (hazırlanmamış):</em></strong><em> Güncellenmiş ancak commit’lenmek için hazırlanmamış dosyaları ifade eder.</em></li><li><strong><em>staged (hazırlanmış):</em></strong><em> Commit’lenmeye hazır olan dosyaları ifade eder.</em></li><li><strong><em>deleted (silinmiş):</em></strong><em> Projeden silinmiş ama GIT üzerinden kaldırılmamış dosyaları ifade eder.(</em><a href="https://medium.com/fedeveloper/git-bash-ile-komut-komut-versiyonlama-a354efd3063f"><em>Alıntı</em></a><em>)</em></li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/895/1*0CSkMTEq8ZYezD50k_diMg.png" /><figcaption>Temel Bash Komutları</figcaption></figure><h3>Git Bash Başlangıç Komutları</h3><p>Öncelikle masaüstü dizinine gelip bir proje dizini oluşturalım.</p><blockquote>Bu işlemler Linux üzerinden yapılmıştır fakat aynı işlemleri diğer işletim sistemleriyle de yapabilirsiniz.</blockquote><pre>cd Masaüstü/<br>mkdir deneme_projesi</pre><p>Proje dizinini oluşturduktan sonra içerisine proje dosyalarını oluşturalım.</p><pre>cd deneme_projesi<br>touch dosya.java<br>touch readme.txt</pre><blockquote>git init</blockquote><p>Artık Git’i başlatabiliriz yani diğer bir ifade ile “<em>initialize</em>” edebiliriz.Tahmin edileceği üzere ilk kodumuz “git init” olacaktır. Proje dizinine gelip git init kodu ile dizinimizi bir muhafız gibi izleyen Git’i aktif hale getirmiş oluruz.</p><p><em>“git init” kodu boş bir Git deposu oluşturmak için kullanılır.</em></p><pre>cd deneme_projesi/<br>git init</pre><p>Boş bir Git deposu oluşturduktan sonra belirli konfigrasyonlar yapmalıyız yani diğer bir ifade ile “configure” etmeliyiz. Diğer kodumuz “git config”.</p><blockquote>git config</blockquote><p>Git bir çok konfigrasyon ayarına sahiptir fakat bu bölümde proje üzerinde yapılan değişiklikleri kimin yaptığını görebilmek için isim ya da email kullanarak feed-back veren iki ayarı, Git’in başlatılmasının ardından kurulması gerekir.</p><pre>git config --global user.name &quot;Umit&quot;<br>git config --global user.email &quot;mail_adresim_bu_degil@email.com&quot;</pre><p><em>“global” anahtar sözcüğüne dikkat edilmesi gereklidir. Çünkü adınız ve e-mail adresinizin diğer kullanıcılar tarafından da gözükeceği anlamına gelmektedir.</em></p><p><em>Diğer konfigrasyon ayarlarını görmek için “git config — list” komutu kullanılmalıdır.</em></p><blockquote>git add</blockquote><p>“git add klasör_adi” komutu ile belirlenen klasör takip edilmeye başlanır. Örneğin proje dosyamızdaki Java kodunu takip edelim.</p><pre>git add dosya.java</pre><p><em>Artık Java kodumuzda yapılan değişiklikler takip edilebilir olacaktır. Fakat yapılan değişiklikler ancak “commitlenmiş” olmalı yani projenin o anlık halinden itibaren kaydetmeye başlar.</em></p><blockquote>git commit</blockquote><blockquote>Commit, kelime anlamı olarak “<strong>işlemek</strong>” demektir. Git’e eklediğimiz dosyaları kalıcı olarak Git veri tabanına işlemeye commit denir. Projede belli başlı işlemler yapıldıktan sonra dosyaları commit etmek gerekir. Örnek olarak üye kayıt-giriş işlemlerini hallettikten sonra bir commit alabilirsiniz. Daha sonra üyenin yorum yapma özelliği aktifleştikten sonra bir commit alabilirsiniz. Bu tarz çok büyük olmayan ama ufak da olmayan değişikliklerde commit almak son derece sağlıklı bir yoldur (<a href="https://talentgrid.io/tr/ileri-seviye-git/">kaynak</a>).</blockquote><p>git commit kodu kullanıldıktan sonra artık yapılan değişiklikler veritabanına kayıt edilir.</p><blockquote>git status</blockquote><p>Git dosyalarının durumu hakkında bilgi verir. Eğer proje commitlenmiş ise değişiklikleri gösterir.</p><blockquote>git log</blockquote><p>Bu komut ile bütün commit’ler, id’si, yazarı, tarihi ve mesajı ile beraber listelenir.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/875/1*TpdnTAxD9QpX0pTSRtskXQ.png" /><figcaption>git log komutu çıktısı</figcaption></figure><blockquote>git rm</blockquote><p>Staged ortamına eklenmiş bir dosyanın takibinin bırakılması yani <strong>untracked</strong> (izlenmeyen) hale getirilmesi sağlayan komuttur.</p><pre>git rm  --cached &lt;dosya veya klasor_name&gt;</pre><p>Dosyayı klasörden silmek istiyorsak eğer, aşağıdaki komutu kullanılırız.</p><pre>git rm &lt;dosya veya klasor_name&gt;</pre><blockquote>git branch</blockquote><p>Local veya remote repository üzerinde yeni bir branch (dal) eklemek, silmek veya listelemek için kullanılır.</p><p>Projenize yeni bir branch eklemek için;</p><pre>git branch &lt;branch_name&gt;</pre><p>*<em>Tüm uzak ve yerel branch’lari listelemek için;</em></p><pre>git branch -a</pre><p>Bir branch’ı silmek için;</p><pre>git branch -d &lt;branch_name&gt;</pre><blockquote>git checkout</blockquote><p>Branch’ler arası veya commit’ler arası geçiş yapmak istediğimizde kullanılır.</p><p>Mevcutta var olan branch’a geçiş yapmak için;</p><pre>git checkout &lt;branch_name&gt;</pre><p>Yeni bir branch oluşturup, bu branch’a geçiş yapmak için;</p><pre>git checkout -b &lt;branch_name&gt;</pre><p>Commitler arası geçiş yapmak için: (Eski bir versiyona dönmek istediğimiz zaman)</p><pre>git checkout &lt;commit_ID&gt;</pre><blockquote>git merge</blockquote><p>Başka bir branch’da olan değişiklikleri, bulunduğumuz branch ile birleştirmek istediğimizde kullanılır.</p><pre>git merge &lt;branch_name&gt;</pre><blockquote>git clone</blockquote><p>Mevcut bir Remote Repository’de bulunan dosyaların bilgisayarımızda bir kopyasının oluşturulmasını sağlar.</p><pre>git clone &lt;remote_URL&gt;</pre><blockquote>git push</blockquote><p>Projemizde aldığımız commit’leri, remote repository’e gönderir.</p><pre>git push origin master</pre><p><em>Burada bahsi geçen</em><strong><em> </em></strong><strong><em>origin </em></strong><em>remote repository’nin kök dizinini belirtir ve sabit bir isimdir. </em><strong><em>master </em></strong><em>ise sizin çalıştığınız </em><strong><em>branch (dal)</em></strong><em>’ı belirtir.</em></p><p><em>Henüz remote repository’niz yoksa aşağıdaki komut ile local deponuzu uzak sunucudaki depoya bağlayabilirsiniz.</em></p><pre>git remote add origin http://uzak_deponun_adresi.git</pre><blockquote>git diff</blockquote><p>Repository üzerinde yapılan değişikliklerden sonra dosyalar arasında oluşan farklılıkları göterir.</p><p><strong>Çalışma dizini ile repository (HEAD) arasındaki farklılıkları görmek için:</strong></p><pre>git diff HEAD</pre><p>**İki commit arasındaki farklılıkları görmek için:</p><pre>git diff &lt;commit_id_1&gt;..&lt;commit_id_2&gt;</pre><p>Çalışma dizini ve staged ortamı arasındaki farkları görmek için:</p><pre>git diff --staged</pre><blockquote>Temelde kullanacağımız komutlar git init git status git add git reset git commit — m &quot;...&quot; git log git push git pull bunlardan ibarettir.(<a href="https://medium.com/fedeveloper/git-bash-ile-komut-komut-versiyonlama-a354efd3063f">Alıntı</a>)</blockquote><figure><img alt="" src="https://cdn-images-1.medium.com/max/792/0*14c10zI1Lx7OoKNe.png" /></figure><h3>Ve Çok Yararlı Bir Site</h3><p><a href="https://rogerdudler.github.io/git-guide/index.tr.html">git - basit rehber</a></p><p>Rehberin devamında görüşmek üzere…</p><p>Ümit</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=caf3ba99b5ea" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Visual Studio Code ve Nüanslar]]></title>
            <link>https://medium.com/@realumit219/visual-studio-code-ve-n%C3%BCanslar-8db60c8e4cc7?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/8db60c8e4cc7</guid>
            <category><![CDATA[code]]></category>
            <category><![CDATA[code-editor]]></category>
            <category><![CDATA[visual-studio-code]]></category>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Tue, 07 Mar 2023 20:13:48 GMT</pubDate>
            <atom:updated>2023-03-09T13:38:55.154Z</atom:updated>
            <content:encoded><![CDATA[<p>Merhaba, bu yazımda sizlere Visual Studio Code hakkında bilinmesi gerekenlerden bahsedeceğim.</p><h3>Visual Studio Code Hakkında</h3><p>Visual Studio Code bir “text” editörüdür. Kullanıcının yazdığı yazıları seçilmiş formata uygun bir biçimde renklendirir, düzeltme önerisi yapar ve yazıların okunulabilirliğini artırır. Visual Studio Code içerisinde metin ya da belirlenmiş dillerde kodlar yazabilirsiniz.</p><p><em>Hata ayıklama, gömülü Git kontrolü, sözdizimi vurgulama, akıllı kod tamamlama, snippet’ler ve kod yeniden yapılandırma desteği içerir (</em><a href="https://tr.wikipedia.org/wiki/Visual_Studio_Code"><em>Vikipedi</em></a><em>).</em></p><h3>Kod Yazmadan Önce</h3><p><strong>Kod yazmaya başlamadan önce Visual Studio Code içerisinde gömülü olarak gelen Git kontrolünü aktif hale getirerek projelerimizi GitHub ortamına sunmamız daha kolay hale gelecektir.Bu yüzden Git ortamını aktif hale getirmeliyiz.</strong></p><blockquote><em>Peki Git Nedir ?</em></blockquote><blockquote><em>Git, yazılım geliştirme süreçlerinde kullanılan, hız odaklı, dağıtık çalışan bir sürüm kontrol ve kaynak kod yönetim sistemidir. İlk sürümü Linux çekirdeği’nin geliştirilmesinde kullanılmak üzere 2005 yılında bizzat Linus Torvalds tarafından tasarlanıp geliştirilmiş, 2021 yılı itibarıyla %73 pazar payına ulaşmıştır (</em><a href="https://tr.wikipedia.org/wiki/Git_(yaz%C4%B1l%C4%B1m)"><em>Vikipedi</em></a><em>).</em></blockquote><blockquote>Yani Git açık kaynaklı kodlanmış ve kaynak kodu kontrolü sistemidir.</blockquote><p>GitHub, Git kaynak kontrolü için ilk olarak bilgisayarımıza <a href="https://git-scm.com/download/win">https://git-scm.com/download/win </a>adresinden işletim sistemimize uygun olanı indirip kuralım.Kurulum sonrasında Visual Studio Code uygulamasının sol kısmında yer alan Git ikonuna tıklayarak kontrollerimizi sağlayalım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/479/1*pQm_f4W4g5w1Z0G7gEVemg.png" /><figcaption>Git kurulumu sonrası</figcaption></figure><h3>Kod Yazarken</h3><p>Kod yazmaya başlamadan önce kodu yazacağımız proje dosyasını oluşturmalıyız. Bu dosya Visual Studio Code içerisinden oluşturulabileceği gibi terminal ya da command ekranından da oluşturulabilir.</p><p>Proje dosyalarımızı, tıpkı onların birer ilaç olduğunu düşünerek çocukların ulaşamayacağı yerlerde saklamalı ve yalnışlıkla silinmeleri, eksik paylaşılmalarını önlemeliyiz. Bu yüzden bu dosyalar masaüstü dizininde bulunmamalıdır.</p><blockquote>Peki Dosya ile Klasör Farklı Şeyler Mi?</blockquote><blockquote>Evet ! Klasörler dosyaları içinde barındıran bir üst birimken dosyalar işlevsel birimlerdir.Linux işletim sisteminde; mkdir dizin oluşturur,touch ise boş dosya oluşturur. Yani bir kod yazısı yazmak için touch ile oluşturmuş olduğumuz dosya kullanılır.</blockquote><pre>mkdir dizin</pre><pre>touch index.html</pre><p><strong>Proje Klasörü Nasıl Açılır ?</strong></p><p>Belirlenmiş dizinde proje adına sahip dosya oluşturulur ardından Visual Studio Code uygulaması açılır. Proje dosyası Visual Studio Code uygulamasına sürükleyip bırakılarak proje klasörü açılmış olur. Bu işlemden sonra Visual Studio Code üzerinden yapılan tüm değişiklikler, proje dosyasında da oluşur. Bunun tam tersi de geçerlidir. Yani proje dosyasının içinde yapılan değişiklikler Visual Studio Code içinde de etkin bir şekilde görülür.</p><pre>mkdir projem<br>cd projem<br>touch anasayfa.html</pre><p>Not: Birden çok projeye sahip olabilir ve buna bağlı olarak birden çok proje klasörünüz bulunabilir. Kodlarınızı yazarken yazdığınız kodların doğru proje klasörü altında olduğuna dikkat etmelisiniz.Ayrıca birden çok bilgisayara sahipseniz ve bu bilgisayarlar arasında fiziksel geçiş yapmak isterseniz editörün sol alt köşesinde bulunan senkronize ayarlarını ayarlamalısınız.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/436/1*Cy4meFDjeG0R8fcCH4yzkg.png" /><figcaption>Senkronize ayarları sol en alt köşededir</figcaption></figure><p>Aynı zamanda Visual Studio Code içerisinde bulunan IntelliSense, Emmet ve MultiCursor özelliklerini de kullanarak kodunuzu daha kolay ve kısa sürede yazabilirsiniz.</p><h4>IntelliSense</h4><p>Yazdığınız kodu tamamlayabilmenize yardımcı olur ve aynı zamanda bu kod hakkında bilgi verir.</p><h4>Emmet</h4><p>Emmet içerisinde çeşitli kısaltmaları bulundurur ve bu sayde kod yazarken belirli kısaltmaları kullanarak daha kısa sürede kod yazabilmenize olanak sağlar.</p><h4>MultiCursor</h4><p>Bu özellik sayesinde çoklu imleç kullanılarak birden çok seçim kolayca ve tek hamlede yapılabilir. Bu özelliği kullanmak için alt + click kombinasyonu kullanlır.</p><p>Bir sonraki yazıda görüşmek üzere…</p><p>Ümit</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8db60c8e4cc7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Merhaba Ben Ümit]]></title>
            <link>https://medium.com/@realumit219/merhaba-ben-%C3%BCmit-80e30eead392?source=rss-c78ac58a21c8------2</link>
            <guid isPermaLink="false">https://medium.com/p/80e30eead392</guid>
            <dc:creator><![CDATA[Ümit]]></dc:creator>
            <pubDate>Wed, 01 Feb 2023 20:07:33 GMT</pubDate>
            <atom:updated>2023-03-07T20:32:23.333Z</atom:updated>
            <content:encoded><![CDATA[<p>Herkese merhaba, ben Ümit. Bu yazımda kendim hakkımda kısa bilgiler vereceğim, bu yazının bir özgeçmiş olmadığını dikkate almanızı rica ederim.</p><p>Altı yaşında eğitim öğretim hayatıma başladım.</p><p>Tomarza Fen Lisesini bitirdikten sonra Muğla Sıtkı Koçman Üniversitesi Yazılım Mühendisliği Bölümünü kazandım.</p><p>Lise döneminde “Pick Teoremi’nin görselleştirilmesi ve matematiksel fonksiyonların öğrenciler tarafından daha hızlı öğrenebilmesi için Arduino tabanlı eğitim seti” projesini hayata geçirdim. Model uçak ve drone üzerinde çalışmalar yaptım. ”Fen Liseleri II. Ulusal Öğrenci Kongresi” kongresi dahil bir çok projeye katıldım.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/960/1*UB7hUvOsGHTmXIkl0bK39w.jpeg" /><figcaption>Model Uçak Uçuş Öncesi</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/466/1*9_BnDKOQWCWlCuyR0bSBwQ.png" /><figcaption>Fen Liseleri II. Ulusal Öğrenci Kongresi</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/424/1*mRSP8XGuiCVPbp_40rLx7Q.jpeg" /></figure><p>Üniversiteye başladığımda “Veri Bilimi ve Yapay Zeka” konusunda kendimi geliştirdim ve arkadaşlarımla birlikte Muğla Sıtkı Koçman Üniversitesi Veri Bilimi Topluluğunu kurdum.</p><p>Üniversite Hazırlık sınıfını bitirdikten sonra, yaz tatilinde, gönüllü staj yaptım ve “Responsive Web Design” konusunda tecrübe edindim.</p><p>Öğrendiğim bilgileri ve kazandığım tecrübelerimi insanlara aktarmak oldukça hoşuma gidiyor bu yüzden sizlerleyim.</p><h3>Sizi Neler Bekliyor ?</h3><p>Bu Medium hesabında Veri Bilimi, Python, Bilgisayar Bilimleri, EEG gibi bir çok konuda sizlere bilgiler aktarmaya çalışacağım.</p><p>Takipte kalın</p><p>Regards…</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=80e30eead392" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>