{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":71549,"databundleVersionId":8561470,"sourceType":"competition"}],"dockerImageVersionId":30698,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Setup","metadata":{}},{"cell_type":"code","source":"# Pip installs for relevant packages go here","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport tensorflow as tf\nimport os\n\n# Constants\nBASE_PATH = \"/kaggle/input/rsna-2024-lumbar-spine-degenerative-classification/\"\nTRAIN_DICOM_PATH = os.path.join(BASE_PATH, \"train_images\")\nTEST_DICOM_PATH = os.path.join(BASE_PATH, \"test_images\")\nOUTPUT_PATH = \"/kaggle/working/\"","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-05-26T12:06:33.717332Z","iopub.execute_input":"2024-05-26T12:06:33.717862Z","iopub.status.idle":"2024-05-26T12:06:33.724042Z","shell.execute_reply.started":"2024-05-26T12:06:33.717827Z","shell.execute_reply":"2024-05-26T12:06:33.722671Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Preliminary EDA","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv(f\"{BASE_PATH}train.csv\")\ntrain_label_coords = pd.read_csv(f\"{BASE_PATH}train_label_coordinates.csv\")\ntrain_series_descriptions = pd.read_csv(f\"{BASE_PATH}train_series_descriptions.csv\")\ntest_series_descriptions = pd.read_csv(f\"{BASE_PATH}test_series_descriptions.csv\")\ntrain_df","metadata":{"execution":{"iopub.status.busy":"2024-05-26T12:05:35.900899Z","iopub.execute_input":"2024-05-26T12:05:35.901347Z","iopub.status.idle":"2024-05-26T12:05:36.109238Z","shell.execute_reply.started":"2024-05-26T12:05:35.901315Z","shell.execute_reply":"2024-05-26T12:05:36.108001Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_series_descriptions","metadata":{"execution":{"iopub.status.busy":"2024-05-26T12:07:09.177544Z","iopub.execute_input":"2024-05-26T12:07:09.17799Z","iopub.status.idle":"2024-05-26T12:07:09.190957Z","shell.execute_reply.started":"2024-05-26T12:07:09.177952Z","shell.execute_reply":"2024-05-26T12:07:09.189802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Pre-processing\nThis stage will involve extracting images from dicom files.","metadata":{}},{"cell_type":"markdown","source":"# Model building","metadata":{}},{"cell_type":"code","source":"import os\nos.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'\n\nimport tensorflow as tf\nfrom tensorflow import keras\nfrom tensorflow.keras import layers\n\nimport matplotlib.pyplot as plt\n\ncifar10 = keras.datasets.cifar10\n\n(train_images, train_labels), (test_images, test_labels) = cifar10.load_data()\n\nprint(train_images.shape) # 50000, 32, 32, 3\n\n# Normalize: 0,255 -> 0,1\ntrain_images, test_images = train_images / 255.0, test_images / 255.0\n\nclass_names = ['1', '2', '3']\n\n\n\n# model...\ndef create_model():\n    model = keras.models.Sequential()\n    model.add(layers.Conv2D(32, (3,3), strides=(1,1), padding=\"valid\", activation='relu', input_shape=(32,32,3)))\n    model.add(layers.MaxPool2D((2,2)))\n    model.add(layers.Conv2D(32, 3, activation='relu'))\n    model.add(layers.MaxPool2D((2,2)))\n    model.add(layers.Flatten())\n    model.add(layers.Dense(64, activation='relu'))\n    model.add(layers.Dense(3))\n\n    return model\n\nmodel = create_model()\nprint(model.summary())\n#import sys; sys.exit()\n\n# loss and optimizer\nloss = keras.losses.SparseCategoricalCrossentropy(from_logits=True)\noptim = keras.optimizers.Adam(lr=0.001)\nmetrics = [\"accuracy\"]\n\nmodel.compile(optimizer=optim, loss=loss, metrics=metrics)\n\n# training\nbatch_size = 64\nepochs = 5\n\nmodel.fit(train_images, train_labels, epochs=epochs,\n          batch_size=batch_size, verbose=2)\n\n# evaulate\nmodel.evaluate(test_images,  test_labels, batch_size=batch_size, verbose=2)","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Evaluation","metadata":{}}]}