Bu Reklamı Kapat
Bu Reklamı Kapat

Derin Öğrenme Modeli Uygulaması: Yapay Zeka ile Çizgi Yüzler Üretin!

TensorFlow ve Python ile Çizgi Yüzler Üreten Derin Öğrenme Projesi

Derin Öğrenme Modeli Uygulaması: Yapay Zeka ile Çizgi Yüzler Üretin!
13 dakika
6,965
  • Makina Öğrenmesi
  • Bilgisayar Programcılığı
Evrim Ağacı Akademi: Yapay Zekaya Giriş Yazı Dizisi

Bu yazı, Yapay Zekaya Giriş yazı dizisinin 6. yazısıdır. Bu yazı dizisini okumaya, serinin 1. yazısı olan "Yapay Zeka Hakkında Bir Rehber: Nedir, Ne Değildir, Ne Olacaktır?" başlıklı makalemizden başlamanızı öneririz.

Yazı dizisi içindeki ilerleyişinizi kaydetmek için veya kayıt olun.

EA Akademi Hakkında Bilgi Al

Projenin Amacı

Bu yazıda sizlere bir makine öğrenmesi projesini aşama aşama, kodları ile birlikte açıklamaya çalışacağız. Projenin sonunda, tamamen rastgele üretilen ("random") sayıları kullanarak, farklı çizgi yüzleri (İng: "cartoon faces") üreten bir derin öğrenme modeline sahip olacaksınız. Bu modelin ürettiği sonuçları aşağıdaki görselde görebilirsiniz.

Derin Öğrenme Modeli Sonuçları
Derin Öğrenme Modeli Sonuçları

Temel Bilgi Gereksinimleri

Özellikle belirtmek isteriz ki bu yazıda yer alan kodlar başlangıç seviye yazılımcılar ve Makine Öğrenmesi hakkında en azından temel seviye bilgisi olmayanlar için uygun olmayabilir. Bunun için sizlere Stanford Üniversitesi Profesörü Andrew Ng tarafından hazırlanmış, tamamen ücretsiz bir şekilde alınabilen bu Coursera dersini tavsiye ederiz. Ayrıca kurs, Türkçe alt yazılı olduğu için İngilizce bilmiyorsanız bile takip edebilirsiniz.

Bu Reklamı Kapat

Projenin Temelleri

Projenin GitHub sayfasına buradan ulaşabilirsiniz. Ayrıca projede kullanacağımız yazılım ve kütüphaneler şu şekilde olacak:

  • TensorFlow 2.0.0b1
  • Python 3.6
  • numpy
  • pandas
TensorFlow Ne Yapar?
TensorFlow Ne Yapar?

Projenin Basamakları

1. Veri Seti İhtiyacı

İlk problemimiz, bir veri seti bulmak. Amacımız çizgi karakterler oluşturan bir derin öğrenme modeli yapmak olduğu için, ihtiyacımız olan şey de binlerce çizgi yüz. Bunun için küçük bir arama yaparsanız, Google tarafından yayınlanmış bu veris setini bulabilirsiniz. Bu veri setinde "etiketlenmiş" (yani saç rengi, göz rengi, ten rengi vs. açısından kategorize edilmiş) yüzler bulunmaktadır. Eğer ilgili olanlar varsa, bir üst seviye olan StyleGAN algoritmasını kullanarak daha keskin ve başarılı sonuçlar elde edebilirler.

Bu Reklamı Kapat

Veri seti yaklaşık olarak 4.45 GB, ayrıca etiketlenen özellikleri indirme sayfasının en altında da bulabilirsiniz.

Eğer veri setini indirip incelediyseniz, göreceksiniz ki her bir yüz için bir ".png" bir de ".csv" dosyası var. .png dosyasında yüz resmi, .csv dosyasında ise etiketlenmiş veriler bulunuyor.

2. Veri Setini İşlemek ve Veri Hattı ("Input Pipeline") Oluşturmak

Bu basamakta TensorFlow'un kendi "tf.data" özelliğini kullanacağız. Bu özellik sayesinde verilerimiz bilgisayardan (HDD'den veya SDD'den) okunurken, aynı zamanda GPU (Graphics Processing Unit) modelin eğitimi için gerekli olan matematiksel işlemleri yapacak. Bu da, zaman kaybı olmayacağı anlamına geliyor.

Evrim Ağacı'ndan Mesaj

Python ve TensorFlow 2.0 ile bunu uygulamak için, gerekli kütüphaneleri "import" ediyoruz:

import tensorflow as tf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from glob import glob
from tqdm import tqdm
tf.data çalışma mantığı
tf.data çalışma mantığı

Daha sonra veri işleme konusunda işlemleri yapacak bir sınıf oluşturuyoruz. Burada "sınıf temelli" bir programlama yapmayı daha çok tercih ediyoruz; siz eğer isterseniz daha farklı da yazabilirsiniz. Ayrıca sınıfımızın adını "Marshall" koyacağız. Bunun tek sebebi var: Programlama yaparken sınıflarımıza sevdiğimiz dizi karakterlerinin adını vermekten hoşlanıyor olmamız. Siz istediğiniz ismi seçebilirsiniz.

class Marshall:
def load_image(self, x):
img = tf.io.read_file(x)
img = tf.image.decode_png(img, channels=3)
if self.central_crop:
img = tf.image.central_crop(img, 0.825)
img = tf.image.resize(img, (self.xs, self.ys), method="nearest")

if self.random_flip:
img = tf.image.random_flip_left_right(img)

return tf.cast(img, tf.float32) / 255.

def __init__(self, main_path: str, image_shape: tuple, random_flip: bool = True, central_crop: bool = False):
self.main_path = main_path
self.xs, self.ys, self.channels = image_shape
self.random_flip = random_flip
self.central_crop = central_crop

self.x_data = self.read_all_path()
self.x_data = tf.convert_to_tensor(self.x_data)

self.dataset = tf.data.Dataset.from_tensor_slices(self.x_data).shuffle(len(self.x_data))
self.dataset = self.dataset.map(self.load_image)
self.dataset = self.dataset.prefetch(buffer_size=tf.data.experimental.AUTOTUNE)

def read_all_path(self):
paths = []

for path in tqdm(glob(f"{self.main_path.rstrip('/')}/*/*.png")):
paths.append(path)

paths = np.array(paths)

return paths

Küçük bir not: "__init__", sınıf çağrıldığında ilk çalışan fonksiyondur.

Bu sınıf ne yapıyor dersiniz? İlk başta, bazı değerleri "self" değişkenine atıyor, daha sonra "read_all_path" fonksiyonu ile bütün png dosyalarının adresleri bir listeye kaydediliyor. En son olarak bu liste bir tf.data objesine dönüştürülüyor ve ".map(self.load_image)" ifadesi ile listedeki her bir elemanın eğitilmeden önce bu fonksiyondan geçirilmesini sağlıyoruz. Çünkü biz listeye verileri resmin adresi şeklinde kaydettik, ihtiyacımız olan şey ise resmin kendisi... Bu fonksiyon da bunu yapıyor: Resmi okuyup, sayılara dönüştürüyor.

Kod yazma tarzımız, okuyucuya farklı gelmiş olabilir. Kafanızın karıştığı yerler olabilir. Bu, kodu yazandan yazana çok değişecektir. Ama kısaca şöyle düşünün: Bu sınıf, tüm resim adreslerini alıyor, bu resimleri okuyor ve model eğitimi için kullanılabilir bir hale getiriyor.

Bu Reklamı Kapat

Aranızda neden resim adresi okumak yerine en başta sadece resmi okumadık diye düşünenler olabilir, onu da şöyle açıklayalım: Eğer bütün resimleri okuyup bir listeye atasaydık, RAM'imiz bunların hepsini depolayamazdı. Tabii eğer bilgisayarınızın RAM'i çok yüksek ise bu bir sorun olmayabilir. Bu sorunla karşılaşmamak için, yazdığımız kod sadece belli sayıda resmi okuyor, onları işliyor, RAM'den siliyor ve daha sonra yeni resimler ile döngüyü tekrar ediyor. Böylece parça parça ve "RAM'imizi kasmadan" veriyi işleyebiliyoruz.

3. Derin Öğrenme Modeli Oluşturmak

Sıfırdan görüntü üretimi ile ilgili birçok farklı algoritma var; dolayısıyla yapmak istediğiniz işe göre tercihler değişiklik gösterebilir. Biz bu iş için "variational autoencoders" tekniğini kullanacağız.

Bu tekniğin detaylarını açıklamak için işin matematiğine inmek gerekiyor ve bu yazının amacını fazlasıyla aşar; belki ileride bu detaylara da girebiliriz. Eğer yapay zeka uygulamalarının temel matematiğini biliyorsanız, bu konuda bolca ve çok öğretici kaynaklar bulabilirsiniz. Eğer yeni başlayan bir kişiyseniz, işin matematiğine girip kafanızı allak bullak etmek istemeyiz; çünkü bunun için daha temel örnekler üzerinden anlatım yapılması daha doğru olur. Bu yöntemin ileri düzeyde teknik kısmı hem yazının başında önerdiğimiz Coursera dersinde, hem de TensorFlow'un buradaki yazısında anlatılıyor.

Şimdi bu modeli barındıran sınıfı tanımlayacağız. Bu defa sınıf ismimiz "Barney". Nedenini biliyorsunuz. Başlayalım:

Bu Reklamı Kapat

class Barney(tf.keras.Model):
def compute_output_signature(self, input_signature):
pass

def encoder_model(self, activation_function: tf.nn = tf.nn.elu, last_layer_activation: tf.nn = None):
input_layer = tf.keras.layers.Input(shape=(self.xs, self.ys, self.channels), name="input_1")

x = tf.keras.layers.Conv2D(32, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(input_layer)
x = tf.keras.layers.Dropout(0.25)(x)
x = tf.keras.layers.Conv2D(64, (3, 3), strides=2, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Conv2D(64, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.MaxPooling2D((3, 3), strides=2)(x)

x = tf.keras.layers.Conv2D(128, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Dropout(0.25)(x)
x = tf.keras.layers.Conv2D(256, (3, 3), strides=2, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Conv2D(256, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.MaxPooling2D((3, 3), strides=2)(x)

x = tf.keras.layers.Conv2D(256, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Dropout(0.25)(x)
x = tf.keras.layers.Conv2D(512, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)

x = tf.keras.layers.Flatten()(x)
x = tf.keras.layers.Dense(self.last_layer_units*2, activation=last_layer_activation,
kernel_regularizer=tf.keras.regularizers.l2())(x)

model = tf.keras.models.Model(input_layer, x)
model.summary()

return model

def decoder_model(self, activation_function: tf.nn = tf.nn.elu, last_layer_activation: tf.nn = None):
input_layer = tf.keras.layers.Input(
shape=(self.last_layer_units, ), name="input_2"
)

x = tf.keras.layers.Dense(512, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(input_layer)
x = tf.keras.layers.Reshape((1, 1, 512))(x)

x = tf.keras.layers.Conv2DTranspose(512, (3, 3), strides=2, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.UpSampling2D()(x)
x = tf.keras.layers.Conv2DTranspose(256, (3, 3), strides=1, activation=activation_function,
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Conv2DTranspose(256, (3, 3), strides=2, activation=activation_function, padding="same",
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Dropout(0.25)(x)
x = tf.keras.layers.Conv2DTranspose(128, (3, 3), strides=2, activation=activation_function, padding="same",
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.UpSampling2D()(x)
x = tf.keras.layers.Conv2DTranspose(64, (3, 3), strides=1, activation=activation_function, padding="same",
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Conv2DTranspose(64, (3, 3), strides=1, activation=activation_function, padding="same",
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Dropout(0.25)(x)
x = tf.keras.layers.Conv2DTranspose(32, (3, 3), strides=2, activation=activation_function, padding="same",
kernel_regularizer=tf.keras.regularizers.l2())(x)
x = tf.keras.layers.Conv2DTranspose(self.channels, (3, 3), strides=1, activation=last_layer_activation,
padding="same")(x)

model = tf.keras.models.Model(input_layer, x)
model.summary()

return model

def save_models(self):
self.encoder.save(self.file_path.replace(".h5", "_encoder.h5"))
self.decoder.save(self.file_path.replace(".h5", "_decoder.h5"))

def __init__(self, image_shape: tuple, file_path: str, last_layer_units: int = 1024, lr: float = 0.001):
super(Barney, self).__init__()
self.xs, self.ys, self.channels = image_shape
self.file_path = file_path

self.last_layer_units, self.lr = last_layer_units, lr

tf.compat.v1.gfile.MakeDirs("".join(self.file_path.split("/")[:-1]))

try:
self.encoder = tf.keras.models.load_model(self.file_path.replace(".h5", "_encoder.h5"),
custom_objects={"leaky_relu": tf.nn.leaky_relu})
except OSError:
self.encoder = self.encoder_model(
activation_function=tf.nn.leaky_relu,
last_layer_activation=None
)

try:
self.decoder = tf.keras.models.load_model(self.file_path.replace(".h5", "_decoder.h5"),
custom_objects={"leaky_relu": tf.nn.leaky_relu})
except OSError:
self.decoder = self.decoder_model(
activation_function=tf.nn.leaky_relu,
last_layer_activation=None
)

self.optimizer = tf.keras.optimizers.Adam(self.lr, beta_1=0.5)

def encode(self, x: tf.Tensor):
mean, logvar = tf.split(self.encoder(x, training=True), num_or_size_splits=2, axis=1)
return mean, logvar

def decode(self, z: tf.Tensor, apply_sigmoid: bool = False):
logits = self.decoder(z, training=True)
if apply_sigmoid:
logits = tf.sigmoid(logits)

return logits

@staticmethod
def reparameterize(mean: tf.Tensor, logvar: float):
return tf.random.normal(shape=mean.shape) * tf.exp(logvar * .5) + mean

def generate_sample(self, eps: tf.Tensor):
return self.decode(eps, apply_sigmoid=True)

@staticmethod
def log_normal_pdf(sample: float, mean: float, logvar: float, raxis: float = 1):
return tf.reduce_sum(-.5 * ((sample - mean) ** 2. * tf.exp(-logvar) + logvar + 1.837877), axis=raxis)

@tf.function
def compute_loss(self, x: tf.Tensor):
mean, logvar = self.encode(x)
z = self.reparameterize(mean, logvar)
x_logit = self.decode(z)

cross_ent = tf.nn.sigmoid_cross_entropy_with_logits(logits=x_logit, labels=x)
logpx_z = -tf.reduce_sum(cross_ent, axis=[1, 2, 3])
logpz = self.log_normal_pdf(z, 0., 0.)
logqz_x = self.log_normal_pdf(z, mean, logvar)

return -tf.reduce_mean(logpx_z + logpz - logqz_x), x_logit

@tf.function
def train_step(self, x: tf.Tensor):
with tf.GradientTape() as tape:
loss, outputs = self.compute_loss(x)

gradients = tape.gradient(loss, self.trainable_variables)
self.optimizer.apply_gradients(zip(gradients, self.trainable_variables))

return loss, outputs

Bu sınıfta epey bir fonksiyon olduğunu görebilirsiniz. Örnek olması açısından sadece "train_step" fonksiyonunu açıklayacağız, çünkü diğer fonksiyonların arkasında çok büyük ve büyüleyici bir matematik yatıyor. Yukarıda sözünü ettiğimiz nedenlerle bunun detaylarını tek bir makaleye sığdırmak imkansız ve çok yorucu olurdu.

"train_step" fonksiyonu, "loss" dediğimiz ve ne anlama geldiğini birazdan açıklayacağımız değeri hesaplıyor ve tüm modeldeki sayısal değerleri bu loss (kayıp) değerine göre yeniden düzenliyor ve optimize ediyor. Bu işin arka planında da yine büyüleyici bir matematik var. Coursera dersini alarak bunu öğrenebilirsiniz.

Peki nedir bu "loss" değeri? Çok basitleştirilmiş bir şekilde anlatacak olursak: Diyelim ki bir resmin kedi veya köpek olduğunu söyleyen bir makine öğrenmesi projesi yapıyorsunuz. Modeli oluşturdunuz ve bu model 0-1 arasında bir sayı değeri veriyor ("output ediyor"). 0 kedi, 1 de köpek demek. Senaryomuzda, model "0.2" tahmin ediyor, yani kedi. Doğrusu da kedi, yani 0. Loss burada 0.2 oluyor, çünkü gerçek değer ile tahmin edilen değer arasında 0.2'lik bir fark var. Tabii bu loss fonksiyonları çok daha ileri matematikle yapılıyor ve çok fazla türü var: Merak edenler MSE, MAE, Binary, Sparse Categorical Crossentropy vb. algoritmalara göz atabilirler.

İlgilisine ek not düşecek olursak: Model, sonuç değerini 0 ve 1 arasına sıkıştırmak için sigmoid fonksiyonu denen bir fonksiyon kullanıyor ve aktivasyon fonksiyonları kullanıyor. Bu fonksiyonlar modeldeki sayısal değerleri girdi ("input") alarak bir çıktı ("output") üretiyor ve eski sayısal değerler bu yeni çıktılar ile döngüye devam ediyor. Fonksiyonlar ve grafikleri:

Bu Reklamı Kapat

Agora Bilim Pazarı
Hav
  • Hav // Jan Morris

    Ursula K. Le Guin’in Önsözüyle

     

    Hav kurmaca bir şehir devleti, bir Akdeniz şehri, sokaklarında Türkçenin, Ermenicenin, Rumcanın, Arapçanın, Rusçanın, İtalyancanın bir arada duyulduğu bir coğrafya. Yirmi yıl arayla bu coğrafyaya giden bir seyyah yazar, şehrin iki yakın dönemi arasındaki siyasi, kültürel, yaşamsal doku değişimlerini nefis bir dille anlatıyor.

    Önce 1985 yılının Hav’ını tanımaya başlıyoruz, sonra bir “Müdahale” oluyor, altüst oluyor şehir, yirmi yılın ardından aynı yere dönüyoruz, yirmi birinci yüzyılın Yeni Hav’ına, Kutsal Mirmidon Cumhuriyeti’ne. Eskisinin izini sürmeye çalışsak da zorlanıyoruz, şehrin tarihini bağnaz bir bakışla baştan yazanların eliyle görgüsüzlüğün tüm şehirde itinayla teşhir edildiğini görüyoruz.

    Hav hibrit edebiyatın usta bir örneği, seyahat edebiyatıyla bilimkurguyu bir araya getiriyor. Hav diye bir şehir yok ama pekâlâ olabilir.

    Hav, tüm Akdeniz tarihinin, âdetlerinin ve politikasının birkaç bin yılına tutulmuş bir ayna gibi… Suudi Arabistan, Türkiye veya Downing Street’in geçmişine ve mevcut haline gerçekten vâkıf, son derece gerçekçi, kesinlikle gözleme dayanan bir eser. Ciddi bilimkurgu eserleri hayal ürünlerinin değil bir gerçekçiliğin biçemidir; Hav alternatif bir coğrafyanın ne kadar kullanışlı olabileceğine mükemmel bir örnek. Eğer bilimkurguyu bilmedikleri nispetle küçük gören üstatların ahmakça züppelikleri aklınızı çelip de Hav’a sırtınızı çevirirseniz hem yazık olur hem de çok büyük bir kayıp.”

    Ursula K. Le Guin

Bu kampanya, Kolektif Kitap tarafından Evrim Ağacı okurlarına sunulan fırsatlardan birisidir.

Devamını Göster
₺62.00
Hav

Aktivasyon Fonksiyonları
Aktivasyon Fonksiyonları

Ve yine ilgilisine ek bir diğer not düşersek: Sonucu resim olarak almak istediğimizde de "sigmoid" aktivasyon fonksiyonu kullanıyoruz. Çünkü resimler 0-255 arasındaki sayı değerleridir ve makine öğrenmesinde resimler işlenirken genelde 255'e bölünür, bu da onları 0-1 arasına sıkıştırır.

4. Model Eğitimi

İşte bu son aşama. Burada, 3. aşamada oluşturduğumuz derin öğrenme modelini, 2. aşamada oluşturduğumuz veri hattından alacağımız verilerle eğiteceğiz.

Bunun için veriyi alacak, modele gönderecek, loss değerindeki değişimi ve üretilen resimleri kaydedecek/grafikleyecek bir sınıfa ihtiyacımız var. İsmi "Robin":

class Robin:
def __init__(self, marshall_pipeline: Marshall, barney_model: Barney, epochs: int = 10, batch_size: int = 32):
self.marshall_data = marshall_pipeline
self.barney_model = barney_model
self.batch_size, self.epochs = batch_size, epochs

self.file_writer = tf.summary.create_file_writer("graphs/")
self.marshall_data.dataset = self.marshall_data.dataset.batch(self.batch_size)

def save_images_to_tensorboard(self, epoch: int, real_ex: tf.Tensor, regenerated_ex: tf.Tensor):
samples_from_random = self.barney_model.generate_sample(tf.random.normal(
shape=(self.batch_size, self.barney_model.last_layer_units,)
))

with tf.device("/cpu:0"):
with self.file_writer.as_default():
tf.summary.image("real images", real_ex.numpy(), step=epoch, max_outputs=self.batch_size,
description="real images, no effect from Barney!")

tf.summary.image("regenerated images", regenerated_ex.numpy(), step=epoch, max_outputs=self.batch_size,
description="regenerated images, encoded and decoded by Barney!")

tf.summary.image("decoded images", samples_from_random.numpy(), step=epoch, max_outputs=self.batch_size,
description="decoded images, generated from random bottleneck, decoded by Barney!")

def train_model(self):
x = regenerated_images = None
q = int(tf.data.experimental.cardinality(self.marshall_data.dataset))

for epoch in range(self.epochs):
bar = tf.keras.utils.Progbar(target=q)

for i, x in enumerate(self.marshall_data.dataset):
loss_value, regenerated_images = self.barney_model.train_step(x=x)

with self.file_writer.as_default():
tf.summary.scalar("loss", loss_value, step=(q*epoch)+i, description="Barney's Loss")

bar.update(current=int(i+1), values=[["loss", loss_value]])

self.save_images_to_tensorboard(
epoch=epoch,
real_ex=x,
regenerated_ex=regenerated_images
)

self.barney_model.save_models()

def generate_random_images(self, number_of_images: int = 100):
samples_from_random = self.barney_model.generate_sample(tf.random.normal(
shape=(number_of_images, self.barney_model.last_layer_units,)
))

c = r = int(tf.sqrt(float(number_of_images)).numpy())
fig = plt.figure(figsize=(64, 64))

for i in range(int(c*r)):
fig.add_subplot(r, c, i+1)
plt.axis("off")
plt.imshow(samples_from_random[i])

plt.savefig("results.png")
plt.show()

Burada olan biteni kısaca açıklayacak olursak: Eğitimi, tahmin edildiği üzere "train_model" fonksiyonu yapıyor. Veri hattından ("Marshall" sınıfı ile tanımladığımızı hatırlayın) veriyi alıyor, daha sonra bunu modele veriyor, loss fonksiyonunu hesaplayıp sayısal değerleri düzenliyor (bunu da Barney sınıfı ile tanımladık).

Belki bu iki satır dikkatinizi çekmiş olabilir:

with self.file_writer.as_default():
tf.summary.scalar("loss", loss_value, step=(q*epoch)+i, description="Barney's Loss")

Burada yaptığımız, loss değerindeki değişimi bir grafiğe çizmek, bunu da yine TensorFlow ile gelen TensorBoard kütüphanesi ile yapıyoruz.

"save_images_to_tensorboard" fonksiyonu da gerçek resimleri ve random sayılarla üretilen resimleri TensorBoard'a kaydediyor.

Şimdi Sıra Eğitimde!

Başlayalım:

marshall = Marshall(
main_path="cartoonset100k",
image_shape=(128, 128, 3),
random_flip=False,
central_crop=True
)

barney = Barney(
image_shape=(128, 128, 3),
file_path="models/my_model.h5",
last_layer_units=1024,
lr=0.0001
)

robin = Robin(
marshall_pipeline=marshall,
barney_model=barney,
epochs=10,
batch_size=32,
)

robin.train_model()

Bu kod bloğunda, sırayla tüm sınıfları oluşuyor, en sonunda eğitici sınıfta birleşip eğitimi yapıyorlar.

Sonuç

Eğer makine öğrenmesi alanında tecrübeniz yoksa bu anlatımda boş kalan çok fazla yer olmuştur. Daha fazla temel bilgi için başta verdiğimiz kursa göz atmanızı önemle öneriyoruz.

Dünya değişiyor, biz değişiyoruz, makineler değişiyor. Bunun bir parçası olmak çok heyecan verici, herkesin tatması gereken bir şey bu. Ayrıca bu alan her yere yayılmakta. Canlıyı, DNA yapısını ve onunla ilgili her şeyi Yapay Zeka yardımı ile anlayıp, insan-bilgisayar arayüzleri üretmek isteyen çok sayıda start-up var. Fiziği, hatta tarihi bile AI ile anlamlandırmaya çalışan projeler mevcut!

Okundu Olarak İşaretle

Bu içeriğimizle ilgili bir sorunuz mu var? Buraya tıklayarak sorabilirsiniz.

Soru & Cevap Platformuna Git
Bu İçerik Size Ne Hissettirdi?
  • Tebrikler! 10
  • Muhteşem! 4
  • Bilim Budur! 3
  • Merak Uyandırıcı! 3
  • Umut Verici! 2
  • Mmm... Çok sapyoseksüel! 0
  • Güldürdü 0
  • İnanılmaz 0
  • Üzücü! 0
  • Grrr... *@$# 0
  • İğrenç! 0
  • Korkutucu! 0
Evrim Ağacı Akademi: Yapay Zekaya Giriş Yazı Dizisi

Bu yazı, Yapay Zekaya Giriş yazı dizisinin 6. yazısıdır. Bu yazı dizisini okumaya, serinin 1. yazısı olan "Yapay Zeka Hakkında Bir Rehber: Nedir, Ne Değildir, Ne Olacaktır?" başlıklı makalemizden başlamanızı öneririz.

Yazı dizisi içindeki ilerleyişinizi kaydetmek için veya kayıt olun.

EA Akademi Hakkında Bilgi Al
Bu Reklamı Kapat

Evrim Ağacı'na her ay sadece 1 kahve ısmarlayarak destek olmak ister misiniz?

Şu iki siteden birini kullanarak şimdi destek olabilirsiniz:

kreosus.com/evrimagaci | patreon.com/evrimagaci

Çıktı Bilgisi: Bu sayfa, Evrim Ağacı yazdırma aracı kullanılarak 06/10/2022 06:55:04 tarihinde oluşturulmuştur. Evrim Ağacı'ndaki içeriklerin tamamı, birden fazla editör tarafından, durmaksızın elden geçirilmekte, güncellenmekte ve geliştirilmektedir. Dolayısıyla bu çıktının alındığı tarihten sonra yapılan güncellemeleri görmek ve bu içeriğin en güncel halini okumak için lütfen şu adrese gidiniz: https://evrimagaci.org/s/7994

İçerik Kullanım İzinleri: Evrim Ağacı'ndaki yazılı içerikler orijinallerine hiçbir şekilde dokunulmadığı müddetçe izin alınmaksızın paylaşılabilir, kopyalanabilir, yapıştırılabilir, çoğaltılabilir, basılabilir, dağıtılabilir, yayılabilir, alıntılanabilir. Ancak bu içeriklerin hiçbiri izin alınmaksızın değiştirilemez ve değiştirilmiş halleri Evrim Ağacı'na aitmiş gibi sunulamaz. Benzer şekilde, içeriklerin hiçbiri, söz konusu içeriğin açıkça belirtilmiş yazarlarından ve Evrim Ağacı'ndan başkasına aitmiş gibi sunulamaz. Bu sayfa izin alınmaksızın düzenlenemez, Evrim Ağacı logosu, yazar/editör bilgileri ve içeriğin diğer kısımları izin alınmaksızın değiştirilemez veya kaldırılamaz.

Bu Reklamı Kapat
Size Özel (Beta)
İçerikler
Sosyal
Gönderiler
Komplo Teorisi
Çocuklar İçin Bilim
Toprak
Vegan
Biyoçeşitlilik
Türkiye
İfade
Balık Çeşitliliği
Virüs
Taklit
Ölüm
Tardigrad
Genom
Cinsiyet Araştırmaları
Kilo
Su Ayısı
Dalga
Elektrokimya
Stres
Seçilim
Zooloji
Uçuş
Evrimsel Antropoloji
Hominidae
İklim Değişikliği
Aklımdan Geçen
Komünite Seç
Aklımdan Geçen
Fark Ettim ki...
Bugün Öğrendim ki...
İşe Yarar İpucu
Bilim Haberleri
Hikaye Fikri
Başlık
Bugün Türkiye'de bilime ve bilim okuryazarlığına neler katacaksın?
Bağlantı
Kurallar
Komünite Kuralları
Bu komünite, aklınızdan geçen düşünceleri Evrim Ağacı ailesiyle paylaşabilmeniz içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Bilim kimliğinizi önceleyin.
Evrim Ağacı bir bilim platformudur. Dolayısıyla aklınızdan geçen her şeyden ziyade, bilim veya yaşamla ilgili olabilecek düşüncelerinizle ilgileniyoruz.
2
Propaganda ve baskı amaçlı kullanmayın.
Herkesin aklından her şey geçebilir; fakat bu platformun amacı, insanların belli ideolojiler için propaganda yapmaları veya başkaları üzerinde baskı kurma amacıyla geliştirilmemiştir. Paylaştığınız fikirlerin değer kattığından emin olun.
3
Gerilim yaratmayın.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
4
Değer katın; hassas konulardan ve öznel yoruma açık alanlardan uzak durun.
Bu komünitenin amacı okurlara hayatla ilgili keyifli farkındalıklar yaşatabilmektir. Din, politika, spor, aktüel konular gibi anlık tepkilere neden olabilecek konulardaki tespitlerden kaçının. Ayrıca aklınızdan geçenlerin Türkiye’deki bilim komünitesine değer katması beklenmektedir.
5
Cevap hakkı doğurmayın.
Bu platformda cevap veya yorum sistemi bulunmamaktadır. Dolayısıyla aklınızdan geçenlerin, tespit edilebilir kişilere cevap hakkı doğurmadığından emin olun.
Gönder
Ekle
Soru Sor
Daha Fazla İçerik Göster
Evrim Ağacı'na Destek Ol
Evrim Ağacı'nın %100 okur destekli bir bilim platformu olduğunu biliyor muydunuz? Evrim Ağacı'nın maddi destekçileri arasına katılarak Türkiye'de bilimin yayılmasına güç katmak için hemen buraya tıklayın.
Popüler Yazılar
30 gün
90 gün
1 yıl
EA Akademi
Evrim Ağacı Akademi (ya da kısaca EA Akademi), 2010 yılından beri ürettiğimiz makalelerden oluşan ve kendi kendinizi bilimin çeşitli dallarında eğitebileceğiniz bir çevirim içi eğitim girişimi! Evrim Ağacı Akademi'yi buraya tıklayarak görebilirsiniz. Daha fazla bilgi için buraya tıklayın.
Etkinlik & İlan
Bilim ile ilgili bir etkinlik mi düzenliyorsunuz? Yoksa bilim insanlarını veya bilimseverleri ilgilendiren bir iş, staj, çalıştay, makale çağrısı vb. bir duyurunuz mu var? Etkinlik & İlan Platformumuzda paylaşın, milyonlarca bilimsevere ulaşsın.
Podcast
Evrim Ağacı'nın birçok içeriğinin profesyonel ses sanatçıları tarafından seslendirildiğini biliyor muydunuz? Bunların hepsini Podcast Platformumuzda dinleyebilirsiniz. Ayrıca Spotify, iTunes, Google Podcast ve YouTube bağlantılarını da bir arada bulabilirsiniz.
Yazı Geçmişi
Okuma Geçmişi
Notlarım
İlerleme Durumunu Güncelle
Okudum
Sonra Oku
Not Ekle
Kaldığım Yeri İşaretle
Göz Attım

Evrim Ağacı tarafından otomatik olarak takip edilen işlemleri istediğin zaman durdurabilirsin.
[Site ayalarına git...]

Filtrele
Listele
Bu yazıdaki hareketlerin
Devamını Göster
Filtrele
Listele
Tüm Okuma Geçmişin
Devamını Göster
0/10000

Göster

Şifremi unuttum Üyelik Aktivasyonu

Göster

Şifrenizi mi unuttunuz? Lütfen e-posta adresinizi giriniz. E-posta adresinize şifrenizi sıfırlamak için bir bağlantı gönderilecektir.

Geri dön

Eğer aktivasyon kodunu almadıysanız lütfen e-posta adresinizi giriniz. Üyeliğinizi aktive etmek için e-posta adresinize bir bağlantı gönderilecektir.

Geri dön

Close
Geri Bildirim Gönder
Paylaş
Reklamsız Deneyim

Evrim Ağacı'nda reklamları 2 şekilde kapatabilirsiniz:

  1. Ücretsiz üye girişi yapmak: Sitedeki reklamların %50 kadarını kapatmak için ücretsiz bir Evrim Ağacı üyeliği açmanız ve sitemizi/uygulamamızı kullanmanız yeterli!

  2. Maddi destekçilerimiz arasına katılmak: Evrim Ağacı'nın çalışmalarına Kreosus, Patreon veya YouTube üzerinden maddi destekte bulunarak hem Türkiye'de bilim anlatıcılığının gelişmesine katkı sağlayabilirsiniz, hem de site ve uygulamamızı reklamsız olarak deneyimleyebilirsiniz. Reklamsız deneyim, sitemizin/uygulamamızın çeşitli kısımlarda gösterilen Google reklamlarını ve destek çağrılarını görmediğiniz, %100 reklamsız ve çok daha temiz bir site deneyimi sunmaktadır.

Kreosus

Kreosus'ta her 10₺'lik destek, 1 aylık reklamsız deneyime karşılık geliyor. Bu sayede, tek seferlik destekçilerimiz de, aylık destekçilerimiz de toplam destekleriyle doğru orantılı bir süre boyunca reklamsız deneyim elde edebiliyorlar.

Kreosus destekçilerimizin reklamsız deneyimi, destek olmaya başladıkları anda devreye girmektedir ve ek bir işleme gerek yoktur.

Patreon

Patreon destekçilerimiz, destek miktarından bağımsız olarak, Evrim Ağacı'na destek oldukları süre boyunca reklamsız deneyime erişmeyi sürdürebiliyorlar.

Patreon destekçilerimizin Patreon ile ilişkili e-posta hesapları, Evrim Ağacı'ndaki üyelik e-postaları ile birebir aynı olmalıdır. Patreon destekçilerimizin reklamsız deneyiminin devreye girmesi 24 saat alabilmektedir.

YouTube

YouTube destekçilerimizin hepsi otomatik olarak reklamsız deneyime şimdilik erişemiyorlar ve şu anda, YouTube üzerinden her destek seviyesine reklamsız deneyim ayrıcalığını sunamamaktayız. YouTube Destek Sistemi üzerinde sunulan farklı seviyelerin açıklamalarını okuyarak, hangi ayrıcalıklara erişebileceğinizi öğrenebilirsiniz.

Eğer seçtiğiniz seviye reklamsız deneyim ayrıcalığı sunuyorsa, destek olduktan sonra YouTube tarafından gösterilecek olan bağlantıdaki formu doldurarak reklamsız deneyime erişebilirsiniz. YouTube destekçilerimizin reklamsız deneyiminin devreye girmesi, formu doldurduktan sonra 24-72 saat alabilmektedir.

Diğer Platformlar

Bu 3 platform haricinde destek olan destekçilerimize ne yazık ki reklamsız deneyim ayrıcalığını sunamamaktayız. Destekleriniz sayesinde sistemlerimizi geliştirmeyi sürdürüyoruz ve umuyoruz bu ayrıcalıkları zamanla genişletebileceğiz.

Giriş yapmayı unutmayın!

Reklamsız deneyim için, maddi desteğiniz ile ilişkilendirilmiş olan Evrim Ağacı hesabınıza yapmanız gerekmektedir. Giriş yapmadığınız takdirde reklamları görmeye devam edeceksinizdir.

Destek Ol

Devamını Oku
Evrim Ağacı Uygulamasını
İndir
Chromium Tabanlı Mobil Tarayıcılar (Chrome, Edge, Brave vb.)
İlk birkaç girişinizde zaten tarayıcınız size uygulamamızı indirmeyi önerecek. Önerideki tuşa tıklayarak uygulamamızı kurabilirsiniz. Bu öneriyi, yukarıdaki videoda görebilirsiniz. Eğer bu öneri artık gözükmüyorsa, Ayarlar/Seçenekler (⋮) ikonuna tıklayıp, Uygulamayı Yükle seçeneğini kullanabilirsiniz.
Chromium Tabanlı Masaüstü Tarayıcılar (Chrome, Edge, Brave vb.)
Yeni uygulamamızı kurmak için tarayıcı çubuğundaki kurulum tuşuna tıklayın. "Yükle" (Install) tuşuna basarak kurulumu tamamlayın. Dilerseniz, Evrim Ağacı İleri Web Uygulaması'nı görev çubuğunuza sabitleyin. Uygulama logosuna sağ tıklayıp, "Görev Çubuğuna Sabitle" seçeneğine tıklayabilirsiniz. Eğer bu seçenek gözükmüyorsa, tarayıcının Ayarlar/Seçenekler (⋮) ikonuna tıklayıp, Uygulamayı Yükle seçeneğini kullanabilirsiniz.
Safari Mobil Uygulama
Sırasıyla Paylaş -> Ana Ekrana Ekle -> Ekle tuşlarına basarak yeni mobil uygulamamızı kurabilirsiniz. Bu basamakları görmek için yukarıdaki videoyu izleyebilirsiniz.

Daha fazla bilgi almak için tıklayın

Önizleme
Görseli Kaydet
Sıfırla
Vazgeç
Ara
Raporla

Raporlama sisteminin amacı, platformu uygunsuz biçimde kullananların önüne geçmektir. Lütfen bir içeriği, sadece düşük kaliteli olduğunu veya soruya cevap olmadığını düşündüğünüz raporlamayınız; bu raporlar kabul edilmeyecektir. Bunun yerine daha kaliteli cevapları kendiniz girmeye çalışın veya diğer kullanıcıları oylama, teşekkür ve en iyi cevap araçları ile daha kaliteli cevaplara teşvik edin. Kalitesiz bulduğunuz içerikleri eleyebileceğiniz, kalitelileri daha ön plana çıkarabileceğiniz yeni araçlar geliştirmekteyiz.

Soru Sor
Aşağıdaki "Soru" kutusunu sadece soru sormak için kullanınız. Bu kutuya soru formatında olmayan hiçbir cümle girmeyiniz. Sorunuzla ilgili ek bilgiler vermek isterseniz, "Açıklama" kısmına girebilirsiniz. Soru kısmının soru cümlesi haricindeki kullanımları sorunuzun silinmesine ve UP kaybetmenize neden olabilir.
Görsel Ekle
Kurallar
Platform Kuralları
Bu platform, aklınıza takılan soruları sorabilmeniz ve diğerlerinin sorularını yanıtlayabilmeniz içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu platformun ek kurallarına da uymanız gerekmektedir.
1
Gerçekten soru sorun, imâdan ve yüklü sorulardan kaçının.
Sorularınızın amacı nesnel olarak gerçeği öğrenmek veya fikir almak olmalıdır. Şahsi kanaatinizle ilgili mesaj vermek için kullanmayın; yüklü soru sormayın.
2
Bilim kimliğinizi kullanın.
Evrim Ağacı bir bilim platformudur. Dolayısıyla sorular ve cevaplar, bilimsel perspektifi yansıtmalıdır. Geçerli bilimsel kaynaklarla doğrulanamayan bilgiler veya reklamlar silinebilir.
3
Düzgün ve insanca iletişim kurun.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
4
Sahtebilimi desteklemek yasaktır.
Sahtebilim kategorisi altında konuyla ilgili sorular sorabilirsiniz; ancak bilimsel geçerliliği bulunmayan sahtebilim konularını destekleyen sorular veya cevaplar paylaşmayın.
5
Türkçeyi düzgün kullanın.
Şair olmanızı beklemiyoruz; ancak yazdığınız içeriğin anlaşılır olması ve temel düzeyde yazım ve dil bilgisi kurallarına uyması gerekmektedir.
Soru Ara
Aradığınız soruyu bulamadıysanız buraya tıklayarak sorabilirsiniz.
Alıntı Ekle
Eser Ekle
Kurallar
Komünite Kuralları
Bu komünite, fark edildiğinde ufku genişleten tespitler içindir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Formu olabildiğince eksiksiz doldurun.
Girdiğiniz sözün/alıntının kaynağı ne kadar açıksa o kadar iyi. Açıklama kısmına kitabın sayfa sayısını veya filmin saat/dakika/saniye bilgisini girebilirsiniz.
2
Anonimden kaçının.
Bazı sözler/alıntılar anonim olabilir. Fakat sözün anonimliğini doğrulamaksızın, bilmediğiniz her söze/alıntıya anonim yazmayın. Bu tür girdiler silinebilir.
3
Kaynağı araştırın ve sorgulayın.
Sayısız söz/alıntı, gerçekte o sözü hiçbir zaman söylememiş/yazmamış kişilere, hatalı bir şekilde atfediliyor. Paylaşımınızın site geneline yayılabilmesi için kaliteli kaynaklar kullanın ve kaynaklarınızı sorgulayın.
4
Ofansif ve entelektüel düşünceden uzak sözler yasaktır.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
5
Sözlerinizi tırnak (") içine almayın.
Sistemimiz formatı otomatik olarak ayarlayacaktır.
Gönder
Tavsiye Et
Aşağıdaki kutuya, [ESER ADI] isimli [KİTABI/FİLMİ] neden tavsiye ettiğini girebilirsin. Ne kadar detaylı ve kapsamlı bir analiz yaparsan, bu eseri [OKUMAK/İZLEMEK] isteyenleri o kadar doğru ve fazla bilgilendirmiş olacaksın. Tavsiyenin sadece negatif içerikte olamayacağını, eğer bu sistemi kullanıyorsan tavsiye ettiğin içeriğin pozitif taraflarından bahsetmek zorunda olduğunu lütfen unutma. Yapıcı eleştiri hakkında daha fazla bilgi almak için burayı okuyabilirsin.
Kurallar
Platform Kuralları
Bu platform; okuduğunuz kitaplara, izlediğiniz filmlere/belgesellere veya takip ettiğiniz YouTube kanallarına yönelik tavsiylerinizi ve/veya yapıcı eleştirel fikirlerinizi girebilmeniz içindir. Tavsiye etmek istediğiniz eseri bulamazsanız, buradan yeni bir kayıt oluşturabilirsiniz. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu platformun ek kurallarına da uymanız gerekmektedir.
1
Önceliğimiz pozitif tavsiyelerdir.
Bu platformu, beğenmediğiniz eserleri yermek için değil, beğendiğiniz eserleri başkalarına tanıtmak için kullanmaya öncelik veriniz. Sadece negatif girdileri olduğu tespit edilenler platformdan geçici veya kalıcı olarak engellenebilirler.
2
Tavsiyenizin içeriği sadece negatif olamaz.
Tavsiye yazdığınız eserleri olabildiğince objektif bir gözlükle anlatmanız beklenmektedir. Dolayısıyla bir eseri beğenmediyseniz bile, tavsiyenizde eserin pozitif taraflarından da bahsetmeniz gerekmektedir.
3
Negatif eleştiriler yapıcı olmak zorundadır.
Eğer tavsiyenizin ana tonu negatif olacaksa, tüm eleştirileriniz yapıcı nitelikte olmak zorundadır. Yapıcı eleştiri kurallarını buradan öğrenebilirsiniz. Yapıcı bir tarafı olmayan veya tamamen yıkıcı içerikte olan eleştiriler silinebilir ve yazarlar geçici veya kalıcı olarak engellenebilirler.
4
Düzgün ve insanca iletişim kurun.
Gerilim, tersleme, tahrik, taciz, alay, dedikodu, trollük, vurdumduymazlık, duyarsızlık, ırkçılık, bağnazlık, nefret söylemi, azınlıklara saldırı, fanatizm, holiganlık, sloganlar yasaktır.
5
Türkçeyi düzgün kullanın.
Şair olmanızı beklemiyoruz; ancak yazdığınız içeriğin anlaşılır olması ve temel düzeyde yazım ve dil bilgisi kurallarına uyması gerekmektedir.
Eser Ara
Aradığınız eseri bulamadıysanız buraya tıklayarak ekleyebilirsiniz.
Tür Ekle
Üst Takson Seç
Kurallar
Komünite Kuralları
Bu platform, yaşamış ve yaşayan bütün türleri filogenetik olarak sınıflandırdığımız ve tanıttığımız Yaşam Ağacı projemize, henüz girilmemiş taksonları girebilmeniz için geliştirdiğimiz bir platformdur. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Takson adlarını doğru yazdığınızdan emin olun.
Taksonların sadece ilk harfleri büyük yazılmalıdır. Latince tür adlarında, cins adının ilk harfi büyük, diğer bütün harfler küçük olmalıdır (Örn: Canis lupus domesticus). Türkçe adlarda da sadece ilk harf büyük yazılmalıdır (Örn: Evcil köpek).
2
Taksonlar arası bağlantıları doğru girin.
Girdiğiniz taksonun üst taksonunu girmeniz zorunludur. Eğer üst takson yoksa, mümkün olduğunca öncelikle üst taksonları girmeye çalışın; sonrasında daha alt taksonları girin.
3
Birden fazla kaynaktan kontrol edin.
Mümkün olduğunca ezbere iş yapmayın, girdiğiniz taksonların isimlerinin birden fazla kaynaktan kontrol edin. Alternatif (sinonim) takson adlarını girmeyi unutmayın.
4
Tekrara düşmeyin.
Aynı taksonu birden fazla defa girmediğinizden emin olun. Otomatik tamamlama sistemimiz size bu konuda yardımcı olacaktır.
5
Mümkünse, takson tanıtım yazısı (Taksonomi yazısı) girin.
Bu araç sadece taksonları sisteme girmek için geliştirilmiştir. Dolayısıyla taksonlara ait minimal bilgiye yer vermektedir. Evrim Ağacı olarak amacımız, taksonlara dair detaylı girdilerle bu projeyi zenginleştirmektir. Girdiğiniz türü daha kapsamlı tanıtmak için Taksonomi yazısı girin.
Gönder
Tür Gözlemi Ekle
Tür Seç
Fotoğraf Ekle
Kurallar
Komünite Kuralları
Bu platform, bizzat gözlediğiniz türlerin fotoğraflarını paylaşabilmeniz için geliştirilmiştir. Yapacağınız paylaşımlar Evrim Ağacı'nın kurallarına tabidir. Ayrıca bu komünitenin ek kurallarına da uymanız gerekmektedir.
1
Net ve anlaşılır görseller yükleyin.
Her zaman bir türü kusursuz netlikte fotoğraflamanız mümkün olmayabilir; ancak buraya yüklediğiniz fotoğraflardaki türlerin özellikle de vücut deseni gibi özelliklerinin rahatlıkla ayırt edilecek kadar net olması gerekmektedir.
2
Özgün olun, telif ihlali yapmayın.
Yüklediğiniz fotoğrafların telif hakları size ait olmalıdır. Başkası tarafından çekilen fotoğrafları yükleyemezsiniz. Wikimedia gibi açık kaynak organizasyonlarda yayınlanan telifsiz fotoğrafları yükleyebilirsiniz.
3
Paylaştığınız fotoğrafların telif hakkını isteyemezsiniz.
Yüklediğiniz fotoğraflar tamamen halka açık bir şekilde, sınırsız ve süresiz kullanım izniyle paylaşılacaktır. Bu fotoğraflar nedeniyle Evrim Ağacı’ndan telif veya ödeme talep etmeniz mümkün olmayacaktır. Kendi fotoğraflarınızı başka yerlerde istediğiniz gibi kullanabilirsiniz.
4
Etik kurallarına uyun.
Yüklediğiniz fotoğrafların uygunsuz olmadığından ve başkalarının haklarını ihlâl etmediğinden emin olun.
5
Takson teşhisini doğru yapın.
Yaptığınız gözlemler, spesifik taksonlarla ilişkilendirilmektedir. Takson teşhisini doğru yapmanız beklenmektedir. Taksonu bilemediğinizde, olabildiğince genel bir taksonla ilişkilendirin; örneğin türü bilmiyorsanız cins ile, cinsi bilmiyorsanız aile ile, aileyi bilmiyorsanız takım ile, vs.
Gönder
Tür Ara
Aradığınız türü bulamadıysanız buraya tıklayarak ekleyebilirsiniz.