{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"markdown","source":""},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","collapsed":true,"_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":false},"cell_type":"markdown","source":"#  introduction to Deep Learning with  Keras  \n (Celal Bayar Universty  Software Engineer Deep Learning  Education ) \n## \n\n\n<a class=\"anchor\" id=\"0.\"></a>**İçindekiler**\n* [1. Preprocessing Data (Veri Önişleme)](#1.)****\n* * [1.1. Binarization](#1.1.)\n* * [1.2. Mean removal](#1.2.)\n* * [1.3. Scaling  (Ölçeklendirme)](#1.3.)\n* * [1.5. Normalization ](#1.4.)\n* * [1.6. Normalization ](#1.4.)\n* * [1.7. Load  Data ](#1.2.)\n* * [1.8. Check for null and missin value ](#1.3.)\n* * [1.9. Reshape (Yeniden Şekillendirme](#1.4.)\n* * [1.8. Split Ttraining  (Yeniden Şekillendirme](#1.4.)\n* [2. CNN  (Convolutional Neural Network) ](#2.)****\n* * [2.1. Define the Model ( Modeli Tanımla )  ](#1.3.)\n* * [2.2. Set the optimizer and Annealer (Optimize Edici ) ](#1.4.)\n* * [2.3. Data Augmentations   (Veri Büyütme ) ](#1.4.)\n"},{"metadata":{"_uuid":"d9558f0451463041ef8aceace269e7a8fbed9b1f"},"cell_type":"markdown","source":"### Binarization\nBurada Dataset ' imizde  veri 'boolen'  değerlerine dönüştürmektir amacımız .  (true- false / 0 - 1)\n\nEşik aralığı belirleyin ve bu eşik aralığımız 0 (sıfır ) olsun . negatif değerler  için False pozitif değerler için True sonucu dönecektir.\n\n### Peki 0 olduğunda ne döndürür ?? :))) "},{"metadata":{"trusted":true,"_uuid":"58573a5fdee630e07b509b95dd0a576fb1e45f02"},"cell_type":"code","source":"import numpy as np \nfrom sklearn import preprocessing\ninput_data = np.array([[2.6,-6.5,3.1],\n                      [-2.5,8.2,-3.4],\n                      [5.1,-6.4,5],\n                      [0.4,-0.5,9.8]])\n\ndata_binary = preprocessing.Binarizer(threshold=2.6).transform(input_data)\nprint(data_binary)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"1fcf371c4f698e5c9143faedbc0582e3bdae7d9b"},"cell_type":"markdown","source":"### Mean Removal\nMakine öğrenimde oldukça kullanılan bir önişleme tekniğidir !! \nortalaması ve standart sapmasını  hesapladığımız bir yöntemdir\nDatasetimizi  bu hesaplamara göre yeniden  şekillendirdiğimiz bir önişleme adımıdır.\n"},{"metadata":{"trusted":true,"_uuid":"4ae5fe8b0c7f6dc495647f5b2e25fa324118f441"},"cell_type":"code","source":"\nprint(\"\\nÖnce Standart sapması ve ortalama:\")\nprint(\"Ortalama =\", input_data.mean(axis=0))\nprint(\"Standart Sapma =\", input_data.std(axis=0))\n\ndata_scaled = preprocessing.scale(input_data)\nprint(\"\\nSonra:\")\nprint(\"Ortalama =\", data_scaled.mean(axis=0))\nprint(\"Standart Sapma =\", data_scaled.std(axis=0))\n\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"711d3929ada80de8e5940f347409879471471149"},"cell_type":"markdown","source":"### Scaling ( Ölçeklendirme ) \n\n Dizimizdeki **satırda** en yüksek değer max değer seçilir  \nBizim için **max** değer 1 dir \nnegatif sayılar sıfırdır \nçünkü ölçeklendirmeyi 0-1 arası yaparız negatif sayıları ortamatik **min** değerimiz olan 0 yaparız\n\n"},{"metadata":{"trusted":true,"_uuid":"f0fd6e2cf1e4e6e8e764a4c628b20da6600bfb2a"},"cell_type":"code","source":"data_scaler_minmax = preprocessing.MinMaxScaler(feature_range=(0, 1))\ndata_scaled_minmax = data_scaler_minmax.fit_transform(input_data)\nprint(\"\\nMin max değerlere göre ölçeklenen datamız:\\n\", data_scaled_minmax)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f96b179eece8d6c475df523c328b8983b027154e"},"cell_type":"markdown","source":"### Normalization ( Normalleştimer  ) \nFormülü çok basit ve datamızı daha etkin kılmak için çok kullanılan bir önişlemedir.\n\n## V'' = (  V -  Vmin )   / (  Vmax - Vmin) \n\nAmacımız : yüksek değerlere sahip özniteliklerimizin düşük değerli özniteliklerimize baskınlık **sağlamaması** içindir. \n\n\nBurada küçük not olarakda mutlak sapma ile normalization da kullanılır ancak \nmutsap sapma tekniği daha çok kullanılır . Sebebi isi bazı özniteliklerimiz diğer özniteliklerimizen daha değerli olma olasılığıdır..\n"},{"metadata":{"trusted":true,"_uuid":"12de73c6f86fe805c16bc209668e7cf368c9775a"},"cell_type":"code","source":"data_normalized_mutlak_sapma = preprocessing.normalize(input_data, norm='l1')\ndata_normalized_toplam = preprocessing.normalize(input_data, norm='l2')\nprint(\"\\n mutlak sapma  normalized data:\\n\", data_normalized_mutlak_sapma)\nprint(\"\\n toplam deger  normalized data:\\n\", data_normalized_toplam)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"9111abe99e722bc119dad71fa4a3e10351fb83f1"},"cell_type":"markdown","source":"## Label Encoding \n\nSınıflandırma yaptığımızda birçok label ile  uğraşırız\nBu label  içinde kelimeler, sayılar vey başka şeyler olarabilir\nSklearn  makine öğrenmesi kütüphanesin barındıran bir kütüphane\nve bu kütüphane onların sayısal değer olmasını ister çünkü onları doğrudan kullabilmesi için \n"},{"metadata":{"trusted":true,"_uuid":"22ed625a0567216f3033c0bbac54e3f4beb8435e"},"cell_type":"code","source":"# bazı örnek label tanımlayalım \ninput_labels = ['kırmızı', 'siyah', 'kırmızı', 'yesil', 'siyah', 'sarı', 'beyaz']\n\n\n#şimdi nesnemizi oluşturalım ve öğretelim \nencoder = preprocessing.LabelEncoder()\nencoder.fit(input_labels)\n\n#kelimeler ve sayılar arasındaki eşleşmeyi yazdıralım \n\nprint('\\n Label mapping :')\nfor i , item  in enumerate(encoder.classes_):\n    print(item , '---> ' , i)\n\n#Nasıl performans gösterdiğini görmek için rastgele sıralı bir etiket kümesi kodlayalım\n\ntest_labels = ['yesil', 'kırmızı', 'siyah']\nencoded_values = encoder.transform(test_labels)\nprint(\"\\nLabels =\", test_labels)\nprint(\"Encoded values =\", list(encoded_values))\n\n\n\n#test için de decoded yapalım \nencoded_values = [3, 0, 4, 1]\ndecoded_list = encoder.inverse_transform(encoded_values)\nprint(\"\\nEncoded values =\", encoded_values)\nprint(\"Decoded labels =\", list(decoded_list))\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"c0f5282cfc08d57a0820583fcd127605f80d8b80"},"cell_type":"markdown","source":"# Kütüphane  ekle ..... "},{"metadata":{"trusted":true,"_uuid":"16a0563d7502c29e8f2f75d2febc7be57de53ced"},"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport matplotlib.image as mpimg\nimport seaborn as sns\n%matplotlib inline\n\nnp.random.seed(2)\n\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import confusion_matrix\nimport itertools\n\nfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D\nfrom keras.optimizers import RMSprop\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\n\nsns.set(style='white', context='notebook', palette='deep')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"2fcb487fae67aa57c79ad40483b2308b66169b05"},"cell_type":"markdown","source":"# Load Data "},{"metadata":{"trusted":true,"_uuid":"449419de153cda05353d744883aba1249bf3b109"},"cell_type":"code","source":"train = pd.read_csv(\"../input/train.csv\")\ntest = pd.read_csv(\"../input/test.csv\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"687842cc1032d998718fa0d66a08dc5f3c13b4ff"},"cell_type":"code","source":"Y_train = train[\"label\"]\n\n# Drop 'label' column\nX_train = train.drop(labels = [\"label\"],axis = 1) \n\n# free some space (eskisini siliyoruz , bellek harcamaması için )\ndel train \n\ng = sns.countplot(Y_train)\n\nY_train.value_counts()\n# bir diğer gösterimi \n#print(Y_train.value_counts(dropna=False))\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"61fa51fdf4b2cfe05b7d7d0a98bb3f50c610a994"},"cell_type":"markdown","source":"10 rakam için benzer sayılarımız var. "},{"metadata":{"_uuid":"af5a957a9dbfeac1afa550d059ff398927649404"},"cell_type":"markdown","source":"#  Eksik ve boş değerleri kontrol edelim ¶\n"},{"metadata":{"trusted":true,"_uuid":"3dd1ec3708997d2cbb065a5dd5c233b4a2084c77"},"cell_type":"code","source":"# check the data ( datamızı kontrol edelim )\nX_train.isnull().any().describe()\n#unique--> benzersiz ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4228399c38ee2b11bf1d3dd27b12350cc401f07d"},"cell_type":"code","source":"test.isnull().any().describe()\n#bir diğer gösterimi ","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ea0dc81b33621efb91ad3e40c95e0bafa7632182"},"cell_type":"markdown","source":"# Normalization\n\nAydınlatma farklılıklarının etkisini azaltmak için gri tonlamalı bir normalizasyon gerçekleştiriyoruz.\n\n\n**Üstelik, CNN [0..1] verisinde [0..255] 'den daha hızlı bir şekilde yakınlaşır.**"},{"metadata":{"trusted":true,"_uuid":"40291bd47d7e0e8cb970acdf5157c4909a48e42a"},"cell_type":"code","source":"# Normalize the data\nX_train = X_train / 255.0\ntest = test / 255.0","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"fdf006f7d6942626d728235ff187ae568efb60ce"},"cell_type":"markdown","source":"# Reshape "},{"metadata":{"trusted":true,"_uuid":"fed605a22b4175c3aefbfea57f22d868b4430bb1"},"cell_type":"code","source":"# Reshape image in 3 dimensions (height = 28px, width = 28px , canal = 1)\nX_train = X_train.values.reshape(-1,28,28,1)\ntest = test.values.reshape(-1,28,28,1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"58528ce3ad3c3f8948e135d741c327a6d2b6630b"},"cell_type":"markdown","source":"Train ve test görüntüleri (28px x 28px) pandalara konulmuştur.Dataframe 784 değerinde 1 boyutlu vektörlerdir . Tüm verileri 28x28x1 3 boyutlu  matrislere göre yeniden şekillendiriyoruz.\n\nKeras, sonunda kanallara karşılık gelen ekstra bir boyut gerektirir. MNIST görüntüler gri tonlamalıdır, bu nedenle sadece bir kanal kullanır. RGB görüntüleri için 3 kanal var, 784px vektörleri 28x28x3 3 boyutlu  matrislere yeniden şekillendirirdik.\n\n"},{"metadata":{"trusted":true,"_uuid":"65b47c208a004f679e3c4056e19c6ea3e6f6677d"},"cell_type":"code","source":"# Encode labels to one hot vectors (ex : 2 -> [0,0,1,0,0,0,0,0,0,0])\nY_train = to_categorical(Y_train, num_classes = 10)\n","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}