{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"# !pip install pydicom\nimport os\nimport shutil\nimport pandas as pd\nimport numpy as np\nimport glob, pylab, pandas as pd\nimport pydicom\nimport matplotlib.pylab as plt\nimport seaborn as sns\nimport sklearn\nfrom keras import layers, models","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"base = '/kaggle/input/rsna-intracranial-hemorrhage-detection/rsna-intracranial-hemorrhage-detection'          \nif not os.path.exists('data'):\n    os.mkdir('data')\nshutil.copy(os.path.join(base, 'stage_2_train.csv'), 'data')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"images_path = os.path.join(base, 'stage_2_train')\nimages = os.listdir(images_path)\nimages = images[:int(len(images) /50 )]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# fig = plt.figure(figsize=(15, 10))\n# columns = 5; rows = 2\n# imgs = [img for img in images]\n# for i in range(1, columns*rows +1):\n#     ds = pydicom.dcmread(os.path.join(images_path, imgs[i]))\n#     fig.add_subplot(rows, columns, i)\n#     plt.imshow(ds.pixel_array, cmap=plt.cm.bone)\n#     fig.add_subplot","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df = pd.read_csv('data/stage_2_train.csv')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"There are 6 labels that an image can have - epidural, intraparenchymal, intraventricular, subarachnoid, subdural, any\nany is supposed to be true if any of the sub-type labels is true."},{"metadata":{"trusted":true},"cell_type":"code","source":"df.head(6)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# ID = df.loc[0]['ID'].split('_')\n# label = ID[2]\n# label","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels = df.Label.values[:len(images)*6 + 1 ]\n# # each image has 6 labels ...so each element of ohe is the whole label of an image which contains 6 values\nohe = [labels[i: i + 6] for i in range(0, len(labels) - 6, 6)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"train_images = images[:int(len(images) * 0.8)]\ntest_images = images[int(len(images) * 0.8):]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = [pydicom.dcmread(os.path.join(images_path, img)).pixel_array for img in train_images]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = np.array(X_train)\nprint(X_train.shape)\nprint(X_train[0].shape)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"y_train = ohe[:int(len(images) * 0.8)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"X_train = np.expand_dims(X_train, axis=4)\nX_train.shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# plt.title(y_train[500])\n# plt.imshow(X_train[500], cmap=plt.cm.bone)\n# plt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"#  X_train, y_train = sklearn.utils.shuffle(X_train, y_train)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"input_shape = (512, 512, 1) #### X_train[0].shape -> (512, 512)\nmodel = models.Sequential([\n    layers.Conv2D(32, (3,3), input_shape=input_shape),\n    layers.Conv2D(64, (3,3)),\n    layers.Conv2D(64, (3,3)),\n    layers.Conv2D(128, (3,3)),\n    layers.Conv2D(128, (3,3)),\n    layers.MaxPooling2D(),\n    layers.Conv2D(128, (3,3)),\n    layers.Conv2D(256, (3,3)),\n    layers.Conv2D(256, (3,3)),\n    layers.MaxPooling2D(),\n    layers.Conv2D(512, (3,3)),\n    layers.Conv2D(512, (3,3)),\n    layers.Conv2D(1024, (3,3)),\n    layers.MaxPooling2D(),\n    layers.Flatten(),\n    layers.Dense(6, activation='sigmoid')    \n])\nmodel.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])\nEPOCHS = 10\nBATCH_SIZE = 32","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# model.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# history = model.fit(X_train, y_train, epochs=EPOCHS, batch_size=BATCH_SIZE, validation_split=0.1)\nhistory = model.fit_gene(X_train, y_train, epochs=EPOCHS, batch_size=BATCH_SIZE, validation_split=0.1)","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":1}