{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import tensorflow as tf\nimport random\nimport time\nimport cv2\n\nfrom skimage import io\nfrom pylab import rcParams\n\nfrom PIL import Image\nfrom PIL import ImageDraw\nfrom PIL import ImageFont\nfrom skimage.color import rgb2gray\nfrom skimage.transform import resize\nfrom skimage import data, color\n\nimport matplotlib.pyplot as plt\nfrom matplotlib.patches import Rectangle\n\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Activation, Dropout, Flatten, Dense, Conv2D, MaxPooling2D,BatchNormalization,AveragePooling2D\nfrom keras.layers import Conv2D, MaxPooling2D\n\nfrom keras.preprocessing.image import (\n    random_rotation, random_shift, random_shear, random_zoom,\n    random_channel_shift,img_to_array, ImageDataGenerator)\n\nimport numpy as np\nimport pandas as pd\n\nimport warnings\nfrom glob import glob\n\nprint('TensorFlow version:', tf.__version__)\nprint('Keras version:', keras.__version__)\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"3774f5e8b200d9f607fcefb6ad6fccbad2aa8a12"},"cell_type":"code","source":"TRAIN_IMAGE_PATH = \"../input/train/\"\nTEST_IMAGE_PATH = \"../input/test/\"\nTRAINING_DATA='../input/train.csv'\nIMG_SIZE = 64","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"50092191a4a463562c09287570ed5160a1319c1a"},"cell_type":"code","source":"df_train = pd.read_csv(TRAINING_DATA)\n#print(df_train.iloc[0]['Id'])\n#df_train.index.name = 'index'\n#df_train = df_train.query('index < 10000')\ndel_ind = []\n\nfor i in range(len(df_train)):\n    if df_train.iloc[i]['Id'] == 'new_whale':\n        del_ind.append(i)\ndf_train = df_train.drop(df_train.index[del_ind])\nprint(len(df_train))\n\n#string to unique int\n#set unique int value for each unique classes sring.. string to int\nunique_calsses_value = np.unique(df_train[['Id']].values)\n#unique_calsses_value = np.delete(unique_calsses_value,[0])\nprint(unique_calsses_value)\nunique_classes_id_dict = {}\nunique_id_classes_dict = {}\nfor i in range(len(unique_calsses_value)):\n    unique_classes_id_dict[unique_calsses_value[i]] = i\n    unique_id_classes_dict[i] = unique_calsses_value[i]\nprint(len(unique_id_classes_dict))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b429c52c54b656698a4066e162b6781a4b456614"},"cell_type":"code","source":"df_train['classes_id'] = df_train.apply (lambda row: unique_classes_id_dict.get(row['Id']),axis=1)\n\n#df_train = df_train.dropna()\ndf_train.head(15)\nlen(df_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"43a97980b07a7a6cec3333f9b016416ed324b3ae"},"cell_type":"code","source":"def show_image(image):\n    plt.imshow(image)\ndef plot_images(images):\n    rcParams['figure.figsize'] = 14, 8\n    plt.gray()\n    fig = plt.figure()\n    for i in range(min(9, images.shape[0])):\n        fig.add_subplot(3, 3, i+1)\n        show_image(images[i])\n    plt.show()   \n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6b9a3baeef249282e7c90b8e2bdc43d3e5ee6f78"},"cell_type":"code","source":"#resize the image\ndef LoadImage(img_path):\n    image = color.rgb2gray(io.imread(img_path))\n    image_resized = resize(image,(IMG_SIZE,IMG_SIZE))\n    return image_resized[:,:] / 255.\n#load  images data and classes id\ndef LoadImageData(path):\n    xs = []\n    ys = []\n    #for ex_paths in paths:\n    for index, row in df_train.iterrows():        \n        img_path = path + row['Image']\n        igm = LoadImage(img_path)\n        xs.append(igm)\n        ys.append(row['classes_id'])\n        print(index)\n    return np.array(xs),np.array(ys)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"b766449c70483fe2a3f9acdd8f7becebdd831baf"},"cell_type":"code","source":"X_train,Y_train = LoadImageData(TRAIN_IMAGE_PATH)\nprint(\"Loaded\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"17caba818b9c2c9ca4515f6a7c800f57721b6e14"},"cell_type":"code","source":"print(\"X_train \",X_train.shape)\nprint(\"Y_train \",Y_train.shape)\nprint(\"X_train \",len(df_train))\nprint(\"y_train \",Y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"ee3e2dfaa1538f72c4b19dc7d544d66bfa0ea841"},"cell_type":"code","source":"xs = [random.randint(0, X_train.shape[0]-1) for _ in range(9)]   \nprint(\"XS \",xs)\nplot_images(X_train[xs])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a39886eba13d7e5ad145e0e4ab474f350cedf254"},"cell_type":"code","source":"X_train = X_train.reshape(-1, IMG_SIZE, IMG_SIZE, 1)\n#change the classes id to 0 1 format\nY_train = keras.utils.to_categorical(Y_train,num_classes=len(unique_classes_id_dict))\n\nprint(np.shape(X_train))\nprint(np.shape(Y_train))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"51c2b6265330af92f20e6c8a57a5654a09c7b6ea"},"cell_type":"code","source":"def cnn():\n    model = Sequential()\n    model.add(Conv2D(32, (3, 3), strides = (1, 1), input_shape = (IMG_SIZE, IMG_SIZE, 1)))\n    model.add(BatchNormalization(axis = 3))\n    model.add(Activation('relu'))\n    model.add(MaxPooling2D((2, 2)))\n    model.add(Conv2D(64, (3, 3), strides = (1,1)))\n    model.add(Activation('relu'))\n    model.add(AveragePooling2D((3, 3)))\n    model.add(Flatten())\n    model.add(Dense(500, activation=\"relu\"))\n    model.add(Dropout(0.6))\n    model.add(Dense(len(unique_id_classes_dict), activation='softmax'))\n    model.compile(loss='categorical_crossentropy', optimizer=\"adam\", metrics=['accuracy'])\n    model.summary()\n    return model\nmodel = cnn()\nhistory = model.fit(X_train, Y_train, epochs=200, batch_size=100, verbose=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5790b695bc00e6dec3af29b4c70a2c43fc05efcd"},"cell_type":"code","source":"plt.plot(history.history['acc'], color='green', linewidth = 2, \n         marker='o', markerfacecolor='blue', markersize=4) \nplt.title('Whale Identification CNN Model accuracy')\nplt.ylabel('Accuracy')\nplt.xlabel('Epoch')\nplt.grid(True)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6fdd201bd1d4730ae5c6b4794fbb881fd8598f82"},"cell_type":"code","source":"SAMPLE_SUBMISSION_FILE=\"sample_submission.csv\"\n\ndef getLabel(classes):\n    result = []\n    for i in range(0, len(classes)):\n        _class = unique_id_classes_dict.get(classes[i])\n        result.append(_class)\n    return result\n\nwith open(SAMPLE_SUBMISSION_FILE,\"w\") as f:\n    test_imgs = glob(\"../input/test/*jpg\")\n    f.write(\"Image,Id\\n\")\n    for image in test_imgs:\n        #print(image)\n        igm = LoadImage(image)\n        X_test = np.array(igm)\n        X_test = X_test.reshape(-1, IMG_SIZE, IMG_SIZE, 1)\n        Y_test = model.predict_proba(X_test,batch_size=1)\n        best_predict_5 = np.argsort(Y_test)[0][::-1][:5]\n        pre = getLabel(best_predict_5)\n        #print(image, \" \".join( pre))\n        f.write(\"%s,%s\\n\" %(os.path.basename(image), \" \".join( pre)))\nprint(\"csv created\")","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}