Hoşgeldin Ziyaretçi
Mesaj atabilmek için forumumuza kayıt olmalısınız.

Kullanıcı Adı
  

Şifre
  





Forumlarda Ara

(Gelişmiş Arama)

Forum İstatistikleri
» Üye Sayısı: 169
» En Son Üyemiz: fangdabaoy
» Konu Sayısı: 189
» Mesaj Sayısı: 254

Tam İstatistik

Çevrimiçi Kullanıcılar
Şu anda 2 çevrimiçi kullanıcı var.
» 0 üye | 2 Misafir

En Son Konular
PHP'ye Başlıyorum Gelin Ö...
tarafından admin
28-03-2019, 23:44
Javascript Nedir?
tarafından admin
26-03-2019, 22:48
Yapay sinir Ağlarında Sko...
tarafından admin
26-03-2019, 01:01
Derin Öğrenme Uygulamalar...
tarafından admin
26-03-2019, 01:01
Yapay sinir Ağlarında Per...
tarafından admin
26-03-2019, 00:48
Yüz tanıma yazılımı oluşt...
tarafından admin
25-03-2019, 19:23
Yapay zeka (AI) beynin di...
tarafından admin
25-03-2019, 00:22
Mini çita, backflip yapan...
tarafından admin
25-03-2019, 00:21
Yapay zeka kullanılarak t...
tarafından admin
25-03-2019, 00:20
Ultra düşük güçlü cipsler...
tarafından admin
25-03-2019, 00:18

 
  PHP'ye Başlıyorum Gelin Öğrenelim
Gönderen: admin - 28-03-2019, 23:44 - Forum: PHP - Cevap Yok

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.

Bu öğeyi yazdır

  Javascript Nedir?
Gönderen: admin - 26-03-2019, 22:48 - Forum: JavaScript - Cevap Yok

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/

Bu öğeyi yazdır

  Yapay sinir Ağlarında Skor fonksiyonu
Gönderen: admin - 26-03-2019, 01:01 - Forum: Yapay Sinir Ağları - Cevap Yok

[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]

Bu öğeyi yazdır

  Derin Öğrenme Uygulamalarında Başarım İyileştirme Yöntemleri
Gönderen: admin - 26-03-2019, 01:01 - Forum: Yapay Sinir Ağları - Cevap Yok

[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]

Bu öğeyi yazdır

  Yapay sinir Ağlarında Perceptron ve Lineer Fonksiyonlar
Gönderen: admin - 26-03-2019, 00:48 - Forum: Yapay Sinir Ağları - Cevap Yok

