{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"**Thaks to DANIEL, DATAMANYO**\n---------------\n- This notebook mainly check variable with Ref video/document and Guide for pytorch model\n- Any comment is welcome!","metadata":{}},{"cell_type":"markdown","source":"# Library and Data load","metadata":{}},{"cell_type":"code","source":"# import library\nimport numpy as np\nimport pandas as pd\nfrom sklearn import *\nimport xgboost\nimport glob\nfrom sklearn.preprocessing import RobustScaler, normalize\nimport lightgbm as lgb\n\np = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/'\n\nsubjects = pd.read_csv(p+'subjects.csv') #\tSubject \tVisit \tAge \tSex \tYearsSinceDx \tUPDRSIII_On \tUPDRSIII_Off \tNFOGQ\nevents = pd.read_csv(p+'events.csv') #\tId \tInit \tCompletion \tType \tKinetic\ntasks = pd.read_csv(p+'tasks.csv') #Id \tBegin \tEnd \tTask\ndaily = pd.read_csv(p+'daily_metadata.csv') # \tId \tSubject \tVisit \tBeginning of recording [00:00-23:59]\nmeta = pd.read_csv(p+'tdcsfog_metadata.csv') #Id \tSubject \tVisit \tTest \tMedication\ndefog = pd.read_csv(p+'defog_metadata.csv') #Id \tSubject \tVisit \tMedication\nsub = pd.read_csv(p+'sample_submission.csv') #\tId \tStartHesitation \tTurn \tWalking\n#unlabeled = glob.glob(p+'unlabeled/**')\ntrain = glob.glob(p+'train/**/**') #Time \tAccV \tAccML \tAccAP \tStartHesitation \tTurn \tWalking \tValid \tTask\ntest = glob.glob(p+'test/**/**') #Time \tAccV \tAccML \tAccAP","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-03-17T04:09:28.789290Z","iopub.execute_input":"2023-03-17T04:09:28.789613Z","iopub.status.idle":"2023-03-17T04:09:34.913884Z","shell.execute_reply.started":"2023-03-17T04:09:28.789582Z","shell.execute_reply":"2023-03-17T04:09:34.912564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# func read data \ndef reader(f):\n    df = pd.read_csv(f)\n    df['Id'] = f.split('/')[-1].split('.')[0]\n    return df\n# read train data\ntrain = pd.concat([reader(f) for f in train]).fillna(0); print(train.shape)\ncols = [c for c in train.columns if c not in ['Id', 'StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']] # except categorical and target fetaure","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:09:34.918286Z","iopub.execute_input":"2023-03-17T04:09:34.918593Z","iopub.status.idle":"2023-03-17T04:10:49.454991Z","shell.execute_reply.started":"2023-03-17T04:09:34.918562Z","shell.execute_reply":"2023-03-17T04:10:49.452918Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:49.458151Z","iopub.execute_input":"2023-03-17T04:10:49.458549Z","iopub.status.idle":"2023-03-17T04:10:49.500455Z","shell.execute_reply.started":"2023-03-17T04:10:49.458507Z","shell.execute_reply":"2023-03-17T04:10:49.499058Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# read test data\ntest = pd.concat([reader(f) for f in test]).fillna(0); print(test.shape)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:49.503539Z","iopub.execute_input":"2023-03-17T04:10:49.504581Z","iopub.status.idle":"2023-03-17T04:10:49.984864Z","shell.execute_reply.started":"2023-03-17T04:10:49.504531Z","shell.execute_reply":"2023-03-17T04:10:49.983831Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reduce Memory Usage\n# reference : https://www.kaggle.com/code/arjanso/reducing-dataframe-memory-size-by-65 @ARJANGROEN\n\ndef reduce_memory_usage(df):\n    \n    start_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n    \n    for col in df.columns:\n        col_type = df[col].dtype.name\n        if ((col_type != 'datetime64[ns]') & (col_type != 'category')):\n            if (col_type != 'object'):\n                c_min = df[col].min()\n                c_max = df[col].max()\n\n                if str(col_type)[:3] == 'int':\n                    if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                        df[col] = df[col].astype(np.int8)\n                    elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                        df[col] = df[col].astype(np.int16)\n                    elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                        df[col] = df[col].astype(np.int32)\n                    elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                        df[col] = df[col].astype(np.int64)\n\n                else:\n                    if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                        df[col] = df[col].astype(np.float16)\n                    elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                        df[col] = df[col].astype(np.float32)\n                    else:\n                        pass\n            else:\n                df[col] = df[col].astype('category')\n    mem_usg = df.memory_usage().sum() / 1024**2 \n    print(\"Memory usage became: \",mem_usg,\" MB\")\n    \n    return df","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:49.989133Z","iopub.execute_input":"2023-03-17T04:10:49.991358Z","iopub.status.idle":"2023-03-17T04:10:50.008185Z","shell.execute_reply.started":"2023-03-17T04:10:49.991306Z","shell.execute_reply":"2023-03-17T04:10:50.007135Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train = reduce_memory_usage(train)\ntest = reduce_memory_usage(test)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:50.013239Z","iopub.execute_input":"2023-03-17T04:10:50.015889Z","iopub.status.idle":"2023-03-17T04:10:59.520807Z","shell.execute_reply.started":"2023-03-17T04:10:50.015850Z","shell.execute_reply":"2023-03-17T04:10:59.519594Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Feature engineering","metadata":{}},{"cell_type":"code","source":"def sqrt_df(x):\n    return np.sqrt(abs(x))\n\n\ndef feature_engineering(x):\n    # moving average\n    # x[[\"AccV_ma\",\"AccML_ma\",\"AccAP_ma\"]] = x[[\"AccV\",\"AccML\",\"AccAP\"]].rolling(window=2).mean()\n    \n    # delta with time\n    # x[\"AccV_delta\"] = (x.AccV - x.AccV.shift()).fillna(0)\n    # x[\"AccML_delta\"] = (x.AccML - x.AccML.shift()).fillna(0)\n    # x[\"AccAP_delta\"] = (x.AccAP - x.AccAP.shift()).fillna(0)\n    \n    # stride\n    x[\"Stride\"] = x[\"AccV\"] + x[\"AccML\"] + x[\"AccAP\"]\n    \n    # step\n    x[\"Step\"] = x[\"Stride\"].apply(sqrt_df)\n    \n    # fillna    \n    cols = [c for c in x.columns if c not in ['Id', 'StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']] # renew cols for new data from feature engineering\n    x[cols] = x[cols].fillna(0)\n    return x","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:59.522527Z","iopub.execute_input":"2023-03-17T04:10:59.522902Z","iopub.status.idle":"2023-03-17T04:10:59.530501Z","shell.execute_reply.started":"2023-03-17T04:10:59.522864Z","shell.execute_reply":"2023-03-17T04:10:59.529367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# add feature to train dataset\ntrain = feature_engineering(train)\ntrain.head()","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:10:59.532119Z","iopub.execute_input":"2023-03-17T04:10:59.532756Z","iopub.status.idle":"2023-03-17T04:11:38.277349Z","shell.execute_reply.started":"2023-03-17T04:10:59.532720Z","shell.execute_reply":"2023-03-17T04:11:38.276154Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# add feature to test dataset\ntest = feature_engineering(test)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:38.279253Z","iopub.execute_input":"2023-03-17T04:11:38.279639Z","iopub.status.idle":"2023-03-17T04:11:38.611154Z","shell.execute_reply.started":"2023-03-17T04:11:38.279601Z","shell.execute_reply":"2023-03-17T04:11:38.610036Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"*Through the Viedo(The video from description of this competiton) of walking patterns commonly observed in patients with Parkinson's disease, the patient's body was bent forward, the stride was short, and the soles of the feet were attracted to the ground.\nAt the same time, it was confirmed that people walk a lot with short strides in situations such as start point and turn.*","metadata":{}},{"cell_type":"markdown","source":"![image.png](attachment:5b22e00c-66d2-4e04-b541-9d5b2f0beb89.png)  \n- sample of gait cycle(https://www.orthobullets.com/foot-and-ankle/7001/gait-cycle)  \n\nI guess step is key feature of freezing of gait","metadata":{},"attachments":{"5b22e00c-66d2-4e04-b541-9d5b2f0beb89.png":{"image/png":"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QY0yQojf7x8eHvZ4POFwGG2w2WxWq/X3v//9/v37aZqGrYunCASCVB+Hi1IivtXR0aFSqbKzsy0Wy3/+5396vV6fz6fRaJ566qmamhqUEcQOhU3/Isb9cvqQJKnrm5ubb7jhBhx7/tOf/vSNN95ob28vLCx8/fXXcYzRBKYOjtnp6elhGObs2bPbt2//6quvtm7deuzYseHhYVwTTx5nwHkjhBAc0gIO7S9/+UtCyIEDB9asWdPd3T19+nShUPjoo49OAPpLpVK9Xs/n86+77rqMjIza2loej7d9+3aj0Xj48GEYhNzFlzDbIxqNvvDCC0899ZTP57v77rvvuOOOjRs34tDl119//Y033ti5c6fdblepVJyBR76J9CKXb9u2bQ8++KBQKLTZbCUlJVdcccU777wTCoXOYTKkOuEXFC4IWVtbe+bMmSeffDKRSODIDYqiHn300d27d/f09CQSiby8vItI5EWWI4rWL1iw4Kabbmpubm5paXniiSd27Nixfv367du3E0JAIcRXuArLiEx8+umnVVVV2dnZ3d3dt91225/+9Kfc3NyXX35ZqVSuWbPmo48+wvmwnJcBgfIH+xIuQFtb2/79+zdt2gRK2VNPPbVjx460tLTrr79+3bp1a9asOXToEBqMOrdUsqbrpORymqywDc6cOdPa2nr77bcTQk6cOGE2m0tLS+fOncuy7F133QXLc4KdFfGGn//850aj8de//vVf/vKXX/3qV6hBbrFYcNYNIGwwzhD5QIrG2NjYiy+++Mgjj+j1+rGxscbGxrlz58bj8cbGxs8++wzHmI33XGT9oHip0WicMWNGWlraoUOH8vPzOzo6uru7wV9JJBLw+C9Vp9nt9ra2tjfffLOtre0Xv/jFxo0b//znP1999dWEkPLy8j/84Q91dXV4ZWCtqNoKi5EQcurUqXfffff555/Hkd3Nzc1arVYgENx4442ffvopDq6lv3kyUiJZAPaCAmpbKBTq7Ozs6enZsmXLE088sWDBgueffx4choceeuif//wndMWUKVMm+75clmMkEkE1QJZlRSLRb3/728bGRhxihTqXMCNRSxrlIJAX9uWXX27evBkHxSIHUq1Wb926dcuWLT09PQ8//DAKkKOEEklJYUe4CDEbhmGOHTu2dOnSjIwMv9//3nvv3XnnnaiRrVQqf/zjH5eWln7xxRf9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"}}},{"cell_type":"markdown","source":"### Check the event with moving average of step","metadata":{}},{"cell_type":"code","source":"train[train[\"Turn\"]==1][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:38.615835Z","iopub.execute_input":"2023-03-17T04:11:38.616150Z","iopub.status.idle":"2023-03-17T04:11:38.932012Z","shell.execute_reply.started":"2023-03-17T04:11:38.616121Z","shell.execute_reply":"2023-03-17T04:11:38.930910Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[train[\"Turn\"]==0][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:38.933503Z","iopub.execute_input":"2023-03-17T04:11:38.933845Z","iopub.status.idle":"2023-03-17T04:11:41.656534Z","shell.execute_reply.started":"2023-03-17T04:11:38.933808Z","shell.execute_reply":"2023-03-17T04:11:41.655372Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"*When a Parkinson's disease patient turns, Patient moves a little and repeatedly  \nSo, I guesses that the value measured by the sensor system was small on the protrusion*","metadata":{}},{"cell_type":"code","source":"train[train[\"Walking\"]==1][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:41.657977Z","iopub.execute_input":"2023-03-17T04:11:41.658480Z","iopub.status.idle":"2023-03-17T04:11:41.855619Z","shell.execute_reply.started":"2023-03-17T04:11:41.658438Z","shell.execute_reply":"2023-03-17T04:11:41.854500Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[train[\"Walking\"]==0][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:41.856835Z","iopub.execute_input":"2023-03-17T04:11:41.857728Z","iopub.status.idle":"2023-03-17T04:11:44.743484Z","shell.execute_reply.started":"2023-03-17T04:11:41.857677Z","shell.execute_reply":"2023-03-17T04:11:44.742336Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"*If a patient with Parkinson's disease has a walking disorder, it is difficult to take a quick step, so it is assumed that the value measured by the sensor system is small.*","metadata":{}},{"cell_type":"code","source":"train[train[\"StartHesitation\"]==1][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:44.744882Z","iopub.execute_input":"2023-03-17T04:11:44.745353Z","iopub.status.idle":"2023-03-17T04:11:44.944763Z","shell.execute_reply.started":"2023-03-17T04:11:44.745308Z","shell.execute_reply":"2023-03-17T04:11:44.943541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train[train[\"StartHesitation\"]==0][\"Step\"].rolling(window=10,min_periods=1).mean().head(10)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:44.946401Z","iopub.execute_input":"2023-03-17T04:11:44.947011Z","iopub.status.idle":"2023-03-17T04:11:48.122639Z","shell.execute_reply.started":"2023-03-17T04:11:44.946952Z","shell.execute_reply":"2023-03-17T04:11:48.121717Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"*The sensor system estimates that the value measured by Parkinson's disease patients is larger because their upper body moves more than their legs when they start walking.*","metadata":{}},{"cell_type":"code","source":"# add feature\ntrain[\"Step_ma10\"] = train[\"Step\"].rolling(window=10,min_periods=1).mean()\ntest[\"Step_ma10\"] = test[\"Step\"].rolling(window=10,min_periods=1).mean()","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:48.123919Z","iopub.execute_input":"2023-03-17T04:11:48.124764Z","iopub.status.idle":"2023-03-17T04:11:48.945949Z","shell.execute_reply.started":"2023-03-17T04:11:48.124725Z","shell.execute_reply":"2023-03-17T04:11:48.944930Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model train ","metadata":{}},{"cell_type":"code","source":"import torch\ndevice = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\") # for using gpu","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:48.947505Z","iopub.execute_input":"2023-03-17T04:11:48.948119Z","iopub.status.idle":"2023-03-17T04:11:49.768089Z","shell.execute_reply.started":"2023-03-17T04:11:48.948061Z","shell.execute_reply":"2023-03-17T04:11:49.767042Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cols = [c for c in train.columns if c not in ['Id', 'StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']] # for drop the target!","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:49.769765Z","iopub.execute_input":"2023-03-17T04:11:49.770499Z","iopub.status.idle":"2023-03-17T04:11:49.777410Z","shell.execute_reply.started":"2023-03-17T04:11:49.770458Z","shell.execute_reply":"2023-03-17T04:11:49.774711Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Data split\nx1, x2, y1, y2 = model_selection.train_test_split(train[cols], train[['StartHesitation', 'Turn' , 'Walking']],shuffle=False, test_size=.3, random_state=3)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:49.779849Z","iopub.execute_input":"2023-03-17T04:11:49.780949Z","iopub.status.idle":"2023-03-17T04:11:54.699951Z","shell.execute_reply.started":"2023-03-17T04:11:49.780909Z","shell.execute_reply":"2023-03-17T04:11:54.698840Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dataset\nfrom torch.utils.data import Dataset\n\nclass dataset_build(Dataset):\n    def __init__(self,x,y):\n        # make pytorch tesnsor\n        self.x = torch.tensor(x.to_numpy(),dtype=torch.float32)\n        self.y = torch.tensor(y.to_numpy(),dtype=torch.float32)\n        self.len = x.shape[0]\n\n    def __getitem__(self,idx):\n        return self.x[idx],self.y[idx]\n  \n    def __len__(self):\n        return self.len\n\ntrain_dataset = dataset_build(x1,y1)\nvalid_dataset = dataset_build(x2,y2)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:54.701441Z","iopub.execute_input":"2023-03-17T04:11:54.701778Z","iopub.status.idle":"2023-03-17T04:11:56.529974Z","shell.execute_reply.started":"2023-03-17T04:11:54.701741Z","shell.execute_reply":"2023-03-17T04:11:56.528797Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class dataset_build_test(Dataset):\n    def __init__(self,x):\n        # make pytorch tesnsor\n        self.id_num = x[\"Id\"].to_numpy()\n        self.x = torch.tensor(x[cols].to_numpy(),dtype=torch.float32)\n        self.len = x.shape[0]\n\n    def __getitem__(self,idx):\n        return self.x[idx],self.id_num[idx]\n  \n    def __len__(self):\n        return self.len","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:56.531403Z","iopub.execute_input":"2023-03-17T04:11:56.532574Z","iopub.status.idle":"2023-03-17T04:11:56.540397Z","shell.execute_reply.started":"2023-03-17T04:11:56.532530Z","shell.execute_reply":"2023-03-17T04:11:56.538962Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"cols_ = [c for c in train.columns if c not in ['StartHesitation', 'Turn' , 'Walking', 'Valid', 'Task','Event']] # for drop the target!\ntest_dataset = dataset_build_test(test[cols_])","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:11:56.542102Z","iopub.execute_input":"2023-03-17T04:11:56.542610Z","iopub.status.idle":"2023-03-17T04:11:56.570121Z","shell.execute_reply.started":"2023-03-17T04:11:56.542569Z","shell.execute_reply":"2023-03-17T04:11:56.569044Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#dataloader\nfrom torch.utils.data import DataLoader \n\ntrain_loader = DataLoader(train_dataset,shuffle=False,drop_last=True, batch_size=256)\ntest_loader = DataLoader(test_dataset,shuffle=False, batch_size=32)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:16:00.478927Z","iopub.execute_input":"2023-03-17T04:16:00.479686Z","iopub.status.idle":"2023-03-17T04:16:00.485301Z","shell.execute_reply.started":"2023-03-17T04:16:00.479646Z","shell.execute_reply":"2023-03-17T04:16:00.483875Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#neural network\nfrom torch import nn\n\nclass neural_network(nn.Module):\n    def __init__(self):\n        super(neural_network,self).__init__()\n        self.lstm = nn.LSTM(input_size=1,hidden_size=5,num_layers=1,batch_first=True)\n        self.fc1 = nn.Linear(in_features=5,out_features=3)\n\n    def forward(self,x):\n        output,_status = self.lstm(x)\n        output = output[:,-1,:]\n        output = self.fc1(torch.relu(output))\n        return output\n\nmodel = neural_network().to(device)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:16:00.858648Z","iopub.execute_input":"2023-03-17T04:16:00.859774Z","iopub.status.idle":"2023-03-17T04:16:00.873608Z","shell.execute_reply.started":"2023-03-17T04:16:00.859727Z","shell.execute_reply":"2023-03-17T04:16:00.872473Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# optimizer , loss\ncriterion = torch.nn.BCEWithLogitsLoss()\noptimizer = torch.optim.Adam(model.parameters(),lr=0.0001)\nepochs = 7","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:37:08.644426Z","iopub.execute_input":"2023-03-17T04:37:08.644872Z","iopub.status.idle":"2023-03-17T04:37:08.654931Z","shell.execute_reply.started":"2023-03-17T04:37:08.644829Z","shell.execute_reply":"2023-03-17T04:37:08.652525Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#training loop\nfor i in range(epochs):\n    loss_sum = 0\n    for j,data in enumerate(train_loader):\n        train_x,train_y = data[:][0],data[:][1]\n        y_pred = model(train_x.reshape(-1,7,1).to(device))\n        y_pred = y_pred\n        loss = criterion(y_pred,train_y.to(device))\n        loss.backward()\n        optimizer.step()\n        optimizer.zero_grad()\n \n        loss_sum += loss.item()\n        \n    if i%2 == 0:\n        print(i,\"th iteration : \",loss_sum/len(train_loader))\n\n## Submit","metadata":{"execution":{"iopub.status.busy":"2023-03-17T04:37:38.735805Z","iopub.execute_input":"2023-03-17T04:37:38.736948Z","iopub.status.idle":"2023-03-17T05:18:35.764292Z","shell.execute_reply.started":"2023-03-17T04:37:38.736906Z","shell.execute_reply":"2023-03-17T05:18:35.761888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# 0 th iteration :  0.7242311756713296\n# 2 th iteration :  0.5415780932241675\n# 4 th iteration :  0.36264049582903135\n# 6 th iteration :  0.2817067605714282","metadata":{"execution":{"iopub.status.busy":"2023-03-17T05:19:54.582791Z","iopub.execute_input":"2023-03-17T05:19:54.583181Z","iopub.status.idle":"2023-03-17T05:19:54.587858Z","shell.execute_reply.started":"2023-03-17T05:19:54.583145Z","shell.execute_reply":"2023-03-17T05:19:54.586552Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# predict test dataset\nsubmission = []\nid_num = []\nfor test_data in test_loader:\n    y_test_pred = model(test_data[:][0].reshape(-1,7,1).to(device))\n    y_test_pred = y_test_pred.reshape(-1,3)\n    y_test_pred = torch.clip(y_test_pred,0,1)\n    submission.extend(y_test_pred.detach().cpu().numpy())\n    id_num.extend(test_data[:][1])","metadata":{"execution":{"iopub.status.busy":"2023-03-17T05:18:41.208080Z","iopub.execute_input":"2023-03-17T05:18:41.208556Z","iopub.status.idle":"2023-03-17T05:18:48.265421Z","shell.execute_reply.started":"2023-03-17T05:18:41.208519Z","shell.execute_reply":"2023-03-17T05:18:48.264361Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"preds = np.array(submission)\nsub[['StartHesitation', 'Turn' , 'Walking']]=preds\nsub[\"Id\"] = np.array(id_num)\nsub.to_csv(\"submission.csv\", index=False)","metadata":{"execution":{"iopub.status.busy":"2023-03-17T05:18:51.866142Z","iopub.execute_input":"2023-03-17T05:18:51.866527Z","iopub.status.idle":"2023-03-17T05:18:52.527760Z","shell.execute_reply.started":"2023-03-17T05:18:51.866493Z","shell.execute_reply":"2023-03-17T05:18:52.526713Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"sub[['Id','StartHesitation', 'Turn' , 'Walking']].head()","metadata":{"execution":{"iopub.status.busy":"2023-03-17T05:18:52.529452Z","iopub.execute_input":"2023-03-17T05:18:52.529806Z","iopub.status.idle":"2023-03-17T05:18:52.552279Z","shell.execute_reply.started":"2023-03-17T05:18:52.529767Z","shell.execute_reply":"2023-03-17T05:18:52.551033Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**The END**\n---------------\n- This notebook shows the process of implementing the model using the basic of Pytorch.\n- I hope that you like any point in this notebook","metadata":{}}]}