{"cells":[{"metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","trusted":false,"collapsed":true},"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport 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\nfrom sklearn import preprocessing\nimport itertools\n\nfrom keras.utils.np_utils import to_categorical # convert to one-hot-encoding\nfrom keras.models import Sequential, Model\nfrom keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPool2D, Conv1D, MaxPool1D, Reshape\nfrom keras.optimizers import RMSprop, Adagrad\nfrom keras.preprocessing.image import ImageDataGenerator\nfrom keras.callbacks import ReduceLROnPlateau\n\nimport glob\n\nimport os\nprint(os.listdir(\"../lib/kagglegym\"))\nprint(\"TRAINING DATA \\n-------------\")\nprint(os.listdir(\"../input/train\"))\nprint(\"TESTING DATA \\n------------\")\nprint(os.listdir(\"../input/test\"))\n\n# sns.set(style='white', context='notebook', palette='deep')\n\nimport gc\ngc.enable()","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"50132833-cabc-45ec-8c5c-9b02fa394468","collapsed":true,"_uuid":"930ad3ec6db00e86dc28a3305fff471886a972ba","trusted":false},"cell_type":"code","source":"\"\"\"PARSE DATA FROM ONE SUBJECT\"\"\"\n\ndef parse_csvs(subject_id):\n    \n    data = sorted(glob.glob(\"../input/train/subj\" + str(subject_id) + \"_*data.csv\"))\n    events = sorted(glob.glob(\"../input/train/subj\" + str(subject_id) + \"_*events.csv\"))\n    \n    training_data_df = []\n    validation_data_df = []\n    training_events_df = []\n    validation_events_df = []    \n    \n    for series in data:\n        if series.find(\"series7\") == -1 and series.find(\"series8\") == -1:\n            training_data_df.append(pd.read_csv(series))\n        else:\n            validation_data_df.append(pd.read_csv(series))\n    for series in events:\n        if series.find(\"series7\") == -1 and series.find(\"series8\") == -1:\n            training_events_df.append(pd.read_csv(series))\n        else:\n            validation_events_df.append(pd.read_csv(series))\n    \n    return ({\n        \"training_data\": pd.concat(training_data_df, ignore_index=True),\n        \"training_events\": pd.concat(training_events_df, ignore_index=True),\n        \"validation_data\": pd.concat(validation_data_df, ignore_index=True),\n        \"validation_events\": pd.concat(validation_events_df, ignore_index=True)\n    })","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"930c04bd-19db-427a-9180-5ae462f82bad","collapsed":true,"_uuid":"0b6331f8bb591e90b3ee26b9b3a5202688dd25ab","trusted":false},"cell_type":"code","source":"\"\"\"NORMALIZE VALUES\"\"\"\n\ndef normalize_data_df(df):    \n    df = df.drop(\"id\", axis=1)\n    df = (df-df.min())/(df.max()-df.min())\n    return df\n\ndef normalize_subject(subject):\n    return ({\n        \"training_data\": normalize_data_df(subject[\"training_data\"]),\n        \"training_events\": subject[\"training_events\"].drop(\"id\", axis=1),\n        \"validation_data\": normalize_data_df(subject[\"validation_data\"]),\n        \"validation_events\": subject[\"validation_events\"].drop(\"id\", axis=1)\n    })","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"d76b4f48-3bcc-4afb-a10d-418d40273ae3","collapsed":true,"_uuid":"434c3534c31c2526714e29c40b637383b01437f9","trusted":false},"cell_type":"code","source":"\"\"\"RESHAPE DATAFRAMES\"\"\"\n\ndef reshape_data_df(df, size):\n    return df.values.reshape(-1,size,32,1) # TimeSeries, Channels, Keras Canal\n\ndef reshape_subject(subject):\n    subject[\"training_data\"] = reshape_data_df(subject[\"training_data\"])\n    subject[\"validation_data\"] = reshape_data_df(subject[\"validation_data\"])\n    return subject","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"f106376d-600d-4822-a780-b579fd96681a","_uuid":"5067f8051cbff8d682091f0709bcac2ada97889b","trusted":false,"collapsed":true},"cell_type":"code","source":"\"\"\"BUILD MODEL\"\"\"\n\ndef build_model(optimizer, loss, steps):    \n    model = Sequential()\n\n    model.add(\n        Conv1D(\n            filters = 32,\n            kernel_size = 8,\n#             strides = 64,\n            padding = \"same\",\n            activation = \"relu\",\n#             input_shape = (None, 32),\n            input_shape = (steps=32, input_dim=1)\n        )\n    )\n    model.add(\n        Conv1D(\n            filters = 32,\n            kernel_size = 8,\n            padding = \"same\",\n            activation = \"relu\"\n        )\n    )\n    model.add(MaxPool1D(pool_size=4))\n    model.add(Dropout(0.25))\n    \n    model.add(\n        Conv1D(\n            filters = 64,\n            kernel_size = 16,\n            padding = \"same\",\n            activation = \"relu\"\n        )\n    )\n    model.add(\n        Conv1D(\n            filters = 64,\n            kernel_size = 16,\n            padding = \"same\",\n            activation = \"relu\"\n        )\n    )\n    model.add(MaxPool1D(pool_size=4))\n    model.add(Dropout(0.25))\n\n    model.add(Flatten()) # Unsure if necessary\n    model.add(\n        Dense(\n            units = 64,\n            activation=\"relu\"\n        )\n    )\n    model.add(Dropout(0.25))\n    model.add(\n        Dense(\n            units = 6,\n            activation=\"sigmoid\",\n        )\n    ) # Final layer, 6 events\n\n    # Compile the model baby\n    model.compile(\n        optimizer = optimizer,\n        loss = loss,\n        metrics = [\"accuracy\"]\n    )\n    return model","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"4fd823f6-6a7d-43a6-8d06-269697ba21b1","collapsed":true,"_uuid":"0671d45b45483768025d0a0fc2e183062b6e88f8","trusted":false},"cell_type":"code","source":"\"\"\"TRAIN MODEL\"\"\"\n\ndef train_model(subject, model, batch_size, epochs, verbose):\n    return model.fit(\n        x = subject[\"training_data\"],\n        y = subject[\"training_events\"],\n        batch_size = batch_size,\n        epochs = epochs,\n        verbose = verbose\n    )","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"cd53d340-665f-4fb6-9619-5c60b6dc40b6","collapsed":true,"_uuid":"74cd5560609a39c0888a7d86ef033738c2f588be","trusted":false},"cell_type":"code","source":"\"\"\"ENSEMBLE MODEL\"\"\"\n\ndef ensemble(models, model_input):\n    \n    outputs = [model.outputs[0] for model in models]\n    y = Average()(outputs)\n    \n    model = Model(model_input, y, name=\"ensemble\")\n    return model","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"a3c264ff-615f-4ee7-b732-63668f27c2fa","collapsed":true,"_uuid":"acd68da0deaae1f7e5455088b11ef3e99e6fd66f","trusted":false},"cell_type":"code","source":"\"\"\"WE GOT MODELS\"\"\"\nmodels = []\n# model_dir = \"../saved_models/\"\n# save = ModelCheckpoint(\n#     filepath='../content/my_drive/eeg/',\n#     monitor='val_acc',\n#     verbose=1,\n#     save_best_only=False,\n#     save_weights_only=False,\n#     mode='auto',\n#     period=1\n# )","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"3de41b30-9944-402d-a661-fc9aec91a813","_uuid":"24cc60be4bd7e5d6f93c0456b297475feaf70c48","trusted":false,"collapsed":true},"cell_type":"code","source":"\"\"\"LET'S BEGIN\"\"\"\n\n# Hyperparameters ###############################################\nbatch_size = 16\nsteps = 32\nepochs = 1\nverbose = 1 # 0: Silent, 1: Progress Bar, 2: Line per epoch\noptimizer = \"Adagrad\"\nloss = \"binary_crossentropy\"\n# steps_per_epoch = norm_guy[\"training_data\"].shape[0]\nreshape_size = 64\n#################################################################\n\nfor x in range(1, 13):    \n    subject = parse_csvs(x)\n    norm_subj = normalize_subject(subject)\n    del subject\n    norm_subj = reshape_subject(norm_subj, reshape_size)\n    model = build_model(optimizer, loss, steps)\n    history = train_model(norm_subj, model, batch_size, epochs, verbose)\n    history.save_weights(\"../saved_models/saved_model_\" + str(x) )\n    models.append(history)\n    del norm_subj\n","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"35ab3053-d659-4257-83e4-ab5c60d778c1","_uuid":"08150a686d495e831ae73df92b269d1f90933edf","trusted":false,"collapsed":true},"cell_type":"code","source":"wow = parse_csvs(1)\nprint(wow[\"validation_events\"])","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"3eefbebc-d0fa-401b-b1fe-9884563819ed","collapsed":true,"_uuid":"59a2007f0332605cd6d4d68cd117935a2feae1f7","trusted":false},"cell_type":"code","source":"# \"\"\"PARSE DATA FROM CSVS\"\"\"\n\n# import glob\n\n# training_data = []\n# training_events = []\n# validation_data = []\n# validation_events = []\n\n# for x in range(1,13):\n#     data = sorted(glob.glob(\"../input/train/subj\" + str(x) + \"_*data.csv\"))\n#     events = sorted(glob.glob(\"../input/train/subj\" + str(x) + \"_*events.csv\"))\n    \n#     training_data_df = []\n#     validation_data_df = []\n#     training_events_df = []\n#     validation_events_df = []\n    \n#     for series in data:\n#         if series.find(\"series7\") == -1 and series.find(\"series8\") == -1:\n#             training_data_df.append(pd.read_csv(series))\n#         else:\n#             validation_data_df.append(pd.read_csv(series))\n#     for series in events:\n#         if series.find(\"series7\") == -1 and series.find(\"series8\") == -1:\n#             training_events_df.append(pd.read_csv(series))\n#         else:\n#             validation_events_df.append(pd.read_csv(series))\n#     training_data.append(pd.concat(training_data_df, ignore_index=True))\n#     training_events.append(pd.concat(training_events_df, ignore_index=True))\n#     validation_data.append(pd.concat(validation_data_df, ignore_index=True))\n#     validation_events.append(pd.concat(validation_events_df, ignore_index=True))","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_uuid":"33c4e2b4e56dc9c12b2e404a6ca27794b894369a","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"collapsed":true,"_uuid":"ed5ee69ea93c28ca642f01c38abbf9280d8bd97e","trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"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"},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":1}