• Hesap Oluştur
  • Oturum Aç
  • Destek

    Şüphe veya forumunuzla ilgili sorunlar? Sessiz! Servis, yardım alabileceğiniz çok sayıda rehber resmi bir destek forumuna sahiptir.

    Destek

    Şüphe veya forumunuzla ilgili sorunlar? Sessiz! Servis, yardım alabileceğiniz çok sayıda rehber resmi bir destek forumuna sahiptir.

  • Tema

    Forumunuzu anında oluşturun. Yüzlerce tema hazır.

    Tema

    Forumunuzu anında oluşturun. Yüzlerce tema hazır.

  • Arama Motorları

    Forumlarımız tüm büyük arama motorlarında üst sıralarda yer almakta ve günlük binlerce ziyaret almaktadır.

    Arama Motorları

    Forumlarımız tüm büyük arama motorlarında üst sıralarda yer almakta ve günlük binlerce ziyaret almaktadır.

  • Mobil

    Mobilden kolay erişim imkanı sağlıyoruz.

    Mobil

    Mobilden kolay erişim imkanı sağlıyoruz.

  1. Samsung, Paris merkezli Yapay Zeka girişimlerini engellemeye çalışıyor
    Forum: Yapay Zeka Android - Cevap Yok

    admin 06-04-2019, 15:58
    Samsung, Paris merkezli Yapay Zeka girişimlerini engellemeye çalışıyor

    Samsung, küresel Yapay Zeka merkezlerini hızlı bir şekilde açıyor ancak raporlar Kore devinin Paris'in firmanın yeteneğini destekleyebileceğini umduğunu gösteriyor.

    Yaklaşık 30 Yapay Zeka uzmanı, Samsung'un mevcut Paris ofisinde araştırma ve geliştirme projeleri üzerinde çalışıyor.

    Samsung'un Paris merkezli Yapay Zeka laboratuvarı, Londra, Toronto ve Montreal'deki merkezlerden daha küçük. Laboratuvarın kendisi, dünyanın herhangi bir yerindeki meslektaşlarından daha küçükken, Samsung Yapay Zeka hedeflerini ilerletmek için yerel ortaklar arıyor.

    Samsung Baş Strateji Sorumlusu Sohn Young-kwon, planlarını gözden geçirmek ve yerel Yapay Zeka girişimlerini karşılamak için Mayıs ayında Paris ofisini ziyaret edecek. Bu firmalar potansiyel satın alma için hazır olabilir.
    Yerel haber ajansı Maeil Business News, “Samsung'un Yapay Zeka laboratuarı ile sinerji yaratabilecek şirketler olası M & As için tanımlanıyor” dedi.

    Samsung, bugüne kadar Yapay Zeka ,Yapay Zeka ile ilgili 13 yeni girişime yatırım yaptı. En dikkat çekenlerden biri, Siri'nin yaratıcıları tarafından kurulan Viv Labs.

    Genel olarak, firma çeşitli yatırım birimleri aracılığıyla 75 girişimde 200 milyon $ 'dan fazla yatırım yaptı.
    Samsung'un Yapay Zeka için büyük planları var ve kısa bir süre önce 2020 yılına kadar Yapay Zeka ile donatılmış tüm elektronik ürün yelpazesine sahip olmayı hedeflediğini duyurdu.
  1. Huawei P30 Pro: Yapay Zeka, yetenekli bir fotoğrafçıya dönüşüyor
    Forum: Yapay Zeka Android - Cevap Yok

    admin 06-04-2019, 15:56
    Huawei P30 Pro: Yapay Zeka, yetenekli bir fotoğrafçıya dönüşüyor

    AI özelliklerini incelemek ve bir hile ya da kullanışlı bir uygulama olup olmadığını belirlemek için Huawei'nin P30 Pro'suyla el ele verdik.

    Şirketin amiral gemisi P serisi akıllı telefonlar kamera yeniliklerine odaklanıyor. Bu en son cihazla, trendin devam ettiğini görüyoruz. Oynayacağımız birkaç yeni şeyin yanı sıra, mevcut özelliklerde de belirgin gelişmeler var.
    Huawei'nin önceki amiral gemisi olan Mate 20'de, şirket AI'nın tanıyabileceği sahne ve nesne sayısını 25 kategoride 5.000 farklı nesne ve 1.500 farklı senaryoya genişletti.

    Etkileyici olmakla birlikte, çoğu özelliği kapattı ve Huawei varsayılan olarak bunu yapacak bir güncelleme yayınladı. Nesneler çoğu zaman yanlış anlaşılıyordu ve görüntüler daha zayıf görünüyordu.
    Huawei, P30 Pro ile net geliştirmeler yaptı. Ve Ben - Kenara köpeğimi bir panda olarak tanındı bir eğlenceli geçtiği yerden oldukça o olmadığına emin - (. İyi bir şekilde) Yapay Zeka tanıma üstün ve hatta sürpriz oldu
    [Resim: AI-Object-Recognition.png?fit=1000%2C563&ssl=1]
    Çarpıcı an bir çiçeğin resmini çekiyordu. Uzak mesafeden, Yapay Zeka çekimin bir miktar “yeşillik” olduğunu belirledi ve renkleri delgiye soktu. Çiçeğin daha fazla çerçevelenmesi Yapay Zeka'nın 'çiçeklere' geçmesine neden oldu ve onu alanını bulanıklaştırırken nesneyi odağa getirecek kadar güzel bir alan derinliği ile keskinleştirdi.
    Çiçeğin küçük ayrıntılarını yakalamak için hareketsiz hareket etmek Yapay Zeka'nin 'süper makro'ya' geçmesine neden oldu. Bu mod, P30 Pro'nun sadece 2,5 cm uzaklıktaki görüntüleri çekmek için inanılmaz makro özelliklerini kullanır.
    [img=1000x0]https://i2.wp.com/www.artificialintelligence-news.com/wp-content/uploads/2019/03/AI-Scene-Recognition-e1553879475910-1024x484.png?resize=1000%2C473&ssl=1[/img]
    Düşük ışıkta fotoğraf çekimi, Huawei'nin Yapay Zeka performansını kullandığı bir diğer alandır. Yapay Zeka görüntü sabitleme özelliği, kullanıcının üçayak kullanmadan uzun pozlamalı fotoğraflar çekmesini sağlar.
    Aşağıdaki resimde, her iki çekim aynı zift siyah koşullarında aynı yerden çekilmiştir:
    [Resim: AI-Long-Exposure-Comp.png?fit=1000%2C563&ssl=1]
    İkna olmadığımız Yapay Zeka'nın bir uygulaması, akıllı telefonun HDR için kullanılmasıdır. Aşağıda görebileceğiniz gibi, özellik bir HDR çekiminden bekleyemeyeceğiniz bir görüntüye yol açtı:
    [img=1000x0]https://i2.wp.com/www.artificialintelligence-news.com/wp-content/uploads/2019/03/AI-HDR-Comp-e1553879587255-1024x438.png?resize=1000%2C428&ssl=1[/img]
    Huawei geçmişte cihazlarının kamera performansını iyileştirmek için güncellemeler yayınladı, bu yüzden bunu ele alabilmemiz için bir göz atacağız. Şimdilik, HDR özelliğini kapalı tutmak daha iyi görünüyor.
    P30 duyurusunun önünde, Huawei cihazın yakınlaştırma kabiliyetini artırdı. Testlerimizi temel alarak nedenini anlayabiliriz:
    [img=1000x0]https://i0.wp.com/www.artificialintelligence-news.com/wp-content/uploads/2019/03/AI-Zoom-Comp-2-e1553879676228-1024x325.png?resize=1000%2C317&ssl=1[/img]
    İlk resimde, küçük nergislerin nerede yakınlaştırdığımızı işaretlemek zorunda kaldım. 5x'te optik zum olduğu için kalite kaybı görmüyoruz. 10x'te, Huawei Yapay Zeka'yı 'kayıpsız' olduğunu iddia ettiği karma bir zoom için kullanıyor (biraz kayıp olduğunu düşünüyoruz, ancak ihmal edilebilir.)

    50x zoom'da gözle görülür bir görüntü kalitesi kaybı görüyoruz. Ancak, bu bir akıllı telefon kamerası için inanılmaz bir yakınlaştırma ve yalnızca Yapay Zeka dengeleme ile etkinleştiriliyor. Ortaya çıkan görüntü, ödüller kazanmasa da tanınmaya devam ediyor. Yakınlaştırılmamış görüntüde çiçeğin gözle seçilmesinin ne kadar zor olduğu göz önüne alındığında, övgüye değer bir performans.

    Fotoğrafçılıktan videografiye biraz uzaklaşan P30 Pro, zorlu koşullarda işleri sabit tutmak için Yapay Zeka'yı OIS (Optik Görüntü Sabitleme) ile birlikte kullanıyor. Kayıt sırasında cihazı sallama ve hatta koşuya çıkma konusunda oldukça aşırı testler yaptık.

    Her iki senaryoda da Yapay Zeka stabilizasyonu sahada mükemmel bir şekilde ortaya çıktı. Mükemmel bir şekilde sabit olmasa da sonuç görülebilir ve dengelemenin çok daha iyi hale geldiğini hayal etmek zor (yine de geçmişte şaşırdım.)
    Yapay Zeka video dengelemenin bir klibi aşağıdaki YouTube incelememizde mevcuttur:

    Son olarak, Huawei P30 Pro'yu şirketin önceki amiral gemisi olan Mate 20 Pro ile karşılaştırdık. Sonuçlar burada:
    [Resim: AI-Benchmark-Comp.png?fit=1000%2C563&ssl=1]
    Gözleriniz sizi aldatmıyor, P30 Pro'nun genel olarak bir sonucu daha düşüktü. Her ikisi de aynı NPU, CPU ve GPU kullandığında verilen bir sürpriz. Aslında, P30 Pro, Mate 20 Pro (8GB ve 6GB) üzerinden oynayabileceğiniz 2GB daha fazla RAM vardır.


    Benchmarklar hikayenin sadece küçük bir kısmını anlatıyor ve bu da son derece olumlu. Huawei kendini mükemmelleştirdi ve Yapay Zeka için çıtayı P30 Pro'lu bir akıllı telefonda kurdu.
  1. Kötü olmayın: Google özel bir Yapay Zeka etik paneli yaratıyor
    Forum: Yapay Zeka Genel - Cevap Yok

    admin 06-04-2019, 15:52
    Google, Yapay Zeka teknolojisinin neden olduğu toplumsal felaketleri, özel bir etik paneli oluşturulması ile önlemeyi hedeflemektedir.
    Panel, İleri Teknoloji Dış Danışma Konseyi (ATEAC) olarak adlandırılıyor ve dünyanın dört bir yanından bir dizi akademisyen ve uzmana sahip.

    Panelde şu anda sekiz kişi var, bazıları Hong Kong ve Güney Afrika'dan. Listede ABD eski devlet sekreter yardımcısı William Joseph Burns ve Bath Üniversitesi doçenti Joanna Bryson yer alıyor.

    Bryson, robotlara insan gibi davranmalarına karşı tartıştığı 'Robots Be Slave' adlı yüksek profilli bir tez yayınladı .

    “Onları insancıllaştırmak” diye yazdı, “Biz sadece gerçek insanları insanlıktan arındırmakla kalmıyoruz, aynı zamanda kaynakların ve sorumluluğun tahsisinde yoksul insan karar vermelerini teşvik ediyoruz” dedi.


    ATEAC'ın çeşitliliği, çeşitli geçmişlerin adil bir şekilde temsil edilmesini sağlamak için güçlü bir noktadır.Yapay Zeka'nın yüz tanıma gibi feci bir toplumsal etkiye sahip olabileceği alanlara odaklanacaktır.

    Daha dün, Yapay Zeka Haber kaplı BT liderlerinin yüzde 94'ü yapay zeka etik gelişimi üzerinde büyük bir sanayi odağı istiyorum keşfedildiği bir rapor.


    Google, insanları Yapay Zeka gelişmelerinin zararlı olmayacağına ikna etmek için mücadele etti. Hatta kendi çalışanlarından bazıları, dronlara Yapay Zeka teknolojisi sağlamak için Pentagon'la yapılan rezil Proje Maven sözleşmesi için istifa etti.


    Google’dan yapılan duyuruda, şirketin kendi Yapay Zeka gelişmelerinin etik olmasını sağlamaya çalıştığı öne sürülüyor. Herkesi ikna etmeyecek olmasına rağmen, bu hoş bir adım.
    ATEAC ilk toplantısı Nisan ayında yapılacak ve 2019 boyunca üç tane daha olacak. Tüm Yapay Zeka geliştirme endüstrisinin ahlakını geliştirmek amacıyla her birini takip eden bir özet yayınlanacak.
  1. DeepMind'in ilk ticari ürünü göz hastalıklarını teşhis ediyor
    Forum: Yapay Zeka Genel - Cevap Yok

    admin 06-04-2019, 15:50
    DeepMind'in ilk ticari ürünü göz hastalıklarını teşhis ediyor

    DeepMind ilk ticari ürününü piyasaya sürmeye hazırlanıyor ve karmaşık göz hastalıklarının teşhisine yardımcı olmayı hedefliyor.
    Ünlü Cambridge merkezli yapay zeka uzmanları, ürünlerinin ana şirketi Alphabet'in ilk tıbbi cihazı haline geleceğini umuyor.
    Canlı bir gösteride, hastanın gözünde retina taraması yapıldı. DeepMind'in sistemi sadece 30 saniyede bir teşhis ve 'aciliyet puanı' verebildi.
    Bu kadar çabuk tanı koyma yeteneği doktorların diğer amaçlarla değerli zamanlarını boşa çıkaracak ve hastaların en kısa sürede tedavi görmelerini sağlayacaktır.
    DeepMind'in glokom, maküler dejenerasyon ve diyabetik retinopati gibi sistemiyle çeşitli göz hastalıkları teşhis edilebilir.
    Londra'nın Moorfields Göz Hastanesi ile birlikte geliştirilen sistem, dünyanın önde gelen uzmanları ile aynı hassasiyet seviyesine sahiptir.
    Robotik ve 5G gibi kırsal alanlardaki hastaların da dünyanın önde gelen uzmanlarına ulaşmalarına yardımcı olması beklenir. DeepMind gibi AI sistemleri, hastanın nerede olursa olsun tıbbi sorunların en hızlı ve en doğru şekilde teşhis edilmesini sağlayacaktır.
    Ürün DeepMind Health tarafından geliştirilmektedir. İngiltere hükümeti, şirketin Streams uygulamasını geliştirirken 1,6 milyon hastanın tıbbi verilerine uygunsuz erişim sağladığına karar vermesinden sonra, bağlılık, eleştiriden payını aldı.
    Yüzde 100 çalışanı tutma oranına sahip olduktan sonra, son aylarda yetenek DeepMind'den sızmaya başladı . Bazıları, Akışlar tartışmasının yol açtığı tepkilerin DeepMind'in tıp endüstrisinde istekli ve çok ihtiyaç duyulan ortaklar bulmasını zorlaştırdığına inanıyor.
    DeepMind ilk olarak geçtiğimiz Ağustos ayında doğa bilimi Nature dergisindeki araştırmasıyla ilgili ayrıntıları yayımladı.
  1. PHP'ye Başlıyorum Gelin Öğrenelim
    Forum: PHP - Cevap Yok

    admin 28-03-2019, 23:44
    PHP'ye Başlıyorum

    PHP sunucu taraflı (server side), HTML ile uyumlu bir betik dilidir. Daha önce kullandığım “programlama dili” ifadesi PHP için yüzde yüz açıklayıcı değildir. PHP, HTML de olduğu gibi bir derleyici tarafından derlenmez, sadece sunucudaki php programı tarafından yorumlanır. C bilen birisi için PHP öğrenmesi çok basit olan bir dildir, öyle ki dosya işlemleri gibi karışık konularda PHP, C’den çok daha basittir.

    Yazdığınız PHP kodları hiçbir zaman sitenizin ziyaretçisine görüntülenmez. Ziyaretçi sayfanın kaynağını görüntülese bile göreceği sizin PHP kodlarınızın sunucu sistemdeki php programı tarafından HTML’ye çevrilmiş halidir. Aşağıdaki kod kümesini incelerseniz daha iyi anlayacağınızı sanıyorum (PHP’ye henüz bir giriş yapmadığım için kodları anlamayabilirsiniz, fakat yine de C’ye az da olsa aşina olanlar bir anlam çıkartacaktır).

    <?php
     printf(“Bu bir PHP dosyasıdır.<br>\n”);
     print(“Bu bir PHP dosyasıdır.<br>\n”);
     echo (“Bu bir PHP dosyasıdır.<br>\n”);
     echo “Bu bir PHP dosyasıdır.<br>\n”;
    ?>


    Yukarıdaki dört kod satırıda ekrana “Bu bir PHP dosyasıdır.” yazdıracaktır. Ve web istemcinizden sayfanın kaynağına baktığınız zaman sadece

    Bu bir PHP dosyasıdır.<br>
    Bu bir PHP dosyasıdır.<br>
    Bu bir PHP dosyasıdır.<br>
    Bu bir PHP dosyasıdır.<br>
    PHP'ye Başlıyorum



    gibi bir içerik görürsünüz. Yazdığınız kodlar sunucu sistemdeki php programı tarafından normal HTML kodlarına çevrilmiştir ve ziyaretçi bu kodlardan başka herhangi bir içerik göremez.

    Dikkat ettiyseniz sayfamızın kaynağındaki kodlar dört satır halinde yazılmış, eğer PHP programımızda her metinden sonra gelen “\n” karakterini kaldırsaydık sayfamızın kaynağındaki komutlar tek satıra yerleşirdi.

    Fakat bu sayfanın ziyaretçiye görünen kısmını değiştirmediği için üzerinde fazla durulması gereken bir konu değil.

    Bir diğer husus da kodlarımızda kullandığımız <br> etiketi. Evet PHP içinde doğrudan doğruya HTML etiketleri kullanabilmemiz bize çok büyük kolaylıklar sağlayacak. PHP dosyaları sunucu sistemde .php ya da .php3 uzantısı ile saklanır (.php3, PHP’nin 3. Sürümü için kullanılmaktadır). Dosyamızda PHP kodlarını kullandığımız yeri göstermek için <?php ?> ya da <? ?> etiket aralıklarını kullanırız. Bu etiketlerin kullanıldığı yerden itibaren sunucu etiket aralığındaki komutları php yorumlayıcısına gönderir, php yorumlayıcısı da bu kodları düz HTML kodlarına çevirir.

    Denemelerinizi bir UNIX ya da türevi işletim sistemi üzerinde yapmanızı tavsiye ederim, çünkü PHP ile birlikte kullanılan bir çok işlev Windows altında çalışmamakta ya da sorun yaratmaktadır.

    Elinizin altında PHP+MySQL desteği bulunan bir sistem olduğunu varsayarak bölüme başlıyorum.

    Öncelikle PHP’nin yazım kurallarından söz etmek istiyorum. Daha öncede belirttiğim gibi PHP kodları <?php ?> ya da <? ?> etiketleri arasında kullanılır. Yazdığımız her komuttan sonra ;işareti kullanırız (C’ye benziyor demiştim Wink). Bir web sayfasında veya formdan gelen değişkenleri adlarının başına $ işaret koyarak sembolize ederiz ve değişken adlarında Türkçe karakter kullanamayız.

    PHP ile Ekrana Yazı Yazma - [b]PHP'ye Başlıyorum

    [/b]


    PHP konu başlığında verdiğim örnekte olduğu gibi ekrana yazı yazmak için dört değişik yol kullanırız (en azından ben o kadar biliyorum!)

     printf(“Bu bir PHP dosyasıdır.<br>”);
     print(“Bu bir PHP dosyasıdır.<br>”);
     echo (“Bu bir PHP dosyasıdır.<br>”);
     echo “Bu bir PHP dosyasıdır.<br>”;


    Yukarıdaki dört satırda ekrana “Bu bir PHP dosyasıdır.” yazacaktır. Dikkat ederseniz her komuttan sonra bir ; işareti kullanılıyor. Bu işareti kullanmamamız halinde php programı hata verecektir. Şimdi içinizde “Bu yazıyı HTML ile daha kısa bir kod kümesi ile yazmak mümkün!” diye düşünenler olacaktır (bende ilk başta öyle düşünmüştüm :-), fakat ilerde ekrana değişken ile gelen bilginin yazdırılmasını gördükten sonra sizde bu yazım şeklinin gereksiz olmadığını anlayacaksınız.

    Aşağıdaki örnekte $deger adlı değişkene değer atayıp ekrana yazdırıyorum.

    <?php

    /* Buralar yorum satırı*/
    # Burası da tek satırlık yorum aralığı

    $değer = "Bu değişkenin değeri";
    echo $değer;

    ?>


    Bu dosyayı yazıp ilk.php diye kaydettikten sonra web istemcinizin adres satırına http://localhost/ilk.php yazarsanız ekranda “Bu değişkenin değeri” yazısını göreceksiniz (Kullandığınız sunucunun ismi localhost ve ilk.php dosyasının da ana www dizininde olduğunu varsaydım).

    PHP ile sadece metinsel işlemler değil, matematiksel işlemler de gerçekleştirebilirsiniz. Bunun için C programlama dilinde olduğu gibi toplama için +, çıkarma için -, çarpma için *, bölme için / ve kalan bulma için % sembolleri kullanılır.

    İsterseniz birkaç örnek ile matematiksel işlemlere giriş yapalım.

    <?php
    ###########################
    #   Matematiksel İşlemler #
    #         mat.php         #
    ###########################

    # Değişkenler tanımlanıyor
    $a = 10;
    $b = 2;
    $c = 3;

    # Kullanılacak matematiksel işlevler tanımlanıyor
    $toplam = ($a + $b + $c);
    $carpim = ($a * $b * $c);
    $bolum = ($a / $b);
    $kalan = ($a % $c);

    # Çıktılar ekrana yazdırılıyor
    echo "Tanımlı değişkenlerin toplamı: <b>$toplam</b><br>\n";
    echo "Tanımlı değişkenlerin çarpımı: <b>$carpim</b><br>\n";
    echo "Birinci ve ikinci değişkenin bölmesi sonucu bölüm: <b>$bolum</b><br>\n";
    echo "Birinci ve üçüncü değişkenin bölmesi sonucu kalan: <b>$kalan</b>";
    ?>


    Yukarıdaki örnek, programlama ile daha önce uğraşmamış birisi için biraz karışık olabilir. Önce değişkenlere değer atanır ve belirli işlevler kullanılarak bu değerler istenilen işlemlerden geçirilerek farklı bir sonuç elde edilir. Tıpkı matematikte kullanılan işlevler gibi, belirli işlemler istenilen değişken değerine uygulanır.

    Yani, y = f(x, w, z) = x + w + z gibi, bizde y yerine $toplam diye bir değişken ve x, w ve z yerine $a, $b ve $c gibi değişkenler kullandık. Matematikte kullanılan işlevlerden tek farkı kullanılan değişken tiplerinin farklı olması ve matematiksel işlemler dışında da işlemlerin yapılabiliyor olmasıdır.

    Bizim örneğimizde bazı matematiksel değerlerin toplamı, çarpımı ve bölümü alındı. Bu matematiksel işlemleri istenilen amaç doğrultusunda uzatıp karmaşıklaştırmak mümkün.

    Yazdığımız PHP dosyasının HTML kaynak kodu

    Tanımlı değişkenlerin toplamı: <b>15</b><br>
    Tanımlı değişkenlerin çarpımı: <b>60</b><br>
    Birinci ve ikinci değişkenin bölmesi sonucu bölüm: <b>5</b><br>
    Birinci ve üçüncü değişkenin bölmesi sonucu kalan: <b>1</b>


    gibi düz HTML kodlarından ibaret olacaktır. Ziyaretçinin hiçbir şekilde bizim PHP kodlarımızı görme şansı yoktur. Kaynak kodundan kullandığımız \n karakteri HTML çıktımızda satırların tek bir satır gibi değil de alt alta yazılmış satırlar olarak oluşmasını sağladı. Bu gibi durumlarda kullanımı gerekli değilse de kullanımının gerekli olduğu durumlar kesinlikle vardır.

    Birde bir önceki örneği dikkatli bir şekilde incelediyseniz orada değişkenin değerini verirken “ (tırnak işareti) kullanmama karşın son örnekte kullanmadım. Tırnak işareti kullanılmadığı zaman PHP değişkenimizin sayısal değer taşıyan bir değişken olduğunu anlayacaktır.

    Diyelim ki elimizde iki tane metin bilgisi taşıyan değişken var. Bunlar $ad = "Fehmi Noyan" ve $soyad = "İSİ" olsun. Bu değişkenlerin değerlerini birleştirip tek bir değişkende saklamak mümkündür. Saklamak istediğimiz tek değişken $ad_soyad ise kullanmamız gereken komut kümesi

    $ad_soyad = $ad . " " . $soyad;


    gibi bir satırdır. Bu işlem için çok farklı birleştirme yolları olsa da bu kullanım birçok yerde işinizi görecektir.

    Web Formundan Bilgi Almak - [b]PHP'ye Başlıyorum

    [/b]


    Buraya kadar anlattıklarım sadece bir giriş içindi (şimdiki aşama da daha işin başı, yani giriş bitmedi). Fakat sizinde bildiğiniz gibi dinamik bir sitede değişkenlerin değerleri kullanıcı tarafından sunucu sisteme yollanır. Bu iş için ya form yöntemi ya da adres satırından bilgi girişi yolu kullanılır. En yaygın ve kullanışlı olanı form yöntemidir.

    <! --- ad_soyad.html --- >
    <html>
    <head><title>Ad ve Soyad Bilgisi</title></head>
    <body bgcolor="#ffffff" text="#000000">
    <form action="ad_soyad.php" method="get">
    Adınız: <input type="text" name="ad"><br>
    Soyadınız: <input type="text" name="soyad"><br>
    <input type="submit" value="Gönder">
    </form></body></html>


    <?
    ################
    # ad_soyad.php #
    ################
    echo "Adınız $ad ve soyadınız $soyad.";
    ?>


    Yukarıdaki örnek dosyaları yorum satırlarında belirtilen adlar ile yazıp kaydettikten sonra, istemcinizin adres satırına http://localhost/ad_soyad.html yazıp karşınıza çıkacak formu doldurun. "Gönder" düğmesine bastıktan sonra PHP dosyamız çalışacak ve bize istenilen çıktıyı verecektir. Burada dikkat etmeniz gereken nokta istemcinizin adres satırındaki bilgidir. Eğer ben formda adım için “Fehmi Noyan” soyadım içinse “ISI” (Türkçe karakter kullanmamak için büyük i kullanmadım) bilgilerini girersem adres satırında

    http://localhost/ad_soyad.php?ad=Fehmi+Noyan&soyad=ISI


    gibi bir satır görünecektir. Dikkat ederseniz form ile gönderilen bilgilerin name="..." kısmının PHP dosyamızdaki değişken adlarını ve adres satırındaki PHP dosyası ve ? karakterinden sonraki kısımların PHP dosyamıza gidecek değişkenlerin değerini verdiğini fark edeceksiniz.

    HTML dosyamızda oluşturduğumuz web formunda kullandığımız <input> etiketi içindeki name="..." kodu bize o etiket ile gelen bilginin action=”...” kodu ile belirtilen dosyada aynı isimli değişken olarak kullanılacağını belirtir. Web formunu doldurmadan da, sadece adres satırına yukarıdaki satırı girerek de formumuza bilgi yollayabiliriz. Satırda PHP dosyamızın isminden sonra bir ? karakteri kullanılır, daha sonra her değişkenin adı ve değeri birbirinden & karakteri ile ayrılır. Bu yol ile web formlarından bilgi göndermek mümkündür ama pek kullanışlı değildir.

    Formumuzda get yöntemini kullandığımız için adres satırında girdiğimiz bilgiler görüntülendi. Aynı HTML dosyasını formun bilgileri gönderme metodunu post olacak şekilde ayarlayıp tekrar deneyin. Bu sefer adres satırında girilen hiçbir bilgi olmayacaktır. Yani sadece

    http://localhost/ad_soyad.php


    gibi bir satır olacaktır. Ben örneklerimde bundan sonra post yöntemini kullanacağım.

    Diziler - [b]PHP'ye Başlıyorum

    [/b]


    Diziler bazen kullanılması kaçınılmaz olan ve her PHP programcısının kullanımını bilmesi gereken elemanlardır. Adından da anlaşılacağı üzere, diziler bir tek değişkenin değeri içerisinde birden çok değer saklar. Mesela içerisinde haftanın günlerini barındıran bir dizi değişken

     $hafta = array(“Pazartesi”, ”Salı”, ”Çarşamba”, ”Perşembe”, ”Cuma”, ”Cumartesi”);


    şeklinde tanımlanabilir. Dikkat ederseniz haftanın son günü olan “Pazar” dizi içerisinde yer almıyor. Pazar’ı dizi içerisine dahil etmek için

     $hafta[] = ”Pazar”;


    şeklinde bir ifade kullanabiliriz. Böylece son belirtilen “Pazar” elemanı dizinin son elemanı olmuş olur.

    Dizi içerisindeki bir elemanı ekrana yazmak için, mesela dizinin 3. elemanı,

     echo $hafta[2];


    komutu kullanılır. Dizinin 3. elemanı için neden “2” rakamını kullandık? Bunun sebebi dizilerin ilk elemanının 1. değil 0. eleman olmasıdır. Bir dizi değişkeninin eleman sayısı count()işlevi ile öğrenilebilir.

     echo count($hafta);


    ifadesi ekrana 7 rakamını basacaktır. Dizi değişkenleri ve bunlar üzerinde işlem yapan işlevler ile ilgili bilgiyi PHP Manuel’in “Array Functions” kısmında bulabilirsiniz.

    Mantıksal İşleçler

    Bir PHP dosyasında en çok kullanacağınız ifadeleri oluşturan mantıksal işleçleri önceden programlama mantığı almamış bir kişi için ilk etapta anlaşılması biraz zor gelebilir fakat bu bölümü anlatırken bu durumu da göz önünde bulundurdum ve olabildiğimce sade ve anlaşılır bir dil kullanmaya gayret gösterdim.

    Bu etapta tekrar hatırlatmak istiyorum, PHP ile kullanılan mantıksal işleçleri C dili ile kullanılanların tamamen aynısıdır ve kullanım şekilleri arasında hiçbir fark yoktur. İlk önce kullanılan işleçlerinin hangileri olduğunu ve daha sonra bunların kullanım şekillerini anlatmayı daha uygun gördüm.

     
    İşleç İsmi
    &&
    Ve
    ||
    Veya
    ==
    Eşittir
    !
    Değil
    !=
    Eşit değil
    >
    Büyüktür
    <
    Küçüktür
    >=
    Büyük ya da eşittir
    <=
    Küçük ya da eşittir


    Yukarıdaki işleçlerini mantıksal ifadelerde karşılaştırma ve verilen koşulun doğruluğunu sınama için kullanacağız. İlk iki işleç dışında, az çok matematik bilgisi olan birisi diğer işleçlerinin kullanım şeklini kestirmiştir. Aslında ilk ikisi de matematikte işlenmiş olan mantık konusunun bir parçasıdır.

    Kullanacağımız ifadelere gelen bilgiler bilgisayar dilinde iki şekilde değerlendirilir. 0 ve 1, yani yanlış ve doğru. Kuracağımız tüm ifadeler bu iki değer çevresinde sınırlıdır.

    && İşleçi (Ve)
    || İşleçi (Veya)
    0 && 0 = 0
    0 || 0 = 0
    1 && 0 = 0
    1 || 0 = 1
    0 && 1 = 0
    0 || 1 = 1
    1 && 1 = 1
    1 || 1 = 1


    Yukarıda && ve || işleçlerinin aldıkları değerler doğrultusunda oluşturdukları değerleri yazdım. Bu karşılaştırma işleçlerini birazdan anlatacağım mantıksal ifadeler içerisinde kullanacağız.

    PHP Komutları - [b]PHP'ye Başlıyorum

    [/b]


    if
    if komutu bir ifadenin doğru olması halinde izleyen komut kümesini işletir. İngilizce anlamı “eğer” olan kelime üstlendiği görev bakımından da anlamı ile bir bütünlük içindedir.

    <?
    ################
    #    if.php    #
    ################

    $a = 5;
    $b = 3;
    if ( $a > $b )
    {  echo “a sayısı b  sayısından büyüktür.”; }
    ?>
    [size=undefined]

    Yukarıdaki kod parçası $a değişkenindeki değerin sayısal olarak $b dekinden büyük olması halinde komut kümesinde belirtilen kodu yerine getirip ekrana “a sayısı b sayısından büyüktür.“ metnini basacaktır. Aksi taktirde (yani $a’nın sayısal değeri $b’ninkinden küçük ise) hiçbir işlem yapılmadan komut kümesindeki kod atlanır.
    if... else ...
    Bu komutta if komutunda olduğu gibi belirtilen ifadenin doğru olması halinde if ile belirtilen komut kümesini işletir, ifadenin yanlış olması halinde ise else ile belirtilen komut kümesi işletilecektir.
    [/size]

    <?
    ###################
    #   if_else.php   #
    ###################

    $a = 2;
    $b = 3;
    if ($a > $b) {
        echo “a sayısı b sayısından büyüktür.”;
    } else {
       echo “b sayısı a sayısından büyüktür.”;
    }
    ?>
    [size=undefined]

    Parantez içindeki mantıksal ifadenin doğruluğu halinde if komutunu izleyen komut kümesini (“{“ ve “}” işaretleri ile sınırlı bölge) işletilir. Yukarıda $a ile belirtilen değişkenin sayısal olarak değeri $b ile belirtilenden büyük olması halinde ekrana “a sayısı b sayısından büyüktür.” metni aksi taktirde, yani $a değişkeni sayısal olarak $b'den küçükse, ekrana “b sayısı a sayısından büyüktür.” metni basılacaktır. Komut kümesinde belirtilen kod sadece ekrana yazı yazma değil, her türlü işlem için düzenlenebilir.
    while
    Yine İngilizce anlamı “esnasında” olan kelime yaptığı görev itibari ile anlamına yakındır. Parantez içinde belirtilen koşul doğru olduğu sürece istenilen komut kümesini işletir. Aşağıdaki örnek ilk bakışta biraz karışık gelebilir fakat dikkatli ve adım adım takip ederseniz pek de karışık olmadığını anlayacaksınız.
    [/size]

    <html>
    <head><title>HTML içinde kullanılan PHP</title>
    </head>
    <body bgcolor="#ffffff" text="#000000">

    <?
    ################
    #  while.php   #
    ################

    $a = 1;
    while($a < 7):
    echo “<h$a>Bu h$a ile yazılmış bir başlık.</h$a><br>\n”;
    $a = $a + 1;
    endwhile;
    ?>

    </body>
    </html>
    [size=undefined]

    Yukarıdaki örnek hem while döngüsünün kullanımına hem de HTML içinde PHP kullanımına güzel bir örnek oluşturuyor. Kullandığım while döngüsünü aşağıdaki gibi de yazabilirdim.
    [/size]

    <html>
    <head><title>HTML içinde kullanılan PHP</title>
    </head>
    <body bgcolor="#ffffff" text="#000000">

    <?
    ################
    #  while.php   #
    ################

    $a = 1;
    while($a < 7)
    {
    echo “<h$a>Bu h$a ile yazılmış bir başlık.</h$a><br>\n”;
    $a++;
    }
    ?>

    </body>
    </html>
    [size=undefined]

    Sonuç yine aynı olacaktır. Kullanım açısından bir fark yoktur hangisinin kullanılacağı programcıya kalmıştır fakat ben örneklerimde hep ikinci kullanımı tercih ediyorum.

    Yukarıdaki örnekte yabancı olduğunuz bir kullanım $a++ ifadesidir (Bu kullanımın aynısı C’de de vardır) Bu ifade $a = $a + 1 ifadesi ile aynıdır (Programcılıkta çok kullanılan bir ifadedir fakat deneyimi olmayanlar biraz zorlanacaktır). Bunun anlamı, ”$a’daki değeri bir arttır ve sonra bu değeri $a’nın yeni değeri olarak ata” dır. Yani $a = 1 ise $a++’dan sonra $a = 2 olacaktır. Aynı şekilde $a--'de, “$a’nın değerini bir azalt ve bu değeri $a’nın yeni değeri olarak ata” dır.

    Yukarıdaki örnekte ilk olarak $a değişkenine 1 değeri atanıyor ve bu <h$a> ifadesi ile bir HTML etiketine çevriliyor. $a = 1 değeri için bu ifade <h1>$a = 2 için bu ifade <h2> ... diye değerler alır. while döngüsü ile $a’nın alabileceği en son değerin 6 olduğu belirtilmiştir ($a < 7, yedi olduğu an döngü son bulur!). $a’nın 7 değerini alması ile belirtilen koşul yanlış olur (yani 0) ve döngü işletilmez. Eğer $a++ ifadesi kullanılmamış olsaydı, program sonsuz döngüye girecekti bu da ekrana sonsuz kere <h1> etiketi ile belirtilen metnin basılması demektir. (Aslında sunucu sistemdeki PHP ayar dosyasında öntanımlı olarak PHP dosyalarının maksimum çalışma süreleri 30 saniye olarak belirlendiği için sonsuz döngü sözcükleri tam olarak doğru değildir).

    while döngüsünde koşul önce gözden geçirilir, daha sonra işlemler gerçekleştirilir.
    do ... while
    do...while döngüsü, while döngüsü ile aynı işleve sahiptir. Yalnız arada bir fark vardır. While döngüsünde koşul döngüye girilmeden kontrol edilir buna karşın do....whiledöngüsünde koşul döngünün sonunda kontrol edilir.
    [/size]

    <?
    $a = 0;
    do {
     print $a;
    } while($a > 0);
    ?>
    [size=undefined]

    Yukarıdaki kod normal while döngüsü ile yazılmış olsaydı, yani aağıdaki gibi
    [/size]

    <?
    $a = 0;
    while($a > 0) {
     print $a;
    }
    ?>
    [size=undefined]

    ekrana hiçbir çıktı vermeyecekti. Halbuki ilk örnekte ekrana “0” basılacaktır. Do....while ile oluturulan bir döngü while ile de oluşturulabilir ve benim şahsi görüşüm, whiledöngüsünün kullanımı daha kolaydır. Tabi ki bu döngünün de kendine has kullanım alanları vardır ama ben şu ana kadar kendi yazdığım betiklerde bu tür döngüler için hep whiledöngüsünü kullandım.
    for
    for döngüsü de hemen hemen aynı işlevi görür. Kullanım şeklini, while döngüsündeki örnek ile aynı çıktıyı verecek bir örnek ile açıklamak istiyorum.
    [/size]

    <html>
    <head><title>HTML içinde kullanılan PHP</title>
    </head>
    <body bgcolor="#ffffff" text="#000000">

    <?
    ################
    #   for.php    #
    ################

    for ($a = 1; $a < 7; $a++)
    {
     echo "<h$a>Bu h$a ile yazılmış bir başlıktır.</h$a><br>\n";
    }
    ?>
    </body>
    </html>
    [size=undefined]

    Yukarıdaki kod da while döngüsündeki ile aynı çıktıyı verir. for döngüsünde değişkenin başlangıç değeri ilk olarak yazılır, daha sonra koşul ve en sonunda ise değişken için işletilmesi gereken bölüm gelir. Yani kullanımın kalıbı
    [/size]

      for (ilk_değer;koşul;işlem)
    [size=undefined]

    şeklindedir.

    Tabii benim kullandığım örnek tüm döngüler için geçerli, öyle durumlar ile karşılaşırsınız ki alternatifiniz olmaz yani sadece for ya da while döngüsünü kullanabilirsiniz. Nasıl olsa hepsi aynı işi yapıyor diye üstten bakıp geçmeyin, iyice kavrayın.
    switch
    switch döngüsü aslında iç içe geçmiş if döngüleridir. Fakat, kişisel deneyimlerime dayanarak söylüyorum, birçok if kullandığınız bir döngüde iş bazen gerçekten içinden çıkılmaz bir hal alıyor. Mesela bir web formu ile (drop-down menu ile) size bir değer gelecek. Siz bu değerin ne olduğunu anlamak istiyorsunuz. Bunun için menüde önceden tanımlı değerler arasında bir secim yapılır. İşte bu seçim için switch döngüsü kullanılır. Aşağıdaki dosyaları yorum kısımlarında belirtilen isimler ile kaydedin ve daha sonra istemcinizden menu.html dosyasını açın.
    [/size]

    <!-- menu.html adı ile kaydedin -->
    <html>
     <head>
       <title>Menu</title>
     </head>
     <body bgcolor="#ffffff" text="#000000">
       <form action="menu.php" method="post">
         <b>İşletim sisteminizi seçin</b><br>
         <select name=”os_type” size=”1”>
           <option value=”win”>Windows 9x</option>
           <option value=”winnt”>Windows NT</option>
           <option value=”linux”>Linux</option>
           <option value=”unix”>UNIX</option>
           <option value=”os2”>OS/2</option>
           <option value=”macos”>MacOS</option>
         </select>
         <input type="submit" value=”  Sorgula  “>
       </form>
     </body>
    </html>


    <?
    // menu.php adı ile kaydedin

    switch($os_type)
    {
     case “win” :
        echo “Kullandığınız işletim sistemi Windows 9x”;
        break;
     case “winnt” :
        echo “Kullandığınız işletim sistemi Windows NT”;
        break;
     case “linux” :
        echo “Kullandığınız işletim sistemi Linux”;
        break;
     case “unix” :
        echo “Kullandığınız işletim sistemi UNIX”;
        break;
     case “os2” :
        echo “Kullandığınız işletim sistemi OS/2”;
        break;
     case “macos” :
        echo “Kullandığınız işletim sistemi MacOS”;
        break;
    }
    ?>
    [size=undefined]

    Yukarıdaki örnek kullanıcıya kullandığı işletim sistemini soruyor ve gelen cevap doğrultusunda döngüde belirtilen kısmı işletiyor. Kullandığım break komutu programın o kısmının işletilmesi halinde döngüden çıkılmasını sağlar, yani kullanıcı işletim sistemin Linux olarak işaretlemişse Windows, WindowsNT ve en son Linux bölümü işletilir. Linux bölümündeki “Kullandığınız işletim sistemi Linux” metni ekrana basılır ve bir sonraki komut olan break işletilir, break komutunun işlemesi ile döngüden çıkılır ve böylece diğer değerler kontrol edilerek vakit kaybedilmez.

    switch döngüsünde kullanılan ve benim şu örnekte kullanmadığım bir özelliği daha var: default seçeneği.

    Bu seçenek diğer hiçbir seçim doğru olmadığı taktirde çalıştırılacak kısımdır. Bir örnek vermek gerekirse.
    [/size]

    <?
    // menu.php adı ile kaydedin

    $i = 5;
    switch($i)
    {
     case “2”:
        echo “Değeri 2”;
        break;
     case “3”:
        echo “Değeri 3”;
        break;
     default:
        echo “Değeri bilinmiyor”;
    }
    ?>
    [size=undefined]

    Bu kod ekrana “Değeri bilinmiyor” yazacaktır. Çünkü siz $i değişkenine tanımlı olan 2 ve 3 değerleri dışında ne değer verirseniz verin bu iki koşul dışında kalan bölüm yani defaultile tanımlı bölüm işletilecektir.
    [/size]


    Bazı PHP İşlevleri - [b]PHP'ye Başlıyorum

    [/b]


    Include() ve Require() işlevleri
    include ve require işlevleri bir PHP programcısının hayatını kolaylaştıran başlıca işlevlerdendir. Bu iki işlevin görevleri birbirinin aynı olsa da işleyişlerinde ufak ama önemli bir fark vardır. Bu iki işlev parametre olarak aldıkları dosyayı sanki o dosyanın tüm içeriğini yazılmışçasına işler. Mesela

    <?
    #################
    #  inc_req.php  #
    #################

    include (“./dosya.html”);
    require (“./dosya.html”);

    ?>
    [size=undefined]

    Bu PHP kodu bulunduğu dizindeki dosya.html dosyasını iki kere ekrana basar. Yani sanki siz o dosyanın içeriğini elle yazmışsınız gibi çalışır. Bu iki işlev arasındaki fark, require() işlevi sadece gerektiği durumlarda dosyayı işler fakat include() işlevi dosya ekrana basılmayacak olsa bile (bir döngü içinde olabilir) dosyayı açıp hafıza kaybına sebep olur. Bunun için include() işlevini kullanmanızın zorunlu olmadığı durumlarda require() işlevini kullanmanız performansı arttıracaktır.
    mail() işlevi
    Adından da anlayacağınız üzere PHP’de e-posta göndermek için kullanılan işlevdir. Kullanımı çok basit ve zahmetsiz olmasına karşın eğer denemelerinizi evde bir Windows sistemi üzerinde gerçekleştiriyorsanız bu işlevi kullanmak için bilgisayarınıza bir de eposta sunucusu kurmanız gerekli (ne yazık ki PHP ile kullanılan birçok işlev Windows altında sorun çıkarıyor). Kurulu bir Linux sistemde böyle bir sorununuz yok, çünkü Linux ile birlikte kurulan sendmail programı e-posta gönderme işinizi hallediyor.
    [/size]

    <?
    ######################
    #   mail_gonder.php  #
    ######################

    mail ($kime, $konu, $mesaj, ”From: $kimden\n”);

    ?>
    [size=undefined]

    Yukarıdaki tek satır $kimden değişkeni ile gelen kişinin adresi ile $kime adlı adrese $konu adlı ve içeriği $mesaj olan e-postayı gönderir. “From:” bölümü e-postanın kimden geldiğini belirtir. Tabi yukarıdaki PHP dosyasının çalışabilmesi için bu dosyaya gerekli bilgileri yollayacak HTML dosyasının da yazılması gerekli.
    system() işlevi
    Bu işlev PHP bir sistem modülü olarak kurulduğunda işletilebilir bir işlevdir. C programlama dilindeki system() işlevi ile aynı görevi yapar. Yani işleve parametre olarak girilen komutu işletim sistemi üzerinde işletir.
    [/size]

    <?
    ##################
    #   system.php   #
    ##################

    $dizin_icerigi = system(“ls”);
    echo $dizin_icerigi;
    ?>
    [size=undefined]

    Yukarıdaki örnek PHP dosyamızın bulunduğu dizinin içeriğini ekrana basar.
    isset() ve unset() işlevleri
    isset() işlevi bir değişkenin içersinde bir değer bulunup bulunmadığını kontrol eder. Bazen bir PHP programında değer atanmamış değişkenler de bulunabilir. Bu değişkenler boş yere bilgisayarın hafızasında yer işgal eder. Ayrıca bu işlevi bir formdan bilgi alırken bilginin gönderilip gönderilmediğini kontrol etmek için de kullanabiliriz.

    unset() işlevi ise kendisine parametre olarak verilen değişkeni yok eder. Kullanımları isset($degisken) ve unset($degisken) şeklindedir.
    [/size]


    PHP ile Dosya İşlemleri - [b]PHP'ye Başlıyorum

    [/b]


    Daha öncede belirttiğim gibi PHP, C programlama dili ile birçok benzerlik göstermesine rağmen dosya işlemleri gibi uğraştırıcı işlemlerde programcıya büyük kolaylıklar sağlar. PHP’de dosyalar ile kullanılabilecek birçok işlev olmasına rağmen (altmıştan fazla!) burada sadece dosya ve dizin açma, dosyadan ve dizinden okuma ve dosyaya bilgi yazma gibi konulara değineceğim.

    fopen() işlevifopen() işlevi PHP’de dosyaları açmak için kullanılır. İşleve parametre olarak iki değer girilir. Birincisi, dosya adı ve ikinci de üzerinde işlem yapılacak dosyanın hangi işlem için kullanılacağıdır.
    <? fopen(“dosya_adı”, ”amaç”); ?>
    [size=undefined]

    İşlevin kullanımı yukarıdaki kalıba göredir. “dosya_adı” ile belirtilen yere üzerinde işlem yapılacak dosya tam yolu ile yazılmalıdır, “amaç” kısmına ise dosyanın açılacağı kip yazılır.

    Kip
    Kullanım Amacı
    r
    Dosya sadece okuma için açılır. İmleç dosyanın başında konumlanır.
    r+
    Dosya hem yazma hem okuma için açılır. İmleç dosyanın başında konumlanır.
    w
    Dosya yazma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
    w+
    Dosya hem yazma hem okuma için açılır. Eğer aynı isimli dosya varsa silinir ve yeniden oluşturulur.
    a
    Dosya sadece yazma için açılır. İmleç dosyanın sonuna konumlandırılır. Dosya yoksa oluşturulur.
    a+
    Dosya hem yazma hem okuma için açılır. İmleç dosyanın sonuna konumlanır. Dosya yoksa oluşturulur.

    Yukarıdaki tablo fopen() işlevi ile birlikte kullanabileceğimiz dosya açma kipi parametreleridir.
    [/size]

    <?
    #################
    #  dosya_ac.php #
    #################
    $dosya_ac = (fopen(“./dosya.txt”, ”r”));
    if ($dosya_ac)
    {
     echo “Dosya başarı ile açıldı ”;
      if (fclose($dosya_ac))
       {
           echo “ve kapatıldı.”;
        }
         else
       {

         echo “fakat kapatırken hata oluştu!”;
      }
    }
     else
    {
     echo “Dosyayı açmaya çalışırken bir hata oluştu!”;
    }
    ?>
    [size=undefined]

    Yukarıdaki PHP dosyası dosyanın açılıp açılamamasına göre ekrana bir mesaj verecektir. Açılan bir dosyayı kapatmak için fclose() işlevi kullanılır.

    Yukarıdaki örnekte ilk if deyiminin içerisinde başka bir if deyimi kullandım. Bir dosyayı açıp tekrar kapatırken karşılaşabileceğimiz tüm ihtimalleri göz önünde bulundurmamız gerekmektedir. Mesela dosya açma işlemi başarılı bir şekilde gerçekleşmediyse PHP ekrana “Dosyayı açmaya çalışırken bir hata oluştu!” yazısını yazacaktır. Şayet dosya açma işlemi başarılı ise “Dosya başarı ile açıldı ” yazısını yazacak ve dosyanın doğru bir şekilde kapatılıp kapatılamaması durumuna göre “ve kapatıldı.” veya “fakat kapatırken hata oluştu!” ifadelerinde birisini ekrana basacaktır.
    fgets() ve fread() işlevleri
    Bu iki işlev yazma modunda açılmış bir dosyadan bilgi almak için kullanılır. Aralarında ufak bir fark vardır. fgets() işlevi metin dosyalarında kullanılır ve dosyayı satır satır okur.fread() işlevi ise dosyayı ikili kipte (bayt bayt) okur.
    [/size]

    <?
    ####################
    #  dosya_oku.php   #
    ####################

    $dosya = fopen(“./dosya.txt”, ”r”);
    while (!feof($dosya))
    {
     $satir = fgets($dosya,1024);
     echo “$satir<br>”;
    }
    fclose($dosya);
    ?>
    [size=undefined]

    Yukarıdaki PHP programı bulunduğumuz dizindeki dosya.txt adlı dosyayı okuma kipinde açıp dosyanın sonuna kadar (!feof kalıbını birazdan anlatacağım) satır satır okuma gerçekleştirir ve ekrana yazar. Dosyayı okuma işlemi bitince de dosyayı kapatıp programı sonlandırır. fgets ile kullandığım “1024” rakamı okunacak bir satırdan kaç bayt alınacağını belirtir. Aslında yukarıdaki program require() işlevi ile hemen hemen aynı işi yapar.
    fputs() ve fwrite() işlevleri
    Tahmin edeceğiniz gibi bu iki işlevde dosyaya bilgi yazmak için kullanılır. İkisi arasında bir fark yoktur. Yazma kipinde açılmış bir dosyaya bilgi girişi için kullanılırlar.
    [/size]

    <?
    ###################
    #  dosya_yaz.php  #
    ###################
    $metin = ”Burada herhangi bir metin olabilir.”;
    $dosya = fopen(“./defter.txt”,”w”);
    fwrite($dosya,$metin);
    fclose($dosya);
    ?>
    [size=undefined]

    Yukarıdaki PHP dosyası $metin adlı değişkendeki bilgiyi $dosya ile belirtilen dosyaya yazacaktır. Bu işlem sırasında bulunduğumuz dizinde defter.txt adlı bir dosya varsa silinecek ve yeniden oluşturulacaktır. Eğer varolan dosyamıza ekleme yapmak istiyorsak kullanmamız gereken dosya açma komutu fopen(“./defter.txt”,”a”) şeklinde olmalıdır. Ekleme dosya sonunu yapılır.
    feof
    Bir dosyanın sonunun gelip gelmediğini kontrol eder. Daha önceki örneklerimden birinde kullanmıştım.
    [/size]

     while (!feof($dosya)) ......
    [size=undefined]

    Oradaki kullanım DEĞİL mantıksal işleçi ile olduğu için kullandığım while döngüsünde dosya sonu olmayana kadar koşul doğru kabul edilip döngü sürdürülecektir.
    [/size]


    PHP ile Dizin İşlemleri - [b]PHP'ye Başlıyorum

    [/b]


    opendir() işlevi
    Adında da anlaşılacağı gibi bu işlev kendine parametre olarak verilen dizini açmak için kullanılır. Bulunduğumuz dizindeki “resimler” alt dizinini açmak için

     opendir(”./resimler”);
    [size=undefined]

    gibi bir ifade kullanırız.
    readdir() işlevi
    Bu işlev ise açık olan bir dizinde okuma yapmamıza olanak sağlar. Yine bulunduğumuz dizindeki “resimler” altdizinini okumak için
    [/size]

     $dizi=opendir(“./resimler”);
     readdir(“$dizin”);
    [size=undefined]

    gibi bir komut kullanırız. İsterseniz dizinler ile ilgili iki işlevi bir örnek ile açıklayalım. Bu işlevin çalışabilmesi için bulunduğumuz dizinin içinde bir “abc” dizini olmalı ve kullanıcı yetkileri 705 yada 755 şeklinde (yani herkese okuma yetkisi) olmalıdır.
    [/size]

    <?
    ##################
    #   dizin.php    #
    ##################

    $i = 1;
    $dizin_ac = opendir(“./abc”);
    while ($dosya = readdir($dizin_ac))
    {
     echo “Bu abc dizinindeki $i. eleman : $dosya<br>”;
     $i++
    }

    ?>
    [size=undefined]

    Yukarıdaki PHP programı bulunduğumuz dizindeki “abc” dizinini açıp, içeriğini sıra ile ekrana basmaktadır.
    ereg() ve eregi() işlevleri
    ereg() ve eregi() işlevleri bir metin içerisinde verilen bir kelimeyi arar. eregi() işlevi ereg() işlevinden farklı olarak arama sırasında büyük-küçük harf ayrımı yapmaz.

    Hazırladığınız bir web formunda kullanıcının doğru bir e-posta adresi girip girmediğini kontrol etmek için aşağıdaki gibi bir kod kullanabilirsiniz.
    [/size]

    <?
    ################
    #   ereg.php   #
    ################
    if(ereg(“@”,$eposta) && ereg(“.”,$eposta))
    {
     echo “Kaydolduğunuz için teşekkürler!”;
    }
     else
    {
     echo “<font color="#f80000">Lütfen e-posta adresinizi doğru girin!</font>”;
     require(“uye_kayit.html”);
    }

    ?>
    [size=undefined]
    ereg_replace() ve eregi_replace işlevleri
    Bu işlevler de belirtilen metin içinde istenilen bir kelimeyi bulup değiştirmek için kullanılır. Yine eregi_replace() işlevinin ereg_replace() işlevinden farkı büyük-küçük harf ayrımı yapmamasıdır.
    [/size]

    <?
    ######################
    #  ereg_replace.php  #
    ######################
    ereg_replace(“fni18444@gantep.edu.tr”, ”yeni_adresim@sunucu.com”, $metin);
    ?>
    [size=undefined]

    Diyelim ki 10-15 sayfalık bir yazı yazdım ve bu yazı içerisinde e-posta adresimi sıkça kullandım. Yazımı yazdıktan bir süre sonra e-posta adresim değişti. İşte yukarıdaki kod ile önceden yazdığım yazı içerisindeki eski adresimi yenisi ile değiştirebilirim.
    md5() işlevi
    md5() şifreleme için kullanılan bir işlevdir. İşleve parametre olarak verilen metnin uzunluğu ne kadar olursa olsun işlev bu metni 32bit ile şifreler ve geri dönüşümü yoktur. Yani md5ile şifrelenmiş bir metni tekrar eski haline getirmek olanaksızdır (en azından şimdilik Wink). Peki bu ne işimize yarayacak? Karşılaştırma yaparken, mesela md5 ile şifrelenip veritabanına kaydedilmiş bir şifreyi kontrol etmek için, kullanıcıdan gelen şifreyi de md5 ile şifreleyip karşılaştırma yapmanız yeterli olacaktır. Md5 hakkında daha ayrıntılı bilgi için internette herhangi bir arama motorundan “RFC1321” aratmanız yeterli olacaktır.
    unlink() işlevi
    Bu işlev kendisine parametre olarak girilen dosyayı silmek için kullanılır. Kullanımı unlink(“dosya_adı”) şeklindedir.
    mkdir() ve rmdir() işlevleri
    Bu iki işlev de dizin oluşturma ve silme için kullanılır. mkdir() kendisine parametre olarak verilen bir dizini oluşturur ve rmdir() ise kendisine parametre olarak verilen dizini siler.

    Tabii buraya kadar anlattığım dizin ve dosya işlemlerini gerçekleştirebilmeniz için o dosya ve dizin üzerinde kullanım hakkına sahip olmanız gerekmektedir. Aksi taktirde dosyaya ulaşımda sorun olduğuna dair bir hata mesajı ile karşılaşırsınız. İnternet'teki bir sunucudan istekte bulunan bir kullanıcı sunucu sistem tarafında “diğer” kullanıcı grubuna dahil edilir. Dosya erişim yetkileri bu özellik göz önünde bulundurularak ayarlanmalıdır.
    [/size]


    PHP ile İşlevleri Yazmak - [b]PHP'ye Başlıyorum

    [/b]


    PHP ile hazır olan işlevlerin yanı sıra, hazır olarak gelen işlevlerden yararlanarak kendi işlevlerimizi de kullanabiliriz. Bu iş normal bir programlama dilindeki işlev tanımlama işleminden pek farklı değildir. İşlev tanımlama işini bir örnek üzerinde anlatırsam daha iyi anlaşılacağını düşünüyorum.

    Ben hazırladığım sitelerde konu başlıklarını ve kategorileri vermek için çoğunlukla ana sayfamda oluşturduğum küçük tabloları kullanırım. Bu tablolar benim başlıklarım için bir çerçeve görevi görür.

    <!-- Bu dosyayı fonk.php adı ile kaydedin -->
    <html>
    <head>
    <title>PHP ile işlev tanımlama</title>
    </head>
    <body bgcolor="#ffffff" text="#000000" link="#000000" alink="#000000" vlink="#000000">
    <center>
    <?
    function tablo($baslik, $metin, $url)
    {
     echo "<table border='0' cellpadding='1' bgcolor='#000000' width='600'><tr><td>
    <table border='0' cellpadding='0' cellspacing='0' bgcolor='#334455' width='600'>
    <tr><td><font color='#ffffff'><b><li>$baslik</b></font></td></tr>
    <tr><td bgcolor='#eaeaea'> $metin<br><a href='$url'>$url</a></td>
    </tr></table></td></tr></table><br>\n";
    }

    tablo("Linux İşletim Sistemi","Linux, Linus Torvalds adında Finlandiyalı
    bir öğrenci tarafından geliştirildi. Daha ayrıntılı bilgi
    için...","http://www.belgeler.org/KiTAPLIK/archive-tlkg-lis.html");

    tablo("PHP","Açık kaynak kodlu olarak dağıtılan PHP dinamik web sayfası tasarımı
    konusunda bir ıır açtı! PHP konusunda her türlü yardımı bulabileceğiniz PHP
    Manual gönüllüler tarafından birçok dile çevrildi.","http://www.php.org.tr");

    ?>

    </body>
    </html>


    Yukarıdaki PHP dosyası ile tablo adlı bir işlev tanımladım. Tanımladığım bu işleve her seferinde $baslik, $metin ve $url değişkenlerini gireceğimi belirttim. PHP yorumlayıcım tablo() işlevini yorumlarken daha önceden yazılmış function tablo () { .... } bölümünden yaralanır. Bu bölümde değişkenlerin adları yerine işlev adı ile daha sonradan verilen değerleri kullanır. Bu kullanım işi tanımlama sırasına göredir. Bu gibi işlevler sayesinde sayfanızda çok kullandığınız kalıpları sürekli yazmak zorunda kalmazsınız. Örneği kaydedip çalıştırırsanız daha iyi anlayacağınızı sanıyorum.

    Buraya kadar PHP’ye bir giriş yaptım. Buradan sonra MySQL’e de bir giriş yapmayı ve daha sonra örneklerimi ve anlatımımı PHP+MySQL üzerinde devam ettirmeyi düşünüyorum.
  1. Javascript Nedir?
    Forum: JavaScript - Cevap Yok

    admin 26-03-2019, 22:48
    Peki nedir bu javascript? Javascript Nedir?

    Web sayfaları, masaüstü programlarının yanında biraz daha farklı yapıya sahip olan yapılardır. Peki  bu fark nedir?

    Bir masaüstü uygulaması, bilgisayarımız üzerinde çalışmaya başladığı andan, bizim onu kapattığımız ana kadar çalışırlar ve bizim işlemlerimizi gerçekleştirmemizi sağlarlar. Web sayfaları ise onları çağırdığımız anda, kaynak kodları web server ve yorumlayıcılardan milisaniyeler içerisinde geçerek, bizim HTML adını vermiş olduğumuz bir dile render edilerek sayfayı isteyen tarayıcıya gönderirlirler. Bu kodların bizim tarayıcımıza geldiği an, web sayfasındaki bütün kodların çalışıp, işlemleri yapıp bize sonucu geri döndükleri ve tüm işlerin bittiği andır. Yani herşey milisaniyeler içinde gelişitikten sonra sayfalar bize sadece statik (durağan) bir görüntü sunarlar.

    İşte Javascript tam burada devreye girer. Bu karşımıza sunulan, HTML kodlarından oluşmuş görüntüyü dinamik hale getirmemize yarar bir nevi. Mesela web sayfasındaki bir nesneyi sürükleyip,  sayfa içindeki başka bir alana bırakabilmek veya sayfa içindeki bir resmin üzerine geldiğimizde, yeni bir sayfa açılmaksızın resmin büyüyp ekranı kaplaması bu dinamizme örnek olabilir. Tüm bu dinamizmi yaratan kavram javascript'tir.



    Peki bu nasıl olur? Javascript Nedir?



    Javascript, HTML kodlarının arasında yazılıp tarayıcıya gönderilir. Tarayıcılarımız, bu kodları alıp yorumlayarak ekrandaki HTML nesnelerinin yer değiştirmesi, özellik değiştirmesi gibi işlemleri yaparlar. Yani javascript kodları, sunucumuzda yorumlanmak yerine, bizim bilgisayarımız üzerinde çalışırlar. Tüm bu dinamizmi yaratan olay da budur.



    Sayfalarımıza nasıl ekleriz? Javascript Nedir?



    Javascript kodlarını, HTML sayfalarımıza eklemek için 2 yöntem mevcuttur.
    İlk olarak HTML kodlarının arasında, "<script type="text/javascript">// Kodlar.....  </script>" şeklindeki taglardan yararlanabiliriz. Küçük uygulamalarımız için yazması kolay bir yöntem olabilir. Fakat satırlarca uzayan animasyonlar v.b. uygulamalarımız için ideal olan, kodlarımızı ayrı bir dosyada yazarak, HTML içindeki, "<head></head>" etiketlerinin arasına, "<script type="text/javascript" src="benim_dosyam.js"></script>"  etiketlerini ekleyerek  kodlarımızı tanıtmamız mümkün.

    kaynak http://www.deltawebsistem.com/blog/javascript-nedir/
  1. Yapay sinir Ağlarında Skor fonksiyonu
    Forum: Yapay Sinir Ağları - Cevap Yok

    admin 26-03-2019, 01:01
    [color=rgba(0, 0, 0, 0.75)]Aşağıdaki gibi bir yapay sinir ağı düşündüğümüzde bu ağı temsil eden lineer fonksiyonumuz y = W1.x1 + W2.x2 olacaktır. Burada x değerleri daha önce tanımladığımız gibi fonksiyonun girdilerini ve W değerlerinin her bir x için tanımlanmış parametreler ve b değerinin de x'den bağımsız bias değeri olduğunu söylemiştik. Tek bir y değeri için birden fazla x girdisi olabileceği gibi bu x değerlerinin bağlı oldu ayrı y değerleri de olabilir.[/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: VR1AlZ.jpg]
    [Resim: i3I8i5.jpg]
    [/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Böyle lineer fonksiyonun hesaplanmasında her bir x değeri kendisi için tanımlı W ağırlığı ile çarpılarak toplanır ve en son bias b değeri ile toplanarak y değeri hesaplanır. Burada dikkat edilmesi gereken husus her bir girdi x için bir adet W tanımlanırken, sadece çıktı değeri y kadar (nöron sayısı kadar) b değeri bulunduğudur. Bu şekilde derin öğrenme modelinde birden fazla perceptron bulunabilir bu perceptronların her biri aldığı girdi değerleri için lineer hesaplama yaparak bir çıktı değeri üretir ve bu çıktı değeri skor değeri olarak adlandırılır. Bu skor hesaplama işlemi aslında bir lineer fonksiyon çıktısıdır ve bu fonksiyona skor fonksiyonu (scor function) denir ve y = f(x,W)+b şeklinde tanımlanır.[/color]
    [/color]
    [color=rgba(0, 0, 0, 0.9)]Soru : Derin öğrenmenin non-convex problemlerin çözümünde iyi olduğu söylenmişti fakat burada skor fonksiyonu lineer hesaplama yapıyor, neden?[/color]

    [color=rgba(0, 0, 0, 0.75)]Yapay sinir ağları non-convex problemlerin çözümünde iyi; non-convex problemlerde optimizasyon algoritmaları kullanarak çözülüyor. Bununla birlikte yapay sinir ağlarının en küçük parçası olan perceptronlar lineer fonksiyonlardır ve çıktıları lineer'dir. Bununla birlikte çok katmanlı yapay sinir ağlarında skor fonksiyonun çıktısı aktivasyon fonksiyonları vasıtasıyla non-lineer hale getirilmektedir. Yani optimizasyon fonksiyonları vasıtasıyla problemler non-lineer çözüm üretilmektedir.[/color]

    [color=rgba(0, 0, 0, 0.9)]Loss fonksiyonu (cost fonksiyonu, objective function)[/color]

    [color=rgba(0, 0, 0, 0.75)]Loss fonksiyonu tasarlanan modelin hata oranını aynı zamanda başarımını ölçen fonksiyondur. Derin ağların son katmanı loss fonksiyonun tanımlandığı katmandır. Loss fonksiyonu, hata hesaplama işini problemi bir optimizasyon problemine dönüştürerek yaptığı için optimizasyon terminolojinde kullanılan objective function, cost function isimleriyle de tanımlanmaktadır. Loss fonksiyonu temelde modelin yaptığı tahminin, gerçek değerden (ground truth) ne kadar farklı olduğunu hesaplamaktadır. Bu nedenle iyi tahmin eden bir model oluşturmamışsak, gerçek değer (ground turth) ile tahmin edilen değer arasındaki fark yüksek olacak dolayısıyla loss değeri yüksek olacak, iyi modele sahipsek loss değeri az olacaktır. Birebir aynı olduğu durumda loss 0 olacaktır. İyi bir modelden beklentimiz 0'a yakın loss değerine sahip olmasıdır. Neden 0 değil? Kısa cevabı regularization. Uzun cevabı yazının devamında, soruyu aklımızda tutalım.[/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Örneğin kedi ve köpek resimlerinden oluşan iki sınıfı ayırabilen model tasarlandığını düşünelim. Bu durumda modele test için kedi resmi verildiğinde o resmin kedi mi köpek mi olduğuna nasıl karar verilecektir? Bunun için kullanılabilecek en basit yöntem en yakın komşu algoritmasıyla teker teker tüm kedi resimleriyle ve tüm köpek resimleriyle farkını alıp, bu farkları toplamaktır. Elde edilen bu fark değerleri bize kedi ve köpek sınıfı için hata oranı verecektir. Test resmi kedi ise kedi sınıfı için hata oranın köpek sınıfına göre daha az olması beklenecektir.[/color][/color]


    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][Resim: jHqB6J.jpg][/color][/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Yukarıdaki örnekte görüleceği üzere test edilen resim her pixelinden train edilen resimin karşılık gelen pixeli çıkarılarak yeni bir fark resmi oluşturulmakta, bu fark matrisindeki değerler toplanarak iki resim arasındaki fark değeri hesaplanmaktadır. En yakın komşu algoritmasında bu işlem eğitim veri setindeki her bir resim için tekrar edilmektedir. Bu yöntem başarılı olmasına rağmen bir kaç handikabı beraberinde getirmektedir. İlk olarak oluşturulan model içerisinde eğitim esnasında kullanılan tüm resimler yer alacaktır, bu da modelin aşırı büyük olmasına neden olcaktır. İkinci ve en önemli problem ise test işleminde test resmi eğitim kümesindeki tüm resimlerle teker teker karşılaştırılacaktır; bu durumda tespit zamanın uzun sürmesine neden olacaktır. Bu nedenle bu yöntem kullanılabilir değildir. [/color]
    [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.75)]Problemi çözmek için ortaya atılan ikinci yaklaşım ise eğitim esnasında kedi ve köpek sınıflarını mümkün olabilecek en yüksek düzeyde temsil edecek prototip resimler oluşturmak ve test esnasında bu prototip resimlerle test resminin farkına bakarak karar vermektir. Bu yöntemte dikkat edilmesi gereken prensib olabildiğince az sayıda prototiple sınıfları temsil edebilmektir; yani prototip resim sayısının azlığı önemli bir etkendir. Amaç en az sayıda prototip resimle sınıfı temsil edebilmektir. Bu yaklaşım handikaplarından birisi bu temsili resimlerin var olan veri setini olabildiğince yansıtıyor olabilmesidir. Eğer resimler belli ortamlarda yada türlerde çekilmişse prototip o yana meyil gösterecektir. Aynı türe ait farklı resim geldiğinde fark beklenenden büyük olacaktır. Örneğin sadece siyah kedilerin fotoğraflarının olduğu bir model eğitildiğinde oluşacak prototip siyah ağırlıklı renklerden oluşacak ve beyaz kedi geldiğinde fark (loss değeri) büyük olacaktır. Bu nedenle bu yaklaşımda eğitim veri setinin büyüklüğü ve çeşitliliği önemlidir.[/color]

    [color=rgba(0, 0, 0, 0.9)]Prototip (Template)[/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Öğrenme gerçekleştikten sonra model her bir sınıf için bir prototip resim oluşturmaktadır. Aslında bu prototip, model tarafından öğrenilen ağırlık matrisidir. Buna o sınıfın prototipi yada template denilmektedir. Aşağıda CIFAR verisetine ait prototip resim örnekleri gösterilmiştir. Buna göre problemde 10 adet sınıf var ve herbir sınıfı temsil eden birer adet prototip resim oluşturulmuştur. Daha sonra herhangi bir resmin bu sınıflardan hangisine ait olduğu tespit edilmek istendiğinde; test resmi bu prototiplerin herbiriyle karşılaştırılarak fark değeri hesaplanmakta, en düşük fark hangi prototip ile çıkmışsa resim o sınıfa ait olarak işaretlenmektedir. Prototiple karşılaştırma yönteminde; model sadece prototipleri kayıt etmekte ve karşılaştırma işlemi sadece bu prototipler üzerinden yapılmaktadır. Bu anlamda zaman ve yerden tasarruf edilmektedir.[/color][/color][/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][Resim: fP3TEY.jpg][/color][/color][/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Loss değeri hesaplayan birden çok lineer loss fonksiyon türü mevcuttur. Bu loss fonksiyonları yapay sinir ağının ürettiği skorları normalize ederek loss değeri hesaplamaktadır. Bunlardan en sık kullanılanları Sigmoid, Multiclass Support Vector Machine (SVM), Softmax, Cross Entropy Likelihoo vb. dir. Sigmoid iki sınıftan oluşan problemlerin çözümünde kullanılırken diğer fonksiyonlar çok sınıflı problemlerin çözümünde kullanılmaktadır. Lineer sınıflandırıcının yaptığı iş öğrenilen prototip ile eşleme yaparak fark değeri üretmektir. Yani farklı bir açıdan söylenecek olursa Loss fonksiyonu temelde eğitim sonucunda elde edilen W ağırlık ve b bias parametrelerinin problem çözümü için ne kadar uygun olduğunu hesaplamaktadır. [/color]

    [color=rgba(0, 0, 0, 0.75)]Çünkü model eğitildikten sonra elde edilen W ağırlık matrisi sınıf sayısı kadar satır içerecek ve her bir satır problemde tanınmak istenen sınıflar için ağırlık değerleri taşıyacaktır. Eğitim işlemi sonucunda elde edilen W matrisinin her bir satırı sınıfların prototipine tekabül etmektedir. Yeni bir resim test için geldiğinde bu ağırlık matrisi ile çarpılıp sonuç üretilmektedir. Çarpım sonucu modelin her bir sınıfın için benzerlik skorunu belirlemektedir. En yakın komşu algoritmasında tüm resimlerle karşılaştırma yapılırken burada sadece prototip ile karşılaştırma yapılmaktadır.[/color]
    [/color]
    [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][Resim: Fu9Dtk.jpg][/color][/color][/color][/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Yukarıda örnek yapay sinir ağı modelinde f = W.x olarak tanımalan f fonksiyonu skor fonksiyonunu temsil ederken, Li fonksiyonu da hata (loss) fonksiyonunu temsil etmektedir. Ağ yapısından da görüleceği üzere modelin başarımı arttırmak için Li loss fonksiyonuna, f skor fonksiyonun yanısıra R(w) iyileştirme (regularization) parametreside eklenmektedir. [/color][color=rgba(0, 0, 0, 0.75)]Regularization error’dan dolayı loss fonksiyonu çıktısı hiç bir zaman sıfır olmayacaktır.[/color][color=rgba(0, 0, 0, 0.75)] Ancak ağırlıkların hepsinin sıfır olduğu durumda sıfır olacaktır. Regularization parametresi hiper parametreler arasındadır, değeri ve varlığı kullanıcıya bağlıdır, kullanılmadığı durumlarda mevcuttur. Regularization yöntemleri ile ilgili daha önce hazırladığımız "[/color]Derin öğrenme uygulamalarında başarım iyileştirme yöntemleri (Regularization)[color=rgba(0, 0, 0, 0.75)] " başlıklı yazıya bakılabilir.[/color][/color][/color][/color][/color]
  1. Derin Öğrenme Uygulamalarında Başarım İyileştirme Yöntemleri
    Forum: Yapay Sinir Ağları - Cevap Yok

    admin 26-03-2019, 01:01
    [color=rgba(0, 0, 0, 0.75)]Derin Öğrenme Uygulamalarında Başarım İyileştirme Yöntemleri 
    [/color]
    [color=rgba(0, 0, 0, 0.75)]Her hangi bir problemi makine öğrenmesi yöntemi ile çözmeye çalıştığımızda elimizdeki veri setinin iyi bir model oluşturmak için yeterli olup olmadığını hakkında başlangıçta net bir bilgimiz yoktur; oluşturacağımız modelin bizi overfitting’e mi yoksa underfitting’e mi götüreceğini tam olarak bilemeyiz. Bununla birlikte belli başlı iyileştirme yöntemlerinin uygulanmasıyla modelin başarımının arttırılabileceğine dair ön bilgiye sahibiz. Bu nedenle başarım iyileştirme yöntemlerini modelden bağımsız, modelin başarımını artıran harici bir parametre olarak düşünebiliriz.[/color]

    [Resim: IddrVO.jpg]


    [color=rgba(0, 0, 0, 0.75)]Yukarıda basit yapay sinir ağı modelinde de görüleceği üzere başarım iyileştirme/regülasyon  işlemi, modelin başarımının ölçüldüğü y=f(x.w)+b şeklindeki cost fonksiyonuna bağımsız bir parametre daha eklenerek modeldeki “w” ağırlıklarının (weight) problemi daha uygun çözecek şekilde hesaplanma işlemi olarak tanımlanabilir. Bu anlamda regularization aslında loss fonksiyonuna eklenen bağımsız bir parametredir denebilir.[/color]
    [color=rgba(0, 0, 0, 0.75)]y=f(x.w)+b cost fonksiyonuna uygulanan, regülasyon işlemlerinden sadece “w” ağırlıkları (weight) etkilenmekte, “b” bias değerlerine yönelik regülasyon işlemi yapılmamaktadır.[/color]
    [color=rgba(0, 0, 0, 0.75)]Regularization teknikleri genelde tasarlanan modelde overfitting önleyerek başarımı artırmak için kullanılmaktadır. Buna ek olarak başarımı düşürmeden modelin karmaşıklığını (complexity) azaltmak için de kullanıldığı durumlar vardır.  Aynı başarım oranını devam ettirerek daha basit, boyutu küçük model tasarlanması, genelde mobil ortamlar gibi kaynakların (işlemci gücü, bellek vb.) sınırlı olduğu yerlerde önemli olmaktadır. Eğer geliştirdiğiniz model mobil ortamda çalışacaksa desktop veya web ortamına göre mutlaka bazı iyileştirmeler yapmanız gerekiyor. Mobil ortamlardaki pil, bellek, işlemci gibi kaynak kısıtları hepimizn malumu.[/color]
    [color=rgba(0, 0, 0, 0.75)]Sık kullanılan regülasyon teknikleri aşağıdaki gibidir;
    [/color]
    [color=rgba(0, 0, 0, 0.9)]Verisetinin boyutunu artırma
    [/color]
    [color=rgba(0, 0, 0, 0.75)]Elimizde ne kadar fazla sayıda veri olursa model o kadar iyi öğrenecektir; bu bilinen bir gerçek. İyi öğrenme beraberinde yüksek başarımı da getirecektir. Verinin fazla olması model başarımı artımının yanı sıra ezberlemeyi (overfitting) de önleyecektir. Verinin boyutunun az olduğu durumlarda veri setini artırmak için kullanılan yöntemler arasında ilk sırada sentetik veri üretilmesi gelmektedir.
    [/color]
    [color=rgba(0, 0, 0, 0.9)]Sentetik Veri Üretmek : 
    [/color]
    [color=rgba(0, 0, 0, 0.75)]Sentetik veri üretmek veya veri setinin boyutunu artırmak için herkesin üzerinde hem fikir olduğu genel geçer bir yöntem yok. Bununla birlikte bu konuda takip edilen genel bir prensip var; [/color]
    [color=rgba(0, 0, 0, 0.75)]“Ellimizde veri seti problemin gerçek dünyadaki karmaşıklığını olabildiğince yansıtsın.” [/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: lUtnMQ.jpg][/color]


    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Verisetini bu prensibe ne kadar uydurabilirsek, başarım da o oranda artacaktır. Bu anlamda verinin farklı versiyonlarının verisetinde bulunması, verisetinin prensibe uygunluğunu artıracaktır. Bu nedenle verinin farklı varyasyonlarını, farklı boyuttaki görünümleri verisetine dahil edilerek verisetinin boyutu başarımı artıracak şekilde büyütülür. Sentetik veri üretme özellikle resim ve ses tanıma problemlerinde sıkça kullanılmakta ve başarımı arttırdığı bilinmektedir. Resim tanıma problemlerinde yukarıda örnek kedi resminde uygulaması görülen resmi çevirme, yeniden boyutlandırma, belli bir kısmını alma, resmi rastgele kesme, resme noisy (Gaussian noise vb.) ekleme vb. gibi sentetik veri üretme teknikleri sıkça kullanılmaktadır. [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.75)]Sentetik veri ile veri setinin boyutunun artırılması belli oranda overfitting’i önlese bile, genelde yetersiz kalmaktadır. Çünkü oluşturulan sentetik veriler, belli miktarda farklılaşma olsa bile mevcut veri seti ile korelasyonunu korumaya devam edecektir. Bu nedenle veri seti artırma yöntemi genelde diğer regülasyon yöntemleri ile birlikte kullanılmaktadır.[/color]

    [color=rgba(0, 0, 0, 0.9)]Alakasız veri ekleme (Inject random negative)[/color]

    [color=rgba(0, 0, 0, 0.75)]Gürültü ekleme işlemi modeldeki;[/color]
    • girdilere gürültü ekleme

    • gizli katmanlara gürültü ekleme

    • ağırlıklara gürültü ekleme

    • loss fonksiyonuna, gürültüyü parametre olarak ekleme olmak üzere dört şekilde yapılmaktadır.
    [color=rgba(0, 0, 0, 0.75)]Mevcut veri setinde bulunan veriler üzerinde oynamalar yapılarak, filtrelerden geçirilerek gürültülü veriler oluşturulur. Oluşturulan bu yeni veriler, veri setine katılarak modelin eğitilmesinde kullanılır. Böylece veri setinin boyutu artırılarak başarım göreceli olarak artırılır. Bu yöntem bir önceki bölümde açıklanan dataset augmentation’a da örnektir.[/color]

    [color=rgba(0, 0, 0, 0.75)]Modelin gizli katmanlarına gürültü ekleme işlemi ilerleyen bölümlerde açıklanacak dropout yöntemi ile yapılmaktadır. Gizli katmana (hidden layer) eklenen gürültü benzer şekilde modelin başarımını artırarak overfittig’i engellemektedir. Gizli katmana gürültü eklenmesi, modelin başarımı açısından gizli katmanların manipulasyonu sağlayan bir diğer yöntem olan parametre paylaşımı (parameter sharing) yönteminden daha etkili olduğu bilinmektedir.[/color]

    [color=rgba(0, 0, 0, 0.75)]Modeldeki ağırlıklara (weight) gürültü eklenerek modelin başarımında iyileştirmeler yapılabilmektedır. Bu teknik genelde Recurrent Neural Network (RNN)’de kullanılmaktadır.[/color]

    [color=rgba(0, 0, 0, 0.75)]Veri setinde yanlış etiketlenmiş verilerin olması doğal bir durumdur. Çoğu veri kümesinin y etiketlerinde bir miktar hata vardır. Bu durum y’nin yanlış olduğu durumlarda hatayı hesaplayan log p(y | x) fonksiyonunu maksimize edecektir. Doğal olarak model bu durumdan etkilenecektir. Bunu önlemenin yollarından biri etiketler üzerindeki gürültüyü model üzerinde tanımlamaktır. Örneğin, küçük bir e sabiti için, eğitim setinin 1-e olasılık değeri ile doğru olduğunu ve diğer olası etiketlerin herhangi birinin de doğru olabileceğini varsayabiliriz. Bu varsayım, açıkça gürültü örnekleri çizmek yerine gürültüyü analitik olarak maliyet fonksiyonuna dahil etmek demektir.[/color]

    [color=rgba(0, 0, 0, 0.9)]Düğüm Seyreltme (Dropout Layer)[/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]İlk olarak 2014 yılındaki Dropout: A Simple Way to Prevent Neural Networks from Overfitting isimli makalede ortaya atılmıştır. Özetle hidden ya da input layerdan belli kuralla göre (eşik değeri kullanarak ya da rastgele) belli nodelar kaldırılması tekniğidir. Örneğin aşağıdaki şekilde görüleceği üzere eşik değeri (treshold) olarak 0.5 belirlendiği bir ağ modelinde dropout uygulandığında dropout uygulanan gizli katmandaki node sayısı bir sonraki katmanda yarıya düşürülmüştür.[/color]
    [Resim: 2yzJ5j.jpg]
    [/color]


    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Dropout tekniği genelde tam bağlı katmanlarda (fully-connected layer) sonra kullanılır. Dropout kullanılarak fully-connected layerlardaki bağlar koparılır. Böylece node’lar birbiri hakkında daha az bilgiye sahip olur ve bunun doğal sonucu olarak node'lar birbirlerinin ağırlık değişimlerinden daha az etkilenirler. Bu nedenle dropout yöntemi ile daha tutarlı (robust) modeller oluşturulabilmektedir. Aynı zamanda [/color][color=rgba(0, 0, 0, 0.75)]her bir katmanda farklı hidden unit kombinasyonları birbiriyle çalıştığı için daha iyi bir öğrenme gerçekleşecektir.[/color][color=rgba(0, 0, 0, 0.75)] Bu anlamda dropout kullanıldığında gizli katmanların random forest gibi ensemble çalıştığı düşünülebilir. Bu durum da model için hem zamandan hemde başarım açısından daha iyi performans sağlayacaktır. Aşağıda dropout kullanılan ve kullanılmayan durumlara ait örnek başarım grafiğinde de görüleceği üzere dropout sonrasında overfitting azalarak modelin başarımı artmıştır. [/color][color=rgba(0, 0, 0, 0.75)]Dropout yöntemi derin öğrenme yöntemlerinde en sık kullanılan iyileştirme (regularization) yöntemlerinden biridir.[/color][/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][Resim: kbic5k.jpg][/color][/color]

    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]Dropout çalışma mantığı bir binayı inşaa etmeye çalışan bir grup işçi analojisiyle daha kolay anlatılabilir. Bir grup işçinin bir binayı inşa etmek için çalıştığını ve her birinin bir iş için uzmanlaştığını ve sadece o işi yaptığını düşünelim. Böyle bir durumda işçilerden biri yanlış yaptığında veya hastalanıp işe gelmediğinde diğer işçilerin onun yerini doldurması zor olacaktır ve durum işin ilerleyişini büyük oranda etkileyecektir. Bunun yerine iş veren her hafta işçilerden bir kaçına izin vererek (dropout) diğer işçilerden onların yerini doldurmalarını bekleyerek, her işçiden diğer işçilerin yerini doldurabilecek asgari bilgileri öğrenmesini sağlayabilir. Böylece herhangi bir işçi yanlış yaptığında ya da yokluğunda, onun yerini doldurabilecek, sistemin aksamasını engelleyecek bir sistem inşaa edilmiş olacaktır. [/color]
    [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.9)]Yoğun-seyrek-yoğun ağ ile eğitim (Dense-sparse-dense training)  [/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)]2016 yılında DSD: Regularizing Deep Neural Networks with Dense-Sparse-Dense Training Flow isimli makalede ortaya atıldı. NLP, vision gibi farklı alanlardaki problemler üzerinde test edildi ve iyi sonuçlar verdiği gözlendi. Tek bir fully connected katmanda yapılan işlemi yoğun -> seyrek -> yoğun şeklinde üç katmana bölerek yapmaktadır. Böylece ağırlıkların birbirine etkisi başta azaltıllmakta sonra tekrar aralarında bağ kurularak yeni bilgiler öğrenmesi sağlanmaktadır. Bu durumda ayrıntılı öğrenmeden kaynaklanan overfittig problemini engellemektedir. Ağ yapısının başlarında sparse sonlara doğru fully connected kullanılması daha verimli sonuçlar vermektedir. Seyrek (Sparse) ağlarda hafıza daha az kullanıldığı için matrix çarpım işlemleri daha hızlı yapılacaktır. Bu anlamda Dense-Sparse-Dense ağlar hem hız hem performans açısından modelin iyileştirilmesinde kullanılmaktadır.[/color]
    [Resim: GhVykZ.jpg]
    [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.9)] Algoritma :[/color]
    [/color]
    [/color]
    1. Yoğun (Dense) : Dense olarak öğren. Amaç hangi weightlerin önemli olduğunu tespit etmek, final weightlere ulaşmak değil.

    2. Seyrek (Sparse) : Dropout ile belli treshold altındaki weightleri sil ve modeli sparse hale getir. Modeli tekrar train et. Böylece önemli bağlantıları öğren.

    3. Yoğun (Dense) : Küçük learning rate ile modeli tekrar train et ve ağı tekrar dense hale getir. Yeni bilgiler öğren.
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.9)]Ezberlemeden önce durdurma (Early Stoping)
    [Resim: gN3rHM.jpg]
    [/color][color=rgba(0, 0, 0, 0.75)]alidation Dataset : Validation set, test veri setinin öğrenme sırasındaki temsili halidir. Training set içerisinden seçilir fakat optimizasyon sırasında kullanılmaz. Backprobagation ile parametrlerin güncellenmesinde kullanılır. Bu nedenle öğrenme sürecini doğrudan etki eder. Her iterasyon sonunda (epoch) validation set ve test set ile modelin başarımı ayrı ayrı ölçülür. Validation set ile elde edilen sonuç backprobagation işleminde kullanılırken, test veri setinin sonucu öğrenme işleminin hiç bir basamağında kullanılmaz. Test veri seti, öğrenme sürecinde adım adım modelin başarımını ölçen tamamen bağımsız bir test kümesidir. Buna karşı validation set her bir iterasyonda traninig setin farklı bir parçası olacak şekilde yenilenir ve modelin öğrenme sürecine doğrudan katkı sağlar.[/color]
    [/color]
    [/color]
    [color=rgba(0, 0, 0, 0.75)][Resim: 0?e=1559174400&v=beta&t=MaP6PjatyFwusEtn...RCbNWxjkDU][/color]

    [color=rgba(0, 0, 0, 0.75)]Early Stopping : Öğrenme sırasında validation loss ile test loss arasındaki fark açılmaya başladığı durumda model ezberliyor (overfitting) ya da gürültüyü öğreniyor (noisy) demektir. Bu durumda validation error artmaya başladığında eğitim durdurulur ve bir önceki adıma geri dönülür. Bir önceki adıma geri dönebilmek için eğitim esnasında her bir öğrenme adımında (epoch) bir önceki adımın verileri saklanmış olmalıdır. Yukarıdaki grafikte görüleceği üzere öğrenmenin başlarında training error ve test error her ikisi birlikte azalmaktadır. Bununla birlikte örnekte kesikli çizgiyle belirtilen adımdan sonra test error arttığını görmekteyiz bu noktada ezberleme olmuştur ve bu adımın öncesinde öğrenme durdurulmalıdır. Overfitting işleminden sonra ağırlıklar üzerindeki değişiklikler modeli olumsuz etkileyecektir.[/color]

    [color=rgba(0, 0, 0, 0.75)]Ezberleme (Overfitting) : Test loss ve training loss arasındaki farkın artması yani ezberlemenin olması (overfitting); modelin eğitim için kullandığı verileri ayrıntılı ve gereğinden fazla öğrendiği anlamı gelir. Eğitim verisetindeki verileri detaylı öğrenmenin dezavantajı öğrenme işleminin her bir adımında eğitim verisi içinden seçilen validation verileri için çok iyi daha iyi tahmin yapması, buna karşı daha önce hiç görmediği test verisetindeki veriler için gittikçe daha yanlış tahminler üretmesi anlamına gelmektedir. Dikkat edilirse mavi çizginin eğitim veriseti, kırmızı çizginin de test veriseti için yanlış tahmin etme oranını verdiği örnek başarım grafiğine bakıldığında test ve training hata oranın gittikçe düştüğü, yani model başarımının gittikçe arttığı, bununla birlikte kesikli çizgiden sonra eğitim veriseti için hata tahmin oranın azalmaya devam ettiği buna karşı test veriseti için bu oranın arttığı görülmektedir. İşte bu ayrımın yaşandığı yerde model eğitim veriseti ezberlemeye başlamış (overfitting) demektir, bu noktada modelin eğitim durdurulmalıdır (early stopping).[/color]

    [color=rgba(0, 0, 0, 0.9)]Parameter Norm (Weight) Penalty L1 ve L2[/color]

    [color=rgba(0, 0, 0, 0.75)]Model içerisinde farklı ağırlık vektörleri aynı başarımı verebilmektedir. Örneğin f = x.w + b şeklinde tanımlı cost fonksiyonu olan bir modelde x = [1,1,1,1] matrisinin girdi vektörümüz olduğunu varsayalım. w1 = [1,0,0,0], w2 = [0.25,0.25,0.25,0.25] şeklide iki adette de ağırlık vektörümüz olsun . Bu durumda f1 = w1.x = 1 ve f2 = w2.x = 1 olarak hesaplanır ve her iki matris çarpımlarının sonucu aynı olur. Yani x girdi değeri için aynı cost değeri üreten birbirinden farklı birden fazla ağırlık vektörü olabilir. Bu durumda hangi ağırlık vektörü tercih edilmelidir? Model iyileştirmede çalışma mantığı küçük ağırlıklı değerlere (weight) sahip modelin büyük ağırlıklara sahip modele göre daha basit, yorumlanabilir olduğu varsayımına dayanır. Bu nedenle büyük değer üreten ağırlıklar yerine düşük değerli ağırlıkları tercih etmek başarımı artıracak, ezberlemeyi önleyecektir. Bunun içinde cezalandırma (penalth) fonksiyonları kullanılarak modelin ağırlıkları sıfır veya sıfıra yakın değerlerde tutulmaya çalışılır. Cezalandırma (penalthy) işlemi için yaygın olarak L1 ve L2 fonksiyonları kullanılır.[/color]

    [color=rgba(0, 0, 0, 0.75)]Yukarıdaki maliyet (cost) fonksiyonuna L2 uyguladığımızda f1 = w1.x = 1.0 ve f2 = w2.x = 0.25 değerini verecektir. L2'ya göre w2 vektörü daha düşük loss değeri ürettiği için tercih edilecektir. Burada w2’nin daha düşük L2 değerine sahip olması; w2’nin w1’e göre daha küçük değere sahip ağırlıklardan oluşması ve bu ağırlıkların vektör içinde normal dağılıma sahip olmasından kaynaklanmaktadır. Aşağıda grafikte ağırlıkların değer histogramı verilen şekilde görüleceği üzere L2 uygulandığı durumda normal dağılıma sahip ağırlıklar L1 uygulandığı duruma göre varlığını korumaya devam etmektedir.[/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: 5DjWc0.jpg]
    [Resim: 7IpGKx.jpg]
    [Resim: o9SUFN.jpg][Resim: 0?e=1559174400&v=beta&t=6cKl14Tzhnbso4s5...n9UXNLzCng]
    [/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: 0?e=1559174400&v=beta&t=yEpg2VpQQgh88m9s...bC1_LY3nAY][/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: 0?e=1559174400&v=beta&t=WKtW3pAp2_4qTPje...ndDHwaq7qo][/color]

    [color=rgba(0, 0, 0, 0.75)]L1 ve L2 genelde modelin loss fonksiyonu olarak kullanılmaktadır. Bu anlamda L1 veya L2 kullanılması en bilindik ve standart reguralization yöntemlerinden biridir. Bununla birlikte model için SVM, Softmax gibi farklı loss fonksiyonları kullanılabilir.[/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: 0?e=1559174400&v=beta&t=0tEmNqyQMt3MNzr4...6pdFD0Cwhk][/color]

    [color=rgba(0, 0, 0, 0.75)]L1 Manhatten distance:[/color]

    [color=rgba(0, 0, 0, 0.75)]Bu yöntemde cezalandırma (penalty) weight’in absolute değerine göre yapılmaktadır. Bu yöntem bazı değerleri sıfır yapma eğilimindedir. Bu nedenle modelde budama yapmaya / sparcity üretmeye yatkındır. Aynı zamanda bazı değerlerin büyük kalmasına da izin verir. L1 yukarıda verilen formülü kullarak ilgili değer dönüşümlerini sağlar.[/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: 0?e=1559174400&v=beta&t=i0mJXuLkkL0VAQMi...Y_unt_1wx8][/color]

    [color=rgba(0, 0, 0, 0.75)]L2 Eucledean distance:[/color]

    [color=rgba(0, 0, 0, 0.75)]Bu yöntemde cezanlandırma işlemi ağırlık (weight) değerinin karesine göre yapılır. Tüm ağırlıkları daha küçük, sıfıra yakın değerlere götürme eğilimindedir. L2 yukarıda verilen formülü kullarak ilgili değer dönüşümlerini sağlar.[/color]

    [color=rgba(0, 0, 0, 0.9)]Transfer Learning[/color]

    [color=rgba(0, 0, 0, 0.9)]Çoklu öğrenme (Multi-tasking Learning)[/color]

    [color=rgba(0, 0, 0, 0.75)]Verilen input’dan aynı temel ağ yapısını paylaşarak birden fazla şey öğrenen sistemlere çoklu öğrenen (multi-tasking learning) sistemler denir. Multi-task sistemlerde model iki veya daha fazla şeyi aynı anda öğrenmektedir. Model öğrenme esnasında ikinci bir bilgi daha öğreneceği için başarım doğal olarak artacaktır.[/color]

    [color=rgba(0, 0, 0, 0.75)][Resim: QMaWA4.jpg][img=744x502.1875]https://media.licdn.com/dms/image/C5112AQEr_PpuboKLuQ/article-inline_image-shrink_1500_2232/0?e=1559174400&v=beta&t=FGu8uj3fPgsTbeiAX6fjV_IH_YBZyIHvjt0Ognn-vJk[/img][/color]

    [color=rgba(0, 0, 0, 0.75)]Örneğin yukarıdaki şekilde temsil edilen model de, model veri seti üzerinden iki şeyi öğrenmeye çalışmaktadır; birincisi verilen fotoğrafın köpek mi, insan mı olduğu, ikinci verilen fotoğrafın kız mı, erkek mi olduğu. Normalde iki farklı amaç için çalışan bu iki modeli birleştirdiğimiz de model normalden de daha fazla bilgi öğreneceği için başarım artacaktır. Multi-tasking’de model her iki task’ı açıklamaya çalışacağı için daha genel bir model oluşturmaya çalışacak. Bu durumda bizi veri setine bağımlılıktan biraz daha uzaklaştıracak böylece overfitting engellenmiş olacaktır. [/color]

    [color=rgba(0, 0, 0, 0.75)]Uyarı : Multi-tasking uygulanabilmesi için task’lar arasında ortak bir durum olması gerekiyor. Örneğin : Resimdeki kişinin bir task'da insan, diğerinde kız olarak etiketlenebilmesi gibi.[/color]

    [color=rgba(0, 0, 0, 0.9)]Model uyarlama (Finetuning)[/color]

    [color=rgba(0, 0, 0, 0.75)]Bir veri seti için eğitilen model, daha sonra farklı bir veri seti için biraz daha eğitip kullanılan durumlar finetuning olarak adlandırılmaktadır. Bu yöntemde amaç; belli konuyu iyi öğrenmiş belirli bir seviyede ki modellerin üzerine yeni model inşa ederek önceki modelin bilgisinden yararlanmaktır. Örneğin tıbbi çalışma yapanlar, ellerinde az görüntü olduğu için ImageNet üzerinde çalışan networklerin üst kısımlarından kendi network’ünü başlatarak iyileştirme yapmaktadırlar. Finetuning en sık kullanılan iyileştirme yöntemlerindendir. Modelin parametreleri rastgele başlatmaktansa benzer domaindeki bir problemin ağırlıklarıyla başlatmak modelin başarımını arttırmaktadır. Hatta rastgele başlatmak yerine bir birinden bağımsız networklerin ağırlıklarıyla başlatıp başarım arttırdığı söyleyen çalışmalarda var.[/color]

    [color=rgba(0, 0, 0, 0.9)]Diğer yöntemler[/color]

    [color=rgba(0, 0, 0, 0.75)]Regularization için sık kullanılan diğer yöntemler arasında;[/color]
    • Öğretimli öğrenme (Semi-Supervised Learning)

    • Bagging (boostrap aggration)

    • Ensemble models teknikleri sıralanabilir.
    [color=rgba(0, 0, 0, 0.75)] [/color]

    [color=rgba(0, 0, 0, 0.9)]Kaynaklar :
    [/color]
    https://www.linkedin.com/pulse/derin-%C3...kac%C4%B1/

    [color=rgba(0, 0, 0, 0.75)][1] Yakup Genç, GTU Derin Öğrenme Ders Notları[/color]

    [color=rgba(0, 0, 0, 0.75)][2] Cristina Scheau, Regularization in deep learning, https://chatbotslife.com/regularization-in-deep-learning-f649a45d6e0[/color]
    [color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][color=rgba(0, 0, 0, 0.75)][3] https://codelabs.developers.google.com/codelabs/cloud-tensorflow-mnist/#12[/color][/color][/color]
  1. Yapay sinir Ağlarında Perceptron ve Lineer Fonksiyonlar
    Forum: Yapay Sinir Ağları - Cevap Yok

    admin 26-03-2019, 00:48
    [Resim: JYe46u.jpg]

    Lineer fonksiyonlar, y = W.x+ b şeklinde tanımlanan fonksiyonlardır. Bu fonksiyonlarda y değeri x'in değerine bağlı olduğu için bağımlı değişken, x değeri ise herhangi bir girdi olabileceği için bağımsız değişken olarak tanımlanır. W ve b değerleri ise fonksiyonun parametreleri olarak tanımlanmaktadır.

    [Resim: B0npJw.jpg]



    Genelde yapay sinir ağı modelinin en küçük parçası olan perceptron'da bu şekilde y = W.x+b lineer fonksiyonuyla tanımlanır. Yukarıdaki şekilde tanımlanan ağın yapay sinir ağındaki karşılığı perceptron'dur; perceptronlar yapay sinir ağlarının en küçük öğrenme birimi olarak tanımlanırlar. Bu fonksiyonda yukarıda gösterildiği üzere W değeri ağırlık parametresi, x değeri girdi, b değeri bias ve y değeride ağın çıktısı olarak tanımlanmaktadır. Burada x girdi değerimiz, örneğin kedi resimlerini tanıyorsak kedi resmine ait matrisi, y ise bu resmin kediye ne kadar benzediğine dair skoru verir. Parametrelerimiz olan W ağırlık ve b bias değerlerini bu çıktı skorunu iyileştirmek için kullanılır. Bu anlamda çok katmanlı yapay sinir ağlarında yada derin öğrenme de yaptığımız temel şey modelimiz için en iyi skoru verecek w ve b parametre değerlerini hesaplamaktır.


    [Resim: U4Ph5K.jpg]
    Çok katmanlı yapay sinir ağlarında yukarıdaki şekilde de gösterildiği gibi tek bir nörona (maviler) bağlı, birden fazla girdi (sarılar) olabilir. Aynı zamanda aynı seviyede birden fazla nöronda kullanılabilir. Nöronlar ardı ardına katmanlar şeklinde de kullanılabilir; bu tarz ağ yapısı çok katmanlı yapay sinir ağı (MLP) olarak adlandırlır. Çok katmanlı yapay sinir ağlarında aradaki katmanlar (maviler) gizli katman (hidden layer) olarak isimlendirilmektedir. Son katman (yeşiller) ise çıktı sonuç katmanıdır.
    Soru : Birden fazla nöronun aynı seviyede kullanılmasıyla, ardı ardına kullanılması arasındaki fark nedir?
    Aynı seviyedeki nöronlar birbirini etkilemezken, ardı ardına katmanlar şeklinde kullanılan nöronlar birbirinin çıktısından etkilenir. Özetle söylecek olursak aynı seviyede fazla nöron olması akılda tutulan bilgiyi artırırken, ardı ardına katman kullanılması da öğrenme seviyesini artırmaktadır. Tabiki bu açıklamadan katman sayısını sonsuza doğru artırdıkça daha iyi öğrenme olacağı, başarımın sürekli artacağı gibi bir sonuç çıkaramayız. Çünkü modelimiz ağın girdisi olan x değerleri ve model içinde öğrenilemeyen hiper parametrelere de fazlaca bağımlıdır. Burada düğüm (node) için nöron kelimesi kullanılması yapay sinir ağlarının insan beyninin çalışma yapısını modellemeye çalışmasından ileri gelmektedir. Katman ve nöron sayısı başarımı artırmasına karşı hesaplama zamanını da doğru orantılı olarak artırmaktadır. Bu nedenle katman ve nöron sayısı model oluştururken dikkat edilmesi gereken özel hiper parametrelerdir.
    f = W.x + b lineer fonksiyonun hesaplanması; girdi X değeri genelde bir vektörü temsil ettiği için, x (girdi vektörü) ve W(ağırlık vektörü) arasında bir matris çarpımı yapılarak, çıkan sonucun bias (b) değeri ile toplanması şeklinde yapılır. Bu lineer skor fonksiyonu, bizim için problemi çözen (fit eden) doğrunun fonksiyonudur. Yani elimizde ki x girdilerini ve bu girdilere karşılık gelen y değerlerini kullanarak oluşturacağımız doğru, modeli fit eden lineer çözüm doğrusu olacaktır. Elimizde problemi fit edecek y = W.x+b şeklinde bir fonksiyon var ise, en uygun doğruyu hesaplayabilmemiz en uygun W ve b değerlerine bağlı olacaktır. Çünkü x değeri fonksiyonun girdisidir ve kullanıcı tarafından değişikliğe uğratılamaz; bağımsız değişkendir. Bununla birlikte W ve b parametre değerleri problemi çözecek şekilde değiştirilebilir. Bu nedenle bu w ve b değerleri değiştirilerek, problemi çözecek en uygun hale getirilmeye çalışılır. Bununla birlikte teorik olarak problemi çözecek birden fazla w ve b (ikilileri) değer kümeleri olabilir. Hız ve başarım açısından hangisinin en iyi olduğu, ve en iyi kümenin nasıl seçileceği de çok katmanlı yapay sinir ağlarında tasarımında karar verilecek hiper parametreler vasıtasıyla yapılır.
    Yukarıdaki açıklamadan da anlaşılacağı üzere "Yapay sinir ağı ve onun bir alt kümesi olan derin öğrenme modellerinde yapılmaya çalışılan temelde; problemi fit edecek en uygun W ve b parametre vektörlerini hesaplamak (öğrenmektir)".
    Soru : y = W.x+b fonksiyonunda W gibi bir parametre varken, b (bias) değerine neden ihtiyacımız var? 
    y = W.x+b fonkiyonunda, W ağırlıkları x'e bağlı hareket etmektedir; W.x matris çarpımı işleminin sonucu her durumda x'in değerinden etkilenmektedir. Bu nedenle W.x matris çarpım sonucu modeli fit edecek doğruyu sadece x/y doğrultusunda hareket ettirebilmektedir. Bu durumda belli bir değerden sonra doğrunun daha iyi fit etmesine engel olmaktadır. Bu problemi çözmek için, iyi bir doğru fit edebilmek için, x’den bağımsız, x'in değeri ne olursa olsun hep aynı olan b bias değişkeni kullanılır. Bias b değişkeni elde edilen doğrunun ötelenmesinde (shift) kullanılır. Bağımlı W parametresi ile x/y doğrusunda hareket sağlanırken, bağımsız b parametresi ile x/y doğrultusunda oluşturulan doğrunun aşağı yukarı hareketi sağlanır; yani bias b değerinin doğruyu shift işlemi yapabilme yeteği sayesinde problemi fit edecek en uygun doğru oluşturulabilir. Bias b değeri x girdi değeri ile herhangi bir etkileşime girmeden çıktı skor değerine etki etmektedir. W.x çarpımından oluşturulan lineer doğruyu öteleyerek daha iyi çözecek konuma getirir.
    Bias b değerinin ikinci bir katkısıda; x’in sıfır olduğu durumlarda W ağırlığı ne olursa olsun tüm iterasyonların sonucunda W.x çarpım sonucu sıfır olacaktır. Doğal olarak öğrenme gerçekleşmeyecektir. Bias değeri ile 0 olan x değerlerinin skor fonksiyon çıktısı bir miktar ötelenerek, modelin sonraki itrasyonlarda öğrenmeye devam etmesi sağlanmaktadır.
    Soru : Kaç adet ağırlık (W) ve bias (b) değeri vardır? Bias b ve ağırlık W sayısı birbirine eşit midir?
    Oluşturulan ağda node'lar arasında kaç adet bağlantı var ise o kadar W değeri olacaktır. Bununla birlikte bias b değer sayısı hedef node sayısı kadardır. Her bir katmanda kaç adet düğüm (node) varsa o sayıda bias değeri vardır; node sayısının azalıp azalması bias (b) sayısını da aynı ölçüde azalıp artırır. Bununla birlikte bu katmanlar arasındaki node'lar arasında kaç adet bağ varsa o kadar ağırlık (w) değeri vardır.
    Soru : Ağırlık W değerinin başlangıç değerleri nasıl belirlenir?
    Ağırlık değerleri başlangıçta tamamen rastgele yada belli bir aralıkta belli bir dağılama göre rastgele de belirlenebilir. Örneğin gaussian dağılımana göre başlatılabilir. Sabit sayılarla da başlatılabilir. Daha önce eğitilmiş bir modelin ağırlık değerleri kullanılarak da model başlatılabilir. Sabit bir değerde ya da 0 olarak başlatılması problem oluşturabilir; böyle bir durumda tüm ağırlık değerleri aynı olduğu için modeldeki tüm bağlar aynı değeri hesaplayabilir ve ağırlıkların güncellenmesi de aynı olabilir böyle bir durumda da öğrenme gerçekleşmez. Bunun yerine genel eğilim ağırlıkların, bir kısmının 0'a yakın pozitif, bir kısmınında 0'a yakın negatif değerlerden seçilmesidir. Her zaman 0'a yakın seçilmesi başarımı artıracağı anlamına gelmez, mesela çok fazla katmana sahip ağlarda ağırlıkların 0'a yakın olması geri besleme (backpropagation) işleminin etkisinin başlangıç katmanlarına etkisini azaltabilir.
    Soru: Ağırlık W değeri bütün bağlarda aynı mıdır? Öğrenme iterasyonları sonucunda ağırlık değerlerin değişme oluyor mu?
    Ağırlık değerleri bütün bağlarda aynı olmak zorunda değildir. Öğrenme sonunda her bir iterasyonda ağırlık değerleri hata değerine göre geribesleme (backpropagation) ile tekrar hesaplanıp güncellenmektedir. Bu güncelleme işlemi tüm eğitim sürecinde devam etmektedir. Bu anlamda ağırlık parametreleri model tarafından problemin çözümü için öğrenilen parametrelerdir ve eğitim boyunca sürekli güncellenirler.
    Soru: Bias b değeri bütün node’lar için aynı mıdır? Öğrenme iterasyonları sonucunda bias değerinde değişme oluyor mu?
    Bias değeri aslında bir vektördür. Bu vektörde değerler aynı da olabilir, farklı sayılardan da oluşabilir. Bu model tasarlanırken kullanılan hiper parametreye bağlıdır. Her iterasyon sonucunda aslında yapılan yeni W ağırlık, b bias değerinin hesaplanmasıdır. Bu anlamda her iterasyon sonucunda W ve b değerleri bir öncekine göre farkılık göstercektir. Yani model her iterasyon sonucunda w ve b değerleri için daha iyi değerler öğrenerek parametreleri güncelleyecektir.
    Soru : Bias b değerinin başlangıç değerleri nasıl belirlenir?
    Bias değerleri genelde belli aralıktaki rastgele derğerlerden oluşturulur. Bununla birlikte sabit olarak belirlendiği durumlarda vardır. Rastgele oluşturulduğunda belli bir dağılıma göre hareket etmesi genelde gözetilir.
  1. Yüz tanıma yazılımı oluşturmak için Yapay Zeka uygulama
    Forum: Yapay Zeka Genel - Cevap Yok

    admin 25-03-2019, 19:23
    Yapay zeka onlarca yıldır sorunları çözerken, şimdi her büyük sektöre nüfuz etmenin eşiğinde. Bununla birlikte, bu yeni AI uygulamalarının çoğu, büyük miktarda görsel verileri işlemek ve anlamak için bilgisayarla görme tekniklerinin kullanılmasını gerektirir. Bu nedenle Intel, geliştiricilerin görsel dünyaya AI uygulamalarında yardımcı oluyor .

    Havaalanları, trenler ve otobüs istasyonları, potansiyel güvenlik tehditlerini tanımlamak için AI'yı kullanıyor, katılımsız bagajın gerçek zamanlı algılanması için sezgisel bir 'robotik' göz olarak işlev görebilecek entelektüel sistemler yaratıyor . Bilgisayarla görü kullanan ek AI uygulamaları şunlardır:
    • Gelişmiş sürücü destek sistemleri (ADAS) ve otonom arabalar

    • Görüntü tanıma, nesne algılama ve izleme ve otomatik belge analizi

    • Normalde güvenlik sorunları için kullanılan yüz tanıma ve tanıma

    • Tıbbi görüntü işleme

    • Nesnelerin İnterneti (IoT) uygulamaları
    Yüz tanıma sistemleri, ödeme doğrulama ve yasadışı avlanmayı önlemek için ticari balıkçı teknelerinin izlenmesi gibi ticari uygulamalarda da popüler hale geliyor .

    YÜZ TANIMA KODLAMA

    Yüz tanımanın kodlanması, beyinlerimizin her gün gördüğümüz yüzleri işlemek ve tanımak için izlediği adımlara benzer. Bu her ikisini de içerir:
    • Yüz algılama - ön işleme aşaması olarak da adlandırılan, belirli bir görüntüdeki yüzü temsil eden pikselleri belirleme



    • Yüz tanıma - algılanan yüzü veritabanındaki bir referansla ilişkilendirmek veya bir yüz eşleşmesini tanımlamak

    Özellikleri temel alarak görüntüleri test eden bir bilgisayar programı bir sınıflandırıcıdır. Sınıflayıcılar, yeni bir görüntünün nasıl doğru şekilde sınıflandırılacağını öğrenmek için binlerce pozitif (yüz bölgesi) görüntü veya negatif (yüz dışı arka plan) görüntü üzerinde eğitilir.

    Algılama ve eşleştirme, hareket tahmini ve takibi için en çok kullanılan kütüphanelerden biri OpenCV'dir (Açık Kaynak Bilgisayarlı Vizyon Kütüphanesi). OpenCV, diğerleri arasında yüz, göz ve gülüş tespiti için çeşitli yerleşik ön tanımlı sınıflayıcılarla gerçek zamanlı bilgisayar görüşünü amaçlayan, platformlar arası ücretsiz bir programlama kütüphanesidir.

    Örneğin, bir gözetim kamerası gibi bir video akışı kullanarak, OpenCV'nin video karesini kare kare okumak ve doğru şekilde işlemek için doğru bir şekilde yapılandırıldığından emin olarak başlayın. Daha sonra, geliştiriciler algılama işlemi için ön yüz Haar-Cascade sınıflandırıcı, makine öğrenmeye dayalı bir yaklaşım gibi yöntemleri kullanabilirler. Bir "tespit" işlevine sahip bir Python komut dosyası kullanarak, komut dosyası video akışını açar ve çerçevenin her başlangıcını ve sonunu tanımlayan sonsuz bir döngüde çalışır. Ardından, çerçeve algılama işlevine girdi görevi görecek şekilde griye dönüştürülür. Son olarak, çerçeve içinde bir yüz tanımlanırsa, komut dosyası bir JPEG dosyasını kaydeder - tüm kare olarak veya yalnızca algılanan yüzler.


    BUGÜN KODLAMAYA BAŞLA

    Bir geliştirici, veri bilimcisi, analist veya etki alanı uzmanıysanız, Intel® for Python Dağıtım *, işlem yoğun Python hesaplama paketlerini, üretime hazır algoritmaları ve anında optimize edilmiş performansa erişimi hızlandırır. Derin öğrenme çerçevesi olarak Intel® Distribution for Python * 'a dahil olan herhangi bir paket, yüz tanıma yazılımı yapmak için kullanılabilir.

    Yüz algılama için video ön işleme tekniklerine ve bir OpenCV uygulamasının çalışan bir örneğine, Python * için Intel® Distribution ile birlikte gelen paketlerden biri olan ayrıntılı bir giriş için, Intel® AI Academy'yi ziyaret edin .