[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.

Bu öğeyi yazdır

  Yüz tanıma yazılımı oluşturmak için Yapay Zeka uygulama
Gönderen: admin - 25-03-2019, 19:23 - Forum: Yapay Zeka Genel - Cevap Yok

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 .

Bu öğeyi yazdır

  Yapay zeka (AI) beynin dili nasıl anladığını anlamamıza yardımcı olabilir mi?
Gönderen: admin - 25-03-2019, 00:22 - Forum: Yapay Zeka Genel - Cevap Yok

Yapay zeka (AI) beynin dili nasıl anladığını anlamamıza yardımcı olabilir mi? Sinirbilim, AI ve sinir ağlarının neden insan algısını tahmin etmede etkili olduğunu anlamamıza yardımcı olabilir mi?

Austin'deki Texas Üniversitesi'nden (UT Austin) Alexander Huth ve Shailee Jain'ten yapılan araştırmalar, her ikisinin de mümkün olduğunu öne sürüyor.
2018 Sinir Bilgi İşlem Sistemleri Konferansı'nda (NeurIPS) sunulan bir bildiride, araştırmacılar, beyindeki farklı alanların belirli kelimelere nasıl cevap verdiklerini her zamankinden daha fazla doğrulukla tahmin etmek için yapay sinir ağlarını kullanan deneylerin sonuçlarını açıkladılar.
UT Austin Neuroscience ve Computer Science profesörü Huth, "Kelimeler kafalarımıza girerken, bize ne söylendiğine dair fikirler oluşturuyoruz ve bunun bize nasıl beynin içinde geldiğini anlamak istiyoruz" dedi. “Görünüşe göre sistemler olmalı, ancak pratik olarak, bu sadece dilin işe yaramadığı gibi. Biyolojideki herhangi bir şey gibi, basit bir denklem kümesini azaltmak çok zor.”

Çalışmada, bağlamda daha iyi bir koruma sağlamak için her bir kelimenin önceki ile olan ilişkisini hesaplayan uzun kısa süreli hafıza (LSTM) adı verilen bir tür tekrarlayan sinir ağı kullanılmıştır.

Huth'un UT Austin'deki laboratuarında doktora öğrencisi olan Jain, “Eğer bir kelimenin birden fazla anlamı varsa, daha önce söylenenlere bağlı olarak o cümlenin anlamını, bu cümlenin anlamını çıkarırsınız” dedi. “Hipotezimiz, bunun beyin aktivitesinin daha iyi tahmin edilmesine yol açacağı, çünkü beyin bağlamı önemsiyor.”
Kulağa açık geliyor, ancak onlarca yıldır sinirbilim deneyleri, beynin sözcüklere ya da cümle zincirleriyle bağlantısı hakkında bir fikir edinmeden tek tek kelimelere verdiği yanıtı düşündü. (Huth, Mart 2019'da Bilişsel Sinirbilim Dergisi'nde "gerçek dünya sinirbilimi" yapmanın önemini açıklar .)

Çalışmalarında araştırmacılar, beynin farklı alanlarının hikayeleri dinlerken nasıl tepki vereceğini test etmek ve nihayetinde tahmin etmek için deneyler yaptılar (özellikle Moth Radio Hour). Aktif nöron gruplarının ne kadar aktif olduklarına bağlı olarak beyindeki kan oksijenlenme seviyesindeki değişiklikleri yakalayan fMRI (fonksiyonel manyetik rezonans görüntüleme) makinelerinden toplanan verileri kullandılar. Bu, dil kavramlarının beyinde "temsil edildiğinin" karşılığı olarak görev yapar.
Texas Advanced Computing Center'daki (TACC) güçlü süper bilgisayarları kullanarak, LSTM yöntemini kullanarak bir dil modeli geliştirdiler, böylece daha sonra hangi kelimenin geleceğini etkili bir şekilde tahmin edebiliyorlardı. usta

“Bir sonraki kelimeyi tahmin etmeye çalışırken, bu model, dilin nasıl işlediğiyle ilgili diğer tüm şeyleri dolaylı olarak öğrenmek zorunda” dedi Huth, “hangi kelimelerin beyne ya da beyin hakkında herhangi bir veriye erişmeden başka kelimeleri takip etme eğiliminde olduğu ."
Hem dil modeline hem de fMRI verilerine dayanarak, her bir kelimeyi yeni bir hikayede ilk kez duyduğunda beynin nasıl tepki vereceğini tahmin edebilecek bir sistem geliştirdiler.

Geçmişteki çabalar, beyindeki dil tepkilerini etkili bir şekilde lokalize etmenin mümkün olduğunu göstermiştir. Bununla birlikte, yeni araştırma bağlamsal unsurun eklenmesinin –bu durumda daha önce gelen 20 kelimeye kadar- beyin aktivitesi tahminlerini önemli ölçüde iyileştirdiğini göstermiştir. En az miktarda içerik kullanılsa bile tahminlerinin düzeldiğini buldular. Ne kadar fazla içerik sağlanırsa, tahminlerinin doğruluğu o kadar iyi olur.
"Analizimiz, eğer LSTM daha fazla kelime içeriyorsa, bir sonraki kelimeyi tahmin etmekte daha iyi olacağını," dedi Jain, "bu, geçmişte tüm kelimelerin bilgisini içermesi gerektiği anlamına geliyor."
Araştırma daha ileri gitti. Beynin hangi kısımlarının içerilen bağlam miktarına daha duyarlı olduğunu araştırdı. Örneğin, işitsel kortekse yerelleştirilen görünen kavramların bağlama daha az bağımlı olduklarını buldular.
Huth, “Köpek kelimesini duyarsanız, bu alan bundan önce 10 kelimenin ne olduğunu umursamıyor, sadece köpek kelimesinin sesine cevap verecek” dedi.
Öte yandan, daha üst düzey düşünmeyle ilgilenen beyin alanlarının daha fazla bağlam dahil edildiğinde kesin olarak belirlenmesi kolaydı. Bu, zihin ve dil kavrama teorilerini destekler.

Huth, "Yapay ağın hiyerarşisi ile ilginç bulduğumuz beyin hiyerarşisi arasında gerçekten güzel bir yazışma vardı" dedi.
Doğal dil işleme - veya NLP - son yıllarda büyük adımlar attı. Ancak, soruları cevaplamak, doğal konuşmalar yapmak veya duyguları yazılı metinlerde incelemek söz konusu olduğunda, NLP'nin daha uzun bir yolu var. Araştırmacılar LSTM tarafından geliştirilen dil modellerinin bu alanlarda yardımcı olabileceğine inanıyor.
LSTM (ve genel olarak sinir ağları), yüksek boyutlu alandaki değerleri ayrı ayrı bileşenlere (burada sözcükler) atayarak çalışır, böylece her bir bileşen, diğer birçok şeyle binlerce farklı ilişkisi tarafından tanımlanabilir.

Araştırmacılar, Reddit yayınlarından çizilen on milyonlarca kelimeyi besleyerek dil modelini eğitti. Daha sonra sistemleri, altı denek beynindeki binlerce vokselin (üç boyutlu pikseller) ne modelin ne de bireylerin daha önce duymadığı ikinci bir öykü grubuna nasıl cevap vereceğini öngörüyordu. Bağlam uzunluğu ve sinir ağındaki ayrı ayrı katmanların etkisiyle ilgilendikleri için, her bir konu için 60 farklı faktörü (20 uzunluk bağlam tutma ve üç farklı katman boyutu) test ettiler.
Tüm bunlar, büyük miktarda hesaplama gücü, bellek, depolama ve veri alımı gerektiren çok büyük ölçekli hesaplama problemlerine yol açmaktadır. TACC'nin kaynakları bu soruna çok uygun. Araştırmacılar, bilgi işlem görevleri için hem GPU'ları hem de CPU'ları içeren Maverick süper bilgisayarını ve verileri korumak ve dağıtmak için bir depolama ve veri yönetimi kaynağı Corral'ı kullandılar. Sorunu birçok işlemcide paralel hale getirerek, hesaplama denemesini yıllar yerine haftalar içinde gerçekleştirebildiler.

Huth, "Bu modelleri etkili bir şekilde geliştirmek için çok sayıda eğitim verilerine ihtiyacınız var." Dedi. “Bu, ağırlıkları her güncellemek istediğinizde tüm veri kümenizden geçmek zorunda olduğunuz anlamına gelir. Ve TACC'deki gibi paralel kaynakları kullanmazsanız, bu doğal olarak çok yavaş.”
Kulağa karmaşık geliyorsa, peki - öyle.

Bu, Huth ve Jain’in sistemin daha düzenlenmiş bir versiyonunu düşünmesine öncülük ediyor, burada bir dil tahmin modeli geliştirmek ve ardından beyne uygulamak yerine, doğrudan beyin tepkisini öngören bir model geliştiriyorlar. Buna uçtan uca bir sistem diyorlar ve Huth ve Jain'in gelecekteki araştırmalarında yer almayı umduğu yer. Böyle bir model performansını doğrudan beyin tepkilerine göre geliştirir. Beyin aktivitesinin yanlış bir şekilde tahmin edilmesi, modele geri bildirim verir ve iyileştirmeleri teşvik eder.

Huth, "Eğer bu işe yararsa, o zaman bu ağın beynimizin nasıl yaptığına benzer şekilde metin okumayı veya giriş dilini okumayı öğrenmesi mümkündür." Dedi. "Google Translate'i hayal edin, ancak yalnızca bir dizi kural öğrenmek yerine ne söylediğinizi anlar."

Böyle bir sistem uygulandığında, Huth, beyin aktivitesini dile çevirebilecek bir zihin okuma sisteminin mümkün olduğu zamana kadar bunun sadece bir zaman meselesi olduğuna inanıyor. Bu arada, deneylerinden hem sinirbilim hem de yapay zeka hakkında fikir ediniyorlar.

Jain, "Beyin çok etkili bir hesaplama makinesi ve yapay zekanın amacı, beynin yapabileceği her işte gerçekten iyi makineler üretmektir" dedi. “Ama beyin hakkında fazla bir şey anlamadık. Bu yüzden, beynin nasıl çalıştığını sorgulamak için yapay zekayı kullanmaya çalışıyoruz, sonra da bu sorgulama yöntemi ve teorik sinirbilim yoluyla edindiğimiz içgörülere dayanarak, bu sonuçları daha iyi yapay Zeka geliştirmek için kullanıyoruz.

“Fikir, hem biyolojik hem de yapay bilişsel sistemleri anlamak ve daha iyi makineleri anlamak ve kurmak için bunları birlikte kullanmak” dedi.

Bu öğeyi yazdır

  Mini çita, backflip yapan ilk dört bacaklı robottur.
Gönderen: admin - 25-03-2019, 00:21 - Forum: Yapay Zeka Robotik - Cevap Yok

MIT'in yeni mini çita robotu, şampiyon bir jimnastikçiye rakip olan bir dizi hareketle, yaylı ve hafif. Dört bacaklı güç paketi bacaklarını genişçe bükebilir ve döndürerek sağ tarafa doğru yukarı veya aşağı doğru yürümesini sağlar. Robot, ortalama bir kişinin yürüme hızının iki katı kadar hızlı olmayan engebeli araziyi de kaldırabilir.
[Resim: 190304134200_1_540x360.jpg]
Sadece 20 pound ağırlığında - bazı Şükran hindilerinden daha hafiftir - dörtlü kiriş bastırmaz: Yere fırlatıldığında robot, dirseklerinin hızlı, kung-fu benzeri bir hızla kendisini doğru şekilde düzeltebilir.

Belki de en etkileyici, 360 derecelik bir backflip'i ayakta durma pozisyonunda gerçekleştirebilmesidir. Araştırmacılar, mini çitaların, bir dökülme ile sonuçlanmasına rağmen, neredeyse zarar görmeyecek şekilde tasarlandığını, az hasarla geri kazanıldığını iddia ediyor.

Bir uzuv veya motorun kırılması durumunda, mini çita modüler bir akılda tutularak tasarlanmıştır: Robotun bacaklarının her biri, araştırmacıların kullanıma hazır parçaları kullanarak tasarladıkları aynı, düşük maliyetli üç elektrik motoruyla çalışır. Her motor yenisiyle kolayca değiştirilebilir.
MIT Makine Mühendisliği Bölümünün teknik bir ortağı olan lider geliştirici Benjamin Katz, “Bu parçaları neredeyse Legos gibi bir araya getirebilirsiniz” diyor.
Araştırmacılar mini çita tasarımını Mayıs ayında yapılan Uluslararası Robotik ve Otomasyon Konferansı'nda sunacaklar. Halen, her biri diğer laboratuvarlara borç vermeyi umdukları 10 kişilik bir sete yönelik dört ayaklı makinelerin çoğunu inşa ediyorlar.

“Bu robotu inşa etmemizin büyük bir kısmı, deney yapmayı ve sadece çılgınca şeyler denemeyi çok kolaylaştırmasıdır, çünkü robot süper sağlamdır ve kolay kırılmaz, ve eğer kırılırsa kolay ve çok pahalı değil düzeltmek için "diyor Sangbae Kim laboratuvarında robot üzerinde çalışan Katz, makine mühendisliği profesörü.
Kim, mini çitaları diğer araştırma gruplarına ödünç vermek, mühendislere yeni algoritmaları ve manevraları, başka türlü erişemeyebilecekleri oldukça dinamik bir robot üzerinde test etme fırsatı veriyor.

Kim, “Sonunda, her takımın farklı algoritmalara sahip mini bir çitayı kontrol ettiği ve hangi stratejinin daha etkili olduğunu görebildiğimiz bir engelli parkurda robotik bir köpek yarışı yapabileceğimizi umuyorum.” Diyor. “Araştırmayı böyle hızlandırıyorsun.”

"Dinamik şeyler"

Mini çita, pahalı, özel tasarımlı parçalarını korumak için sık sık teterlerle dengelenmesi gereken büyük, ağır, zorlu bir robot olan selefi, Çita 3'ün minyatür bir versiyonundan daha fazlasıdır.

Katz, "Çita 3'te her şey süper entegre, yani bir şeyi değiştirmek istiyorsanız, bir ton yeniden tasarım yapmanız gerekiyor." Diyor. "Mini çita ile birlikte, başka bir kol eklemek istiyorsanız, bu modüler motorlardan üç veya dört tane daha ekleyebilirsiniz."
Katz, elektrik motor tasarımı ile parçaları normalde dronlarda ve uzaktan kumandalı uçaklarda kullanılan küçük, ticari olarak temin edilebilir motorlara göre yeniden ayarlayarak geldi.

Robotun 12 motorunun her biri, bir Mason kavanoz kapağının büyüklüğü ile ilgilidir ve aşağıdakilerden oluşur: dönen bir manyetik alan oluşturan bir stator veya bobin takımı; statorun üretmesi gereken akım miktarını taşıyan küçük bir kontrol cihazı; stator alanıyla birlikte dönen, bir uzuvyu kaldırmak veya döndürmek için tork üreten mıknatıslarla kaplı bir rotor; rotorun normalde alacağının altı katı torku sağlayabilmesini sağlayan 6: 1 vites küçültme sağlayan bir dişli kutusu; ve motorun ve ilişkili uzuvun açısını ve yönünü ölçen bir konum sensörü.

Her bir ayağa, üç serbestlik derecesi ve geniş bir hareket alanı sağlamak için üç motorla güç verilir. Hafif, yüksek torklu, düşük ataletli tasarım, robotun hızlı, dinamik manevralar yapmasını ve zeminde dişli kutuları veya uzuvları kırmadan yüksek kuvvetli etkiler yapmasını sağlar.
Katz, "Yerdeki kuvvetleri değiştirebilme oranı gerçekten çok hızlı" diyor. “Çalışırken, ayakları sadece bir seferde 150 milisaniye gibi bir şey için yerde duruyor; bu sırada bir bilgisayar ayaktaki kuvveti artırmasını, ardından dengeyi değiştirmesini ve daha sonra kaldırması gereken kuvveti düşürmesini söylüyor Böylece, her adımda havaya atlamak ya da bir yerde iki ayakla koşmak gibi gerçekten dinamik şeyler yapabilir. Çoğu robot bunu yapamaz, bu yüzden daha yavaş hareket eder. "

Saygısız

Mühendisler, mini çitayı, birkaç manevradan geçirdi ve ilk olarak MIT Pappalardo Laboratuarı'nın koridorları ve Killian Court'un hafif pürüzlü alanı boyunca koşma yeteneğini test etti.

Her iki ortamda da dörtlü, saatte yaklaşık 5 mil hızla bağlanır. Robotun bağlantıları, iki kez torkla üç kat daha hızlı dönebiliyor ve Katz, robotun küçük bir ayarlama ile yaklaşık iki kat daha hızlı çalışabileceğini tahmin ediyor.
Ekip, robotu, yoga benzeri çeşitli konfigürasyonlarda germek ve bükmek için yönlendirmek, hareket alanını ve dengesini korurken uzuvlarını ve eklemlerini döndürme yeteneğini göstermek için yönlendiren başka bir bilgisayar kodu yazdı. Ayrıca robotu, tekme gibi beklenmedik bir güçten kurtulmaya programladılar. Araştırmacılar robotu yere attığında otomatik olarak kapandı.

Katz, “Korkunç bir şeyin ters gittiğini varsayıyor, bu yüzden kapanıyor ve tüm bacaklar nereye giderse gitsin” diyor.
Yeniden başlatılacak bir sinyal aldığında, robot önce yönünü belirler, daha sonra dört ayak üzerinde sağa doğru önceden programlanmış bir çömelme veya dirsek dönme manevrası yapar.

Katz ve yardımcı yazar Jared Di Carlo, Elektrik Mühendisliği ve Bilgisayar Bilimleri (EECS) bölümünden mezun olmuş, robotun daha etkili manevralar yapıp yapamayacağını merak etmişlerdir. EECS Profesörü Russ Tedrake tarafından verilen ve geçen yıl aldıkları bir sınıftan esinlenerek mini çitayı backflip yapmak için programlamaya başladılar.
Katz, "Bunun robot performansının iyi bir testi olacağını düşündük, çünkü çok fazla güç harcıyor, tork kullanıyor ve bir çevirinin sonunda büyük etkiler var." Diyor.
Ekip, robotun dinamiklerini ve aktüatör yeteneklerini içeren "dev, doğrusal olmayan, çevrimdışı bir yörünge yörünge optimizasyonu" yazdı ve robotun belirli bir dik yönelimde başlayacağı ve 360 derece döndürüldüğü bir yörünge belirledi. . Geliştirdikleri program daha sonra her bir motora, her bir motora ve başlangıç ile bitiş arasındaki her bir zaman diliminde geri tepme işlemini gerçekleştirmek için uygulanması gereken tüm torkları çözdü.
Katz, “İlk denediğimizde, mucizevi bir şekilde çalıştı” dedi.

"Bu süper heyecan verici" diye ekliyor Kim. "Cheetah 3'ün bir backflip yaptığını düşünün - bu koşu bandını çökertir ve muhtemelen koşu bandını yok eder. Bunu mini çita ile masaüstünde yapabiliriz."

Ekip, her biri işbirliği yapan gruplara ödünç vermeyi planladıkları, yaklaşık 10 mini çita inşa ediyor ve Kim, yeni fikirlerle icat edebilecek, takas edebilecek ve hatta rekabet edebilecek mühendislerden oluşan küçük bir çita araştırma konsorsiyumu oluşturmak istiyor.
Bu arada, MIT ekibi başka, daha da etkili bir manevra geliştiriyor.
Katz, “Şimdi bir iniş denetleyicisi üzerinde çalışıyoruz, benim robotu alıp fırlatıp atabilir ve sadece ayaklarının dibinde durmasını istediğim fikri” dedi. “Robotu bir binanın penceresine atmak istediğinizi ve binanın içinde keşfedilmesini istediğinizi söyleyin. Bunu yapabilirsiniz.”

Bu öğeyi yazdır

  Yapay zeka kullanılarak tanımlanan nörodejeneratif hastalıklar
Gönderen: admin - 25-03-2019, 00:20 - Forum: Yapay Sinir Ağları - Cevap Yok

Araştırmacılar, Mount Sinai'deki Icahn Tıp Fakültesi'nde yapılan ve Nature tıbbı Laboratuarında yayınlanan bir araştırmaya göre, Alzheimer hastalığı ve kronik travmatik ensefalopati dahil, insan beyni doku örneklerinde bir dizi nörodejeneratif hastalığın tespit edilmesi için yapay bir zeka platformu geliştirdiler. Araştırılması . Keşifleri, bilim insanlarının, hedeflenen biyobelirteçler ve terapötikler geliştirmelerine yardımcı olacak ve bu da hasta sonuçlarını iyileştiren karmaşık beyin hastalıklarının daha doğru teşhisine yol açacaktır.

Beyindeki anormal tau proteinlerinin nörofibrilerde dolaşımda artması, Alzheimer hastalığının bir özelliğidir, ancak aynı zamanda kronik travmatik ensefalopati ve yaşa bağlı ek durumlar gibi diğer nörodejeneratif hastalıklarda da birikir. Nörodejeneratif hastalıkların doğru teşhisi zordur ve çok eğitimli bir uzman gerektirir.
Mount Sinai'deki Hesaplamalı Sistemler ve Sistemler Patolojisi Araştırmacıları, Hassas Bilişim Platformu'nu geliştirdi ve kullandı: Nörodejeneratif hastalıkları olan hastalardan alınan doku örnekleri kullanılarak hazırlanan sayısallaştırılmış mikroskopik slaytlara güçlü makine öğrenme yaklaşımları uygulamak için. Derin öğrenme uygulayarak, bu görüntüler, doğrudan sayısallaştırılmış görüntülerden yüksek doğruluk derecesine sahip nörofibriler zincirleri tanımlayabilen evrişimli bir sinir ağı oluşturmak için kullanıldı.

Patoloji ve Sinirbilim Profesörü Profesör John Crary, "Yapay zekanın kullanılması, mevcut emek yoğun ve zayıf şekilde yeniden üretilebilir yaklaşımlar üzerinde büyük bir ilerlemeyi temsil eden nörodejeneratif hastalıkları tespit etme ve nicelendirme yeteneğimizi geliştirme konusunda büyük bir potansiyele sahip" dedi. Sina Dağı'nda Icahn Tıp Fakültesi. “Sonuçta, bu proje nörodejeneratif hastalıkların daha etkili ve doğru teşhisine yol açacaktır” dedi.

Bu, nöropatolojide büyük ölçekli görüntü verilerini kullanarak derin öğrenme algoritmalarını değerlendirmek için mevcut olan ilk çerçevedir. Kesin Bilişim Platformu, veri yönetimi, görsel keşif, nesne özetleme, çok kullanıcılı inceleme ve derin öğrenme algoritması sonuçlarının değerlendirilmesine izin verir.
Sina Dağı'ndaki Hesaplamalı ve Sistemler Patolojisi'ndeki araştırmacılar, çok çeşitli hastalıkları daha doğru bir şekilde sınıflandırmak için ileri mikroskop teknolojisi, bilgisayarlı görü ve yapay zeka ile birlikte gelişmiş bilgisayar bilimi ve matematiksel teknikleri kullandılar.

"Mount Sinai ülkedeki en büyük akademik patoloji departmanıdır ve yılda 80 milyondan fazla test uygular, bu da araştırmacılara test ve teşhisi iyileştirmek için kullanılabilecek geniş bir veri setine erişim sağlayarak sonuçta daha iyi tanı ve hasta sonuçlarına yol açar "dedi., yazar Carlos Cordon-Cardo, MD, Doktora, Mount Sinai Sağlık Sisteminde Patoloji Anabilim Dalı Başkanı ve Icahn Tıp Fakültesinde Patoloji, Genetik ve Genomik Bilimler ve Onkoloji Bilimleri Profesörü.

Bu öğeyi yazdır

  Ultra düşük güçlü cipsler küçük robotları daha yetenekli hale getirmeye yardımcı
Gönderen: admin - 25-03-2019, 00:18 - Forum: Yapay Zeka Robotik - Cevap Yok

Beyinden ilham alan ultra düşük güçlü bir hibrit yonga, avuç içi büyüklüğündeki robotlara işbirliği yapma ve deneyimlerinden bilgi edinme konusunda yardımcı olabilir. Yeni nesil düşük güç motorları ve sensörler ile birlikte, miliwatt gücünde çalışan yeni uygulamaya özel entegre devre (ASIC), akıllı sürü robotlarının dakikalar yerine saatlerce çalışmasına yardımcı olabilir.

Güç tasarrufu için, yongalar, sinyallerin darbe genişliğinin bilgileri kodladığı bir hibrid dijital-analog zaman-etki alanı işlemcisi kullanır. Yapay sinir ağları IC, hem model tabanlı programlama hem de işbirlikçi pekiştirici öğrenmeyi barındırır ve potansiyel olarak keşif, arama kurtarma ve diğer görevler için daha küçük yetenekler sunar.
Georgia Teknoloji Enstitüsü'nden araştırmacılar, 2019 IEEE Uluslararası Katı Hal Devreleri Konferansında (ISSCC) benzersiz ASIC'lerin yönlendirdiği robotik arabaları gösterdiler. Araştırma, Savunma Gelişmiş Araştırma Projeleri Ajansı (DARPA) ve Semiconductor Research Corporation (SRC) tarafından, Beyin İlham Alanında Özerk Zekayı Sağlayan Bilgi İşlem Merkezi (CBRIC) aracılığıyla desteklendi.

Georgia Tech'in Elektrik ve Bilgisayar Mühendisliği Yüksek Okulu'nda doçent olan Arijit Raychowdhury, “Bu çok küçük robotlara istihbarat getirmeye çalışıyoruz, böylece çevrelerini öğrenebiliyorlar ve özerk bir şekilde, altyapı olmadan hareket edebiliyorlar” dedi. “Bunu başarmak için, düşük güç devre konseptlerini bu çok küçük cihazlara getirmek istiyoruz, böylece kendi başlarına kararlar alabiliyorlar. Altyapı gerektirmeyen çok küçük ama yetenekli robotlar için büyük bir talep var.”
Raychowdhury ve lisansüstü öğrencileri Ningyuan Cao, Muya Chang ve Anupam Golder tarafından sergilenen otomobiller, lastik pedlerle kaplı ve karton blok duvarlarla çevrili bir arenada dolaşıyor. Bir hedef ararken robotlar trafik konilerinden ve birbirlerinden kaçınmalı, gittikçe ortamdan ders almalı ve birbirleriyle sürekli iletişim kurmalıdır.
[Resim: 190307091500_1_540x360.jpg]
Arabalar, konumlarını belirlemek ve etraflarındaki nesneleri tespit etmek için atalet ve ultrason sensörlerini kullanır. Sensörlerden gelen bilgiler, araçların “beyni” olarak görev yapan karma ASIC'e gider. Talimatlar daha sonra elektrik motorlarına talimatlar gönderen bir Ahududu Pi kontrolörüne gider.
Avuç içi büyüklüğünde robotlarda üç ana sistem güç tüketir: tekerlekleri, işlemciyi ve algılama sistemini sürmek ve yönlendirmek için kullanılan motorlar ve kontrolörler. Raychowdhury ekibi tarafından yapılan otomobillerde, düşük güçlü ASIC, motorların gücün büyük bölümünü kullandığı anlamına gelir. “Hesaplama gücünü bütçenin motorların ihtiyaç duyduğu baskın olduğu bir seviyeye çekebildik” dedi.

Ekip, geleneksel motorlardan çok daha az güçle çalışabilen mikro elektromekanik (MEMS) teknolojisini kullanan motorlarda ortak çalışanlarla çalışıyor.
"Okulu Yarıiletken Doçenti Raychowdhury," Algılama gücü, iletişim ve bilgisayar gücü ile çalıştırmanın yaklaşık aynı seviyede olduğu, yüz mili militarlık bir sistem kurmak isterdik "dedi. Elektrik ve Bilgisayar Mühendisliği. “Avuç içi büyüklüğündeki bu robotları verimli motorlar ve kontrol üniteleri ile üretebilirsek, birkaç AA pille birkaç saatlik çalışma süreleri sağlayabilmeliyiz. Artık ne tür işlem platformları sunmamız gerektiği konusunda iyi bir fikrimiz var. ama yetişmek için diğer bileşenlere hala ihtiyacımız var. "
Zaman domeninde hesaplamada, bilgi bakliyat genişliğinde kodlanmış iki farklı voltajda taşınır. Bu, devrelere, dijital cihazların sağlamlığı ile analog devrelerin enerji verimliliği avantajlarını verir.

Raychowdhury, "Çipin boyutu yarı yarıya azaltıldı ve güç tüketimi, geleneksel bir dijital çipin ihtiyaç duyduğuın üçte biri kadar," dedi. “Hedef performansı karşılarken güç tüketimini milliwatt aralığına düşürmek için hem mantık hem de bellek tasarımlarında birkaç teknik kullandık.”
Her darbe genişliğinin farklı bir değeri temsil etmesiyle, sistem dijital veya analog cihazlardan daha yavaştır, ancak Raychowdhury hızın küçük robotlar için yeterli olduğunu söylüyor. (Bir milliwatt bir watt'ın binde biri).

"Bu kontrol sistemleri için, çoklu gigahertz'de çalışan devrelere ihtiyacımız yok, çünkü cihazlar o kadar hızlı hareket etmiyor" dedi. "Aşırı güç verimliliği elde etmek için küçük bir performanstan ödün veriyoruz. Hesap 10 veya 100 megahertz'de çalışsa bile, hedef uygulamalarımız için bu yeterli olacaktır."
65 nanometre CMOS çipleri, bir robota uygun her iki tür öğrenmeyi de içeriyor. Sistem, model tabanlı algoritmaları takip etmek için programlanabilir ve ortamdan, zaman içinde daha iyi ve daha iyi performansı teşvik eden bir takviye sistemi kullanarak - şeyleri çarparak yürümeyi öğrenen bir çocuk gibi - öğrenebilir.
Raychowdhury, "Sistemi sinir ağında önceden belirlenmiş bir ağırlık seti ile başlatıyorsunuz, böylece robot iyi bir yerden başlayabilir ve hemen çökemez veya hatalı bilgi verebilir." Dedi. “Onu yeni bir yere yerleştirdiğinizde, çevrenin tanıyacağı bazı yapılar ve sistemin öğrenmesi gerekenler olacak. Sistem daha sonra kararları kendi başına alacak ve her kararın etkinliğini ölçecek. hareketini optimize et. "

Robotlar arasındaki iletişim, bir hedef aramak için işbirliği yapmalarını sağlar.
"İşbirlikçi bir ortamda, robotun sadece ne yaptığını değil aynı zamanda aynı gruptaki diğerlerinin ne yaptığını da anlama ihtiyacı var" dedi. “Grubun toplam ödülünü, bireyin ödülüne karşı en üst düzeye çıkarmak için çalışacaklar.”
ISSCC, bir kavram kanıtı sunan gösterileriyle tasarımları optimize etmeye devam ediyor ve hesaplama ve kontrol devresini bütünleştirmek için çip üzerinde bir sistem üzerinde çalışıyor.

Raychowdhury, “Bu küçük robotlarda giderek daha fazla işlevsellik sağlamak istiyoruz” dedi. "Neyin mümkün olduğunu ve yaptığımız şeyin şimdi diğer yeniliklerle güçlendirilmesi gerektiğini gösterdik" dedi.
Bu proje JUMP CBRIC hibe numarası 2777.006 hibe kapsamında Semiconductor Research Corporation tarafından desteklenmiştir.

Bu öğeyi yazdır

Hakkımızda
    Yapay Zeka Forum , Yapay Zekayı Türkiye'ye tanıtmak ve bu alanda Türkçe kaynak sıkıntısını gidermek ve aynı zamanda Yapay Zekaya ilgi duyan tüm kişileri bir araya getirmek amacıyla kurulmuştur.

Yapay Zeka Forum


yapay zeka

,

yapay sinir ağı

,

yapay sinir ağları

,

derin öğrenme

,

makine öğrenmesi