{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"import cv2\nimport numpy as np\nimport os\nfrom random import shuffle\nfrom tqdm import tqdm\nimport tensorflow as tf\nimport matplotlib.pyplot as plt\nimport tflearn\nfrom tflearn.layers.conv import conv_2d, max_pool_2d\nfrom tflearn.layers.core import input_data, dropout, fully_connected\nfrom tflearn.layers.estimator import regression\n\nEGITIM_KLASORU = \"../input/train/train\"\nTEST_KLASORU = \"../input/train/test1\"\nRESIM_BOYUTU = 50\nOGRENME_ORANI = 1e-3\nMODEL_ADI = 'kedi-kopek-ayirici'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# fonksiyon dosya adı \"cat\" ise [1 0], \"dog\" ise [0 1] çıkışını verir.\n \ndef etiket_olustur(resim_adi):\n    obje_turu = resim_adi.split('.')[-3] # dosya adında bulunan \"cat\" ya da \"dog\" kelimesini al\n    if (obje_turu == 'cat'):\n        print(np.array([1, 0]))\n        \n    elif obje_turu == 'dog':\n        print(np.array([0, 1]))\n\ndef egitim_verisi_olustur():\n    olusturulan_egitim_verisi = []\n    for img in tqdm(os.listdir(EGITIM_KLASORU)):\n        dosya_yolu = os.path.join(EGITIM_KLASORU, img)\n        resim_verisi = cv2.imread(dosya_yolu, cv2.IMREAD_GRAYSCALE)\n        resim_verisi = cv2.resize(resim_verisi, (RESIM_BOYUTU, RESIM_BOYUTU))\n        olusturulan_egitim_verisi.append([np.array(resim_verisi), etiket_olustur(img)])\n        shuffle(olusturulan_egitim_verisi)\n        np.save('egitim_verisi.npy', olusturulan_egitim_verisi)\n    return olusturulan_egitim_verisi\n\ndef test_verisi_olustur():\n    olusturulan_test_verisi = []\n    for img in tqdm(os.listdir(TEST_KLASORU)):\n        dosya_yolu = os.path.join(TEST_KLASORU, img)\n        resim_no = img.split('.')[0]\n        resim_verisi = cv2.imread(dosya_yolu, cv2.IMREAD_GRAYSCALE)\n        resim_verisi = cv2.resize(resim_verisi, (RESIM_BOYUTU, RESIM_BOYUTU))\n        olusturulan_test_verisi.append([np.array(resim_verisi), resim_no])\n        shuffle(olusturulan_test_verisi)\n        np.save('test_verisi.npy', olusturulan_test_verisi)\n    return olusturulan_test_verisi","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"egitim_verisi = egitim_verisi_olustur()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_verisi = test_verisi_olustur()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ağımızı eğitirken 500 adet resmi eğitimi test etmek için kullanacağız.\negitim = egitim_verisi[:-500]\ntest = egitim_verisi[-500:]\n \n\nX_egitim = np.array([i[0] for i in egitim]).reshape(-1, RESIM_BOYUTU, RESIM_BOYUTU, 1)\ny_egitim = [i[1] for i in egitim]\nX_test = np.array([i[0] for i in test]).reshape(-1, RESIM_BOYUTU, RESIM_BOYUTU, 1)\ny_test = [i[1] for i in test]\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"### MİMARİNİN OLUŞTURULMASI ###\n \ntf.reset_default_graph()\n\nconvnet = input_data(shape=[None, RESIM_BOYUTU, RESIM_BOYUTU, 1], name='input')\n \n# 32 adet 5x5 boyutunda filtrelerden oluşan ve relu aktivasyonlu konvolüsyon katmanı\nconvnet = conv_2d(convnet, 32, 5, activation='relu')\n\n# 5x5 boyutunda filtelerden oluşan max_pool katmanı\nconvnet = max_pool_2d(convnet, 5)\n \nconvnet = conv_2d(convnet, 64, 5, activation='relu')\nconvnet = max_pool_2d(convnet, 5)\n \nconvnet = conv_2d(convnet, 128, 5, activation='relu')\nconvnet = max_pool_2d(convnet, 5)\n \nconvnet = conv_2d(convnet, 64, 5, activation='relu')\nconvnet = max_pool_2d(convnet, 5)\n \nconvnet = conv_2d(convnet, 32, 5, activation='relu')\nconvnet = max_pool_2d(convnet, 5)\n ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#1024 birimden oluşan tam bağlantılı ve relu aktivasyonlu katman\nconvnet = fully_connected(convnet, 1024, activation='relu')\n \n# overfitting engellemek için dropout katmanı\nconvnet = dropout(convnet, 0.8)\n \n# 2 birimli ve softmax aktivasyonlu tam bağlantılı katman\nconvnet = fully_connected(convnet, 2, activation='softmax')\n\n\n# oluşturulan mimariyi, öğrenme oranını, optimizasyon türünü, kayıp fonksiyonunu ve dosya isimlerinden aldığımız hedef değerlerini\n\nconvnet = regression(convnet, optimizer='adam', learning_rate=OGRENME_ORANI, loss='categorical_crossentropy',\n name='targets')\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# OLUŞTURULAN MİMARİ İLE DEEP LEARNING NETWORK (DNN) MODELİ OLUŞTURULMASI\nmodel = tflearn.DNN(convnet, tensorboard_dir='log', tensorboard_verbose=0)\n\n\n# VERİLERLE EĞİTİM YAPILMASI\nmodel.fit({'input': X_egitim}, {'targets': y_egitim}, n_epoch=10,\n validation_set=({'input': X_test}, {'targets': y_test}),\n snapshot_step=500, show_metric=True, run_id=MODEL_ADI)\n\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"#TEST\nfig = plt.figure(figsize=(16, 12))\n\nfor no, veri in enumerate(test_verisi[:16]):\n    resim_no = veri[1]\n    resim_verisi = veri[0]\n    y = fig.add_subplot(4, 4, no + 1)\n    orig = resim_verisi\n    veri = resim_verisi.reshape(RESIM_BOYUTU, RESIM_BOYUTU, 1)\n    ag_cikisi = model.predict([veri])[0]\n    if np.argmax(ag_cikisi) == 1:\n        str_label = 'Köpek'\n    else:\n        str_label = 'Kedi'\n    y.imshow(orig, cmap='gray')\n    plt.title(str_label)\n    y.axes.get_xaxis().set_visible(False)\n    y.axes.get_yaxis().set_visible(False)","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}