Endotermik tepkimelerde tepkime çevreden ısı alır. Bunu bir örnekle gözlemlemek istedim. Endotermik tepkime olarak sodyum bikarbonat (soda) ile sitrik asit tepkimesini bir termometre ile takip ettim. Termometre olarak arduino ve DS18B20 sensörünü kullandım. Bu termometre projesiyle ilgili ayrıntılı bilgileri internetten bulabilirsiniz.
Tepkimenin zamana göre grafiği
Deney için 30 ml civarında destile su aldım ve bu suya önce bir tatlı kaşığı kadar sitrik asit ekledim. Bu ekleme anı yukarıdaki grafikte sıcaklığın ilk düşüşe geçtiği noktada görülüyor. Ardından bu çözeltiyi beklettim ve sıcaklık yine yükselmeye başladı. Çok uzun süreceği için ilk sıcaklığa kadar çıkmasını beklemedim ama. Ardından bu çözeltiye bu sefer bir tatlı kaşığı kadar sodyumbikarbonat ekledim. Bu sefer sıcaklık kısa sürede sıfırın altına bile düştü. Çözelti olduğundan bir donma gözlemlemedim ama parmakla dokununca çok soğuk olduğu açıkça hissediliyordu.
Deney bittikten sonra deneyde kullandığım çözeltiyi lavaboya döktüm.
Tepkimenin denklemini aşağıda görebilirsiniz. Tepkime sırasında çözeltinin kabarcıklar çıkarıp taşmasının nedeni açığa çıkan karbondioksit gazıdır.
Komşunun evindeki mor salkımların yere düşen tohumlarını toplamıştım. Geçenlerde üç tanesini ekeyim dedim. Kısa sürede çimlendiler. Bu sabah onları da şişelerine transfer ettim.
mor salkım çimlendi ve çok hızlı büyümekte Keçiboynuzu tohumuna benzeyen tohumu ve kökler
Büyüdüğünde ve kendisine yer bulduğumda şöyle görünebilir
Uzunca bir metinde bir kelime aradığımız çok olmuştur. Bu aramalar için geliştirilmiş çok çeşitli algoritmalar var. Bu yazıda bu algoritmaların en basitinin simülasyonuyla ilgileneceğim.
Bu algoritmada metnin en başından başlanır ve harf harf kelime ve aranan kelime karşılaştırılır. Eğer karşılaştırılan harfler farklı ise aynı karşılaştırmaya metnin bir sonraki harfinden başlanır. Bu karşılaştırmalar ya metnin içinde bu kelime bulunana ya da metnin sonuna ulaşılana kadar devam edilir.
Şubat başından beri çiçek tohumlarıyla ilgilenmekteyim. Daha önceki yıllarda da bunu denemiştim ama başarı oranı hep oldukça düşük olmuştu. Her işte olduğu gibi çiçekçiliği de deneme yanılma yöntemiyle öğrenmeye kalkmam birkaç yıl kaybetmeme neden oldu ama bu sırada bir şeyler öğrendim sanıyorum. Bu yıl çimlenme yüzdem çok daha iyi. Saksı olarak geçen yıl topladığım yoğurt, ayran kaplarını kullanıyorum. Toprak olarak da gübresiz, besinsiz, su tutmayan bir toprak. Bu sayede çiçeğin tohumdan çıkar çıkmaz köklerini geliştirmesini hedefliyorum. Şimdiye kadar işe yaramış gibi gözüküyor. Şubat başında bu coğrafyada çiçeklerin istediği dış şartları bahçede yaratmam mümkün olmadığından saksılar için evin içinde kalorifer destekli yerler seçtim. Az olan güneş ışığından maksimum yararlanabilmeleri için de pencere kenarlarını kullandım. Geriye tek bir problem kaldı. Evdeki kediler. Toprakla oynamaya bayılan kedilerimiz açıkta çiçek bırakmıyorlar. Bu nedenle biraz daha fazla koruma önlemi almam gerekti. İlk olarak küçük saksıları plastik mini sera kutularına koydum. Bu kutulardan oldukça iyi verim aldım.
Bir süre sonra çiçekler sera kutularına sığmamaya başladı. Bunun üzerine PET şişeleri kullanmaya başladı. Altlarına su tutmasın diye delikler açtım. İçine toprak ve çiçeği de koyabilmek için şişeyi yan tarafından enine açtım. Üst tarafı şişeyi kapatıp kediden koruma sağlayabilsin. diye tam kesmedim. Tabii ki toprak su tutmadığından hemen hemen her gün sulamam gerekiyor ve ben bu konuda genelde çok unutkanımdır. Bazı akşamlar eve geç geldiğimde çiçekleri sulamayı unuttuğum çok olmuştur ama neyse ki imdadıma korona virüsü yetişti ve akşamları eve geç gelebileceğim bütün aktiviteler iptal edildi.
Şimdiki sorunum ise şişeleri koyacak yerim kalmadı ve daha da kötüsü şişelerdeki çiçekler de şişelerden daha hızlı büyümekte. Mayıs ortasına kadar soğuk hava riski yüksek olduğundan çiçekleri balkona bile çıkaramıyorum. Bakalım bu sorunun altından nasıl kalkacağım.
Bu sırada yaptığım başka bir hata da çiçekleri bir saksıdan başka bir saksıya ya da şişeye aktarırken kayıtları doğru tutmadığımdan bir süre sonra hangi kapta hangi çiçeğin olduğunu bilmiyorum artık. Bu yüzden de kayıp olma durumunda hangi çiçeğin neden öldüğünü de kaydedemiyorum. Bir dahaki seneye daha sistematik bir yöntem geliştirmem gerekecek.
Bu sırada da ara ara buradan çiçeklerle ilgili görselli haberler vermeyi düşünüyorum. Bir günlük kadar sık yazacak zamanı bulacağımı hiç sanmıyorum ama.
Daha önceki minimum ve maksimum ile ilgili simülasyonlarda gördüğümüz gibi elemanları sıralanmamış dizilerde yalnızca maksimum elemanı ya da minimum elemanı bulmak için dizinin eleman sayısının bir eksiği kadar karşılaştırma işlemi yapmamız gerekmekte. Bazı durumlarda aynı anda dizinin hem en küçük hem de en büyük elemanını bulmamız gerekir. O zaman her iki elemanı da ayrı ayrı bulmaya kalkarsak dizinin eleman sayısının iki katının iki eksiği kadar işlem yapmamız gerekecek.
Bu simülasyondaki algoritmayla gereken karşılaştırma sayısı sırayla önce en küçük sonra da en büyük elemanı bulmak için gereken karşılaştırma sayısında daha azdır. Bunun için en küçük ve en büyük sayıları beraber güncellememiz gerekiyor. Bu sırada kullanacağımız teknik ise eğer bir adımda kontrol ettiğimiz sayı o ana kadarki en küçük sayıdan daha küçükse o ana kadarki en büyük sayıyla karşılaştırmaya gerek yoktur, daha büyük olma şansı yoktur.
Bu yöntemi kullandığımızda ilk iki sayıyı okuduktan sonra bir karşılaştırma yaparız ve o ana kadarki en küçük ve en büyük sayıları buluruz. Ardından her yeni sayı ile o ana kadarki en küçük sayı karşılaştırılır. Eğer yeni sayı daha küçükse en küçük sayıyı güncelleriz ve dizideki bir sonraki sayıyla devam ederiz. Eğer yeni sayı en küçük sayıdan büyükse o zaman o ana kadarki en büyük sayı ile karşılaştırırız. Yeni sayı en büyük sayıdan büyükse o ana kadarki en büyük sayıyı güncelleriz.
Algoritmanın çalışmasını bu simülasyonda görebilirsiniz. Dizideki yeşil sayı o ana kadarki en küçük sayıyı, mavi sayı da en büyük sayıyı göstermekte.
Bir sayı dizisindeki minimum ya da maksimum elemanı bulma algoritmasının javascript ile programladım. Programlar algoritma ve programlama konusunda hiçbir bilgiye sahip olmayan kişilere, örneğin çocuklara yöneliktir.
Kış gelmesiyle beraber çevredeki bitki örneklerinin az olacağını düşünmüştüm. Elbette bir baharla ya da yazla karşılaştırılamaz ama yine de düşündüğümden verimli oldu. Havaların mevsim normallerinden çok daha sıcak olmasının da etkileri vardır tabii ki.
Kış yasemini (Jasminum nudiflorum)
Kışın sarı çiçekleriyle çevrede çok gördüğüm bir çalı türü. Önce çiçeklerin ve tomurcukların fotoğrafları:
Şimdi de her mevsim yeşil kalan dalların enine kesitinin mikroskop altındaki görüntüsü:
4 kere büyütülmüş ve Astrablau ile boyanmış4 kere büyütülmüş ve safranin ile boyanmış10 kere büyütülmüş ve safranin ile boyanmış10 kere büyütülmüş ve astrablau ile boyanmış
Ballıbaba (Lamium maculatum)
Kışın ikinci sırada açan çiçekleri bunlardı.
Bu da sapının enine kesitinin mikroskop altındaki görüntüsü. Sapın orta kısmı boş gibi.
4 kere büyütülmüş ve safranin ile boyanmış4 kere büyütülmüş ve astrablau ile boyanmış10 kere büyütülmüş ve safraninle boyanmış10 kere büyütülmüş ve astrablau ile boyanmış
Kardelen (Galanthus nivalis)
Şubat ile beraber kar yağmamasına rağmen kardelenler de topraktan çıktı.
Sapının enine kesiti de mikroskopta aşağıdaki gibi görünüyor.
4 kere büyütülmüş ve safraninle boyanmış10 kere büyütülmüş ve safraninle boyanmış
Not: Mikroskop fotoğrafları oküler üzerinden cep telefonuyla çekildi.
Buraya kadar perceptronların basitçe nasıl çalıştığını anlatmaya çalıştım. Bu birimlerin nasıl öğrendiği konusuna henüz girmedim. Perceptronların girdi sayısına göre belirlenen boyuttaki bir uzayı iki parçaya ayırdığını gördük. Tek girdili bir perceptron tek boyutlu sayı doğrusunu iki parçaya ayırıyor. İki girdili bir perceptron da iki boyutlu koordinat sisteminin bir doğru ile iki parçaya ayırıyor. Eğer simulasyonu yapsaydık üç girdili bir perceptronun da üç boyutlu uzayı bir düzlem ile iki parçaya ayırdığını görecektik. İspatlamadan genel olarak N girdili bir perceptronun N boyutlu uzayı N-1 boyutlu bir düzlemle iki parçaya ayıracağını söyleyebiliriz. Eğer bias kullanmazsak ayırmak için kullanılan doğru ya da düzlem her zaman orijinden geçecek ama bias ile bu ayraç bu noktayla kısıtlı kalmayacaktır.
Şimdi bu basit perceptronları yanyana kullanarak ne tür problemleri çözebileceğimize bakmak istiyorum.
Tek bir perceptron ile verilen uzayı doğrusal bir şekilde iki parçaya ayırabildiğimizi gördük. Görsel açıdan kolaylık olsun diye aşağıdaki örneklerde iki boyutlu koordinat sistemini örnek olarak kullanacağım. Aynı fikirler çok daha yüksek boyutlu uzaylar için de geçerli olacak.
Birden fazla perceptron ile istediğimiz şekilde kapalı bir alanı tanımlayabiliriz. Örneğin üç tane perceptron ile aşağıdaki gibi yeşil alanı tanımlayabiliriz.
Açık yeşil alan üç perceptron tarafından tanımlanabilir.
Tanımlanabilen alanların orijinde olması gerekmemektedir. Ayrıca birden fazla alan da tanımlanabilir.
Yukarıdaki alanı üç perceptron ile şu şekilde elde ederiz.
Birinci perceptron düzlemi şu şekilde ikiye ayırmakta:
Birinci perceptron
Bu perceptron yeşil alandaki girdilerde aktifleşiyor ve kırmızı alandaki girdilerde aktifleşmiyor. Perceptronun ağırlık ve bias değerlerini grafikten okumak mümkün ama buna burada girmeyeceğim.
İkinci perceptronun grafiği de aşağıdaki şekilde.
İkinci perceptron
Bu perceptron da sadece yeşil alandaki girdilerde aktifleşiyor.
Son olarak da üçüncü perceptron:
Üçüncü perceptron
Bu perceptron da diğer ikisi gibi yeşil alandaki girdilerde aktifleşiyor. Sonuçta üç grafiği üstüste koyduğumuzda en üstteki grafiği elde ederiz. Yani üç perceptronun da aktifleştiği girdiler en üstteki grafikteki yeşil alandaki girdiler olacak. Böylece bu bölgeyi programda tanıma yöntemimiz de belli olmuş bulunuyor. Üç perceptronun da aktifleşmiş olması.
Bu mantığı istediğimiz kadar geliştirebiliriz ama kısa süre sonra bir problemle karşılaşırız. Oldukça karmaşık alanlar için çok fazla perceptrona ihtiyacımız olacak, çünkü tek bir perceptron sadece doğrusal bir parçalamaya imkan veriyor ve aranan alan çok kıvrımlı bir sınıra sahip olabilir. Ayrıca bu şekilde sadece sınıflama türü problemleri çözebileceğiz. Yani verilen girdi hangi sınıfa ait? Yeşil bölgeye mi yoksa kırmızı bölgeye mi?
İlerideki yazılarda perceptronlarımızda ufak değişiklikler yaparak daha başka problemleri de nasıl çözebileceğimize değineceğim.
Bir önceki yazıdaki bias tekniğini bu sefer iki girdili perceptrona uygulayacağım. Bu şekilde x-y koordinat sisteminde orijin noktasından geçen doğruyu bu noktadan uzaklaştırmaya çalışacağım.
Olayın teorik kısmı geçen yazıdaki gibi. Bu nedenle burada sadece simulasyon sayfasının linkini veriyorum.
Bu yazıda tek girdili basit perceptron modelinde bahsettiğim bir zayıflığın nasıl giderilebileceğini göstereceğim. Bahsettiğim zayıflık bu perceptronun sayı doğrusunu hep 0 noktasından ikiye ayırmasıydı. Kullanacağım çözüm aslında biraz hile gibi gözüküyor çünkü kullanacağım perceptron artık tek bir girdiye sahip olmayacak.
Simulasyon sayfasında çözüm modeline bakarsak ilk bakışta bu perceptronun aslında iki girdili bir perceptron olduğunu görüyoruz ama arada küçük bir fark var. Alttaki girdinin değeri her zaman 1.0 kalmakta. Böylece iki girdili perceptron durumundaki gibi iki değişkenimiz yok, hala sadece bir değişkenimiz var ama bu ekstra terim artık karar eşiğini sağa ya da sola kaydırabilecek.
\(o = sgn(i \cdot w + 1.0 \cdot w_{b}) = sgn(i \cdot w + w_{b}) \)
burada \(w \) yukarıdaki girdinin bağlı olduğu ağırlık değerini simgelerken, \(i \) de yukarıdaki girdi oluyor. \(w_{b} \) ise aşağıdaki sabit bias girdisinin ağırlık değeridir ve bu ağırlık öğrenme aşamasında tabii ki değişkendir. Yukarıdaki denklemde de görülebileceği gibi bu ağırlık değeri sign fonksiyonunu kendi değeri kadar sağa ya da sola kaydırır.
signum fonksiyonusignum fonksiyonunun grafiği
Şimdi bu fonksiyonu bias terimi (\(w_{b} \)) ile görelim.
sign(x+2) fonksiyonunun grafiği
Simulasyonda bias terimiyle oynayarak aşağıdaki grafikte hangi girdi değerlerinin perceptronu aktifleştireceğini ve hangi değerlerin aktifleştirmeyeceğini görebiliriz. Bu sefer ayrımın 0 noktasında olmak zorunda olmadığına da dikkat edelim.