{"cells":[{"metadata":{},"cell_type":"markdown","source":"# Import Modules"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"#import modules\n\n# Data Manipulation\nimport numpy as np\nimport pandas as pd\n\n# Data Viz\nimport matplotlib.pyplot as plt\nimport matplotlib.image as mpimg \nimport seaborn as sns\n\n# machine learning and deep learning\nfrom tqdm import tqdm\nfrom sklearn.model_selection import train_test_split\nimport keras\nfrom keras.models import Sequential\nfrom keras.layers import Dense, Dropout, Flatten\nfrom keras.layers import Conv2D, MaxPooling2D\nfrom keras.layers import BatchNormalization\nfrom keras.preprocessing import image\n\nfrom PIL import Image\n\n#Others\nimport os\n\n\n\nprint(\"Modules Imported\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"# First Look at the Data\n## Let's first look at the labels."},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv(\"/kaggle/input/hpa-single-cell-image-classification/train.csv\")\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from sklearn.preprocessing import MultiLabelBinarizer\nmlb = MultiLabelBinarizer()\nmlb_result = mlb.fit_transform([str(df.loc[i,'Label']).split('|') for i in range(len(df))])\ndf_final = pd.concat([df['ID'],pd.DataFrame(mlb_result,columns=list(mlb.classes_))],axis=1)\ny = df_final.head(200)\ny = np.array(y.drop('ID', axis=1))\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"This table presents pictures ID and the labels of proteins organelle localization in the picture in the picture. The corresponding structures to these integers are presented below :\n1. Nucleoplasm\n1. Nuclear membrane\n1. Nucleoli\n1. Nucleoli fibrillar center\n1. Nuclear speckles\n1. Nuclear bodies\n1. Endoplasmic reticulum\n1. Golgi apparatus\n1. Intermediate filaments\n1. Actin filaments 10. Microtubules\n1. Mitotic spindle\n1. Centrosome\n1. Plasma membrane\n1. Mitochondria\n1. Aggresome\n1. Cytosol\n1. Vesicles and punctate cytosolic patterns\n1. Negative\n"},{"metadata":{},"cell_type":"markdown","source":"## Lets Look at The First Picture"},{"metadata":{"trusted":true},"cell_type":"code","source":"colors = {\"microtubules\":\"red\", \"target\":\"green\", \"nucleus\":\"blue\", \"endoplasmic reticulum\":\"yellow\"}\n\n\nimg_r = mpimg.imread('/kaggle/input/hpa-single-cell-image-classification/train/' + '5c27f04c-bb99-11e8-b2b9-ac1f6b6435d0_' + 'red' + '.png')\nimg_g = mpimg.imread('/kaggle/input/hpa-single-cell-image-classification/train/' + '5c27f04c-bb99-11e8-b2b9-ac1f6b6435d0_' + 'yellow' + '.png')\nimg_b = mpimg.imread('/kaggle/input/hpa-single-cell-image-classification/train/' + '5c27f04c-bb99-11e8-b2b9-ac1f6b6435d0_' + 'blue' + '.png')\n\n\nimg_rgb = np.dstack((img_r,img_g,img_b))  # stacks 3 h x w arrays -> h x w x 3\n\nplt.figure(figsize=(10,10))\nplt.imshow(img_rgb)\nplt.title(\"Show Only Cells Without Target (R:Microtubules, Blue:Nucleus, Green:Endoplasmic Reticulum)\")","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nfig, axs = plt.subplots(1, 4, figsize=(20,40))\n\ncolors = {\"microtubules\":\"red\", \"nucleus\":\"blue\", \"endoplasmic reticulum\":\"yellow\", \"target\":\"green\"}\n\ni = 0\nfor key in colors:\n    img = mpimg.imread('/kaggle/input/hpa-single-cell-image-classification/train/' + '5c27f04c-bb99-11e8-b2b9-ac1f6b6435d0_' + colors[key] + '.png')\n    axs[i].imshow(img, cmap='gray')\n    axs[i].set_title(key)\n    i+=1\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"print(img)**"},{"metadata":{"trusted":true},"cell_type":"code","source":"print(img)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"image_directory = '/kaggle/input/hpa-single-cell-image-classification/train/'\n#for filename in os.listdir(image_directory):\n    #print(os.path.join(image_directory, filename))\n #   img = Image.open(os.path.join(image_directory, filename))\n #   print(img.size)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"size = 200\nnbpictures = 200\nX_dataset = []\nfor i in tqdm(range(y.shape[0])):\n    img_r = image.load_img(image_directory + df[\"ID\"][i] + '_red.png', target_size=(size, size, 1))\n    img_g = image.load_img(image_directory + df[\"ID\"][i] + '_green.png', target_size=(size, size, 1))\n    img_b = image.load_img(image_directory + df[\"ID\"][i] + '_blue.png', target_size=(size, size, 1))\n    img_y = image.load_img(image_directory + df[\"ID\"][i] + '_yellow.png', target_size=(size, size, 1))\n    img_r = image.img_to_array(img_r)\n    img_g = image.img_to_array(img_g)\n    img_b = image.img_to_array(img_b)\n    img_y = image.img_to_array(img_y)\n    img = np.dstack((img_r,img_g,img_b, img_y))\n    img = img / 255\n    X_dataset.append(img)\n    \nX = np.array(X_dataset)\n    ","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=20, test_size=0.3)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model = Sequential()\n\nmodel.add(Conv2D(16, kernel_size=(5,5), activation='relu', input_shape=(200,200,4)))\nmodel.add(BatchNormalization())\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(32, kernel_size=(5,5), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(64, kernel_size=(5,5), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\n\nmodel.add(Conv2D(64, kernel_size=(5,5), activation='relu'))\nmodel.add(MaxPooling2D(pool_size=(2,2)))\nmodel.add(BatchNormalization())\nmodel.add(Dropout(0.2))\n\nmodel.add(Flatten())\nmodel.add(Dense(128, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(64, activation='relu'))\nmodel.add(Dropout(0.5))\nmodel.add(Dense(18, activation='sigmoid'))\n\nmodel.summary()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"history = model.fit(X_train, y_train, epochs=10, validation_data=())","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":4}