{"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":"gpu","dataSources":[{"sourceId":71916,"databundleVersionId":7877098,"sourceType":"competition"}],"dockerImageVersionId":30665,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import warnings\nwarnings.filterwarnings('ignore')\n\nimport os\nimport numpy as np\nimport pandas as pd\nimport torch\nfrom torch import nn\nimport torch.nn.functional as F\nimport torchaudio\nimport torchmetrics\nfrom sklearn.model_selection import train_test_split\nfrom torch.utils.data import DataLoader, Dataset\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-03-23T20:14:59.076542Z","iopub.execute_input":"2024-03-23T20:14:59.077804Z","iopub.status.idle":"2024-03-23T20:15:09.046357Z","shell.execute_reply.started":"2024-03-23T20:14:59.077768Z","shell.execute_reply":"2024-03-23T20:15:09.045371Z"},"trusted":true},"outputs":[],"execution_count":1},{"cell_type":"code","source":"TRAIN_DIR_PATH = '/kaggle/input/msu-robust-speech-commands-classification/train/train'\nTEST_DIR_PATH = '/kaggle/input/msu-robust-speech-commands-classification/adv_test/adv_test'\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.054373Z","iopub.execute_input":"2024-03-23T20:15:09.054648Z","iopub.status.idle":"2024-03-23T20:15:09.058868Z","shell.execute_reply.started":"2024-03-23T20:15:09.054624Z","shell.execute_reply":"2024-03-23T20:15:09.057844Z"},"trusted":true},"outputs":[],"execution_count":2},{"cell_type":"code","source":"BATCH_SIZE = 256\nN_WORKERS = 8\nN_CLASSES = 35\nEPOCHS = 50\nLR = 0.005\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.059987Z","iopub.execute_input":"2024-03-23T20:15:09.060306Z","iopub.status.idle":"2024-03-23T20:15:09.069808Z","shell.execute_reply.started":"2024-03-23T20:15:09.060278Z","shell.execute_reply":"2024-03-23T20:15:09.068949Z"},"trusted":true},"outputs":[],"execution_count":3},{"cell_type":"code","source":"DEVICE = torch.device('cpu')\nif torch.cuda.is_available():\n    DEVICE = torch.device('cuda:0')\nelif torch.backends.mps.is_available():\n    DEVICE = torch.device('mps')\n\nDEVICE\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.071052Z","iopub.execute_input":"2024-03-23T20:15:09.071397Z","iopub.status.idle":"2024-03-23T20:15:09.103734Z","shell.execute_reply.started":"2024-03-23T20:15:09.071368Z","shell.execute_reply":"2024-03-23T20:15:09.102773Z"},"trusted":true},"outputs":[{"execution_count":4,"output_type":"execute_result","data":{"text/plain":"device(type='cuda', index=0)"},"metadata":{}}],"execution_count":4},{"cell_type":"code","source":"class SpeechCommandDataset(Dataset):\n    def __init__(self, dir_path, data, labels=None, dict_label_to_index=None, transform=None):\n        self.dir_path = dir_path\n        self.data = data\n        self.labels = labels\n        self.dict_label_to_index = dict_label_to_index\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        file_name = self.data[idx]\n        waveform = np.load(os.path.join(self.dir_path, file_name))\n        if waveform.shape[1] < 16000:\n            waveform = np.pad(\n                waveform, pad_width=((0, 0), (0, 16000 - waveform.shape[1])),\n                mode='constant',\n                constant_values=0\n            )\n\n        waveform = torch.from_numpy(waveform)\n\n        if self.transform != None:\n            waveform = self.transform(waveform.float())\n        \n        out_labels = []\n        if self.labels is not None:\n            if self.labels[idx] in self.dict_label_to_index:\n                out_labels = self.dict_label_to_index[self.labels[idx]]\n        return waveform, out_labels, int(file_name.split('.')[0])","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.105124Z","iopub.execute_input":"2024-03-23T20:15:09.105528Z","iopub.status.idle":"2024-03-23T20:15:09.117127Z","shell.execute_reply.started":"2024-03-23T20:15:09.105498Z","shell.execute_reply":"2024-03-23T20:15:09.116335Z"},"trusted":true},"outputs":[],"execution_count":5},{"cell_type":"code","source":"df_train = pd.read_csv(\n    os.path.join(TRAIN_DIR_PATH, 'metadata.csv')\n)\ndict_label_to_index = {}\ndict_index_to_label = {}\nfor index, key in enumerate(df_train['label'].unique()):\n    dict_label_to_index[key] = index\n    dict_index_to_label[index] = key\n\ndict_label_to_index","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.120461Z","iopub.execute_input":"2024-03-23T20:15:09.120701Z","iopub.status.idle":"2024-03-23T20:15:09.30306Z","shell.execute_reply.started":"2024-03-23T20:15:09.120681Z","shell.execute_reply":"2024-03-23T20:15:09.302178Z"},"trusted":true},"outputs":[{"execution_count":6,"output_type":"execute_result","data":{"text/plain":"{'stop': 0,\n 'go': 1,\n 'right': 2,\n 'dog': 3,\n 'left': 4,\n 'yes': 5,\n 'zero': 6,\n 'four': 7,\n 'bird': 8,\n 'cat': 9,\n 'five': 10,\n 'off': 11,\n 'learn': 12,\n 'six': 13,\n 'two': 14,\n 'on': 15,\n 'up': 16,\n 'three': 17,\n 'nine': 18,\n 'one': 19,\n 'follow': 20,\n 'wow': 21,\n 'seven': 22,\n 'sheila': 23,\n 'down': 24,\n 'no': 25,\n 'bed': 26,\n 'eight': 27,\n 'house': 28,\n 'tree': 29,\n 'visual': 30,\n 'forward': 31,\n 'marvin': 32,\n 'backward': 33,\n 'happy': 34}"},"metadata":{}}],"execution_count":6},{"cell_type":"code","source":"df_train_data, df_val_data = train_test_split(\n    df_train,\n    test_size=0.2,\n    random_state=42,\n    shuffle=True\n)\n\ntrain_data = df_train_data.file_name.values\ntrain_labels = df_train_data.label.values\n\nval_data = df_val_data.file_name.values\nval_labels = df_val_data.label.values\n\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:09.304113Z","iopub.execute_input":"2024-03-23T20:15:09.304388Z","iopub.status.idle":"2024-03-23T20:15:09.327335Z","shell.execute_reply.started":"2024-03-23T20:15:09.304367Z","shell.execute_reply":"2024-03-23T20:15:09.326563Z"},"trusted":true},"outputs":[],"execution_count":7},{"cell_type":"code","source":"from IPython.display import Audio, display\n\nkek = SpeechCommandDataset(\n        dir_path=TRAIN_DIR_PATH,\n        data=train_data,\n        labels=train_labels,\n        dict_label_to_index=dict_label_to_index,\n        # transform=train_transforms\n    )\nprint('аудиозаписей в трейн датасете:', len(kek))\naudio_idx = 1338\nprint(dict_index_to_label[kek[audio_idx][1]])\ndisplay(Audio(kek[audio_idx][0], rate=16000))","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:19.398089Z","iopub.execute_input":"2024-03-23T20:15:19.398456Z","iopub.status.idle":"2024-03-23T20:15:19.423939Z","shell.execute_reply.started":"2024-03-23T20:15:19.398428Z","shell.execute_reply":"2024-03-23T20:15:19.42279Z"},"trusted":true},"outputs":[{"name":"stdout","text":"аудиозаписей в трейн датасете: 76196\nleft\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<IPython.lib.display.Audio object>","text/html":"\n                <audio  controls=\"controls\" >\n                    <source src=\"data:audio/wav;base64,UklGRiR9AABXQVZFZm10IBAAAAABAAEAgD4AAAB9AAACABAAZGF0YQB9AAABAAEA//8AAAAA+//6//v/AAABAP///f8AAAEA///7//v///8AAAEAAQAAAAAAAAABAAEAAQABAAEAAQABAP///f/9//3//f8AAAEAAAD//wAA///6//r/+////wAAAQABAAEAAQAAAPv/+v/7///////9//3//f/9//v/+////wAAAQADAAgABQAFAAUABgAGAAUAAwADAAEA///9//3//f8AAAAAAQADAAAAAwAFAAYACAAKAAYAAwADAAEA/f///wAAAAAAAAAAAwAGAAYAAwABAAUABgAFAAYABgAGAAMA///9//v//f/7//v////9//3//f/9/wAAAQABAAMAAwABAP///f////3/+v/6//r////9//r////9//v/+//7//3//f////3/AQABAAEAAAD6//r/+P/6//r/+v/9////////////+//9////AAABAAEAAQADAAEAAAD///3//f8AAAEAAQABAAEAAQAAAAEAAAAAAAEAAQABAAMABgADAAEAAwADAAEA//8AAP3//f/9////AQAAAAUAAQABAAMAAQADAAEAAwAFAAUABQADAAMAAQAAAAAAAAAFAAUABQAFAAUABQABAAEAAQAGAAoABgADAAEAAQD///v/+v///wAA//8BAAEAAAD//wEAAQAAAAAAAwAGAAMAAwD9//v/+v/2//j//f8BAAEA/f///wAAAAABAAEAAwAFAAUAAQABAAAA/f/7//r/+//6//b/+v/6//j/+//9//v///8AAP/////9//3/AAD///3////9//3/+//6//3///////3/AAABAAEAAQAAAAAA/////wAA///9////+v/6//j/+P/7//3/AQAAAAEAAQAFAAUAAwABAAUABQABAAEAAAABAAAA///9//3//f8AAAEAAQABAAEAAQABAAEA//////3//f/9//3//f/7/wAABQAFAAUACAAKAAgACgAGAAYACAAKAAUAAQAAAPv/+//6//3//f///wMAAwAFAAUABgAKAA8ADQAMAAYABgAFAAAA+//6//r//f8AAPv///8AAAEAAQAAAAEAAQAFAAMAAAAAAPv/9P/4//b/+P/7////AAAAAAEAAQAAAAEA///9//////////3/+//7//v/+//6//3//f///wAAAAABAAMAAwADAAEA//8BAAEAAQD9//3//f/6//j/+P/7//v//f/9//3//f8BAAEAAwABAAYACAADAAMAAQADAP3//f/9//3/+////wEAAQAFAAMABQADAAgAAwAGAAUABQAFAAAABgD//wEA+////wEAAwADAAMABgADAAoAAQAGAAMABgADAAMAAwD//wEA//8GAP3/BQADAAYAAwABAAMAAAADAP3/AwD4/wAA+P/7//b/9v/6//b////4/wAA/f8AAPv//f8AAP//BQAAAAgAAQAFAP///f/2//b/+v/0//3/8//7/+//+P/z//b/9v/2//3/9v////b/AAD6/wAA+//9//3/9v/9//j/AAD6/wEA//8GAAEAAQABAAAABQD//wUA+/8DAAMACAABAAUAAAAFAAYAAAAIAAMADAADAAoABQAGAAUAAwAAAP//AQD6//3//f8BAP//AQAAAAUABQAKAAYABgANAAgACgAGAAoAAwAGAAEAAQD7//v//f/6//v/9v////3/AwADAAUAAwABAAEAAAABAAAAAwADAAEAAAABAAAABQADAAYACAAFAAgABQADAAMAAQD9//v/+P/2//j/8//x//H/8//z//H/8//z//T/+P/2//r/+///////AAABAAEA//8BAP3//f/9//r//f/4//r/9P/6//P/9P/2//3/AAADAAgABQAIAAMABgD9/wMA/f8BAAAAAAD9//v//////wEA+/8BAP//CgAIAA8ACAAGAAwABQAKAAUACAABAAYABQAGAAYACAAFAAMAAQD//wMA//8BAP3//f/7//v/+v/2//j/+/8AAP//AAABAAUACAAKAAwADQATABQAEwATAA8ADAAGAAMAAAADAP3/+//9//3//f/4//v/9P/9//b/+//6//v//f/4/wAA/f8DAPj/AAD4/wAA9v/2//r/+P8BAPj/CAD7/woA+P8DAPr//f/9//P/AADv////6v/9/+3/AAD2///////9/wgA//8PAP3/FAAAABMA/f8FAP3/+//6/+//+//q/wEA7P8AAOz/AADz//3///8BAAgA//8PAPv/DAD0/wUA+v8FAAEACAAKAAEADAD//woA/f8NAAMACAAFAAUABQAAAAMA+P8AAPj/AQAAAAMAAwABAAYAAAADAP//BgD//wAA//////3/+P/6//b/+v/2//3/AAAAAAAAAwANAA8AFAATAA8ADAAKAAoACAAGAAMAAQABAAMAAAABAAAAAQD/////AQD9/wUA/f////T/+v/x//P/8//z//v/8f8DAPT/CgD7/w0ABQANAA8ACAAUAP//FAD0/xEA8f8KAPT/+//7//T/BgDl/w8A4f8RAN7/BgDl//r/7P/m//r/3P8MANn/FADh/x8A9v8aAAgAEQAkAAUAMAD4/zAA8/8nAPH/FgD2////+P/s/wMA5f8PAN//EwDl/xoA7P8PAPj/CAAMAP//FADv/x0A5f8YAOP/EQDt/w0AAAABAAoA+P8KAO//FADv/xoA8f8WAPv/CAD7////AwD6/woA+P8PAPH/FgDm/w8A5f8IAOz/+//t/+//AADf/wUA1/8RAOH/HQD0/yEACgAdABoADwAmAAAAMADx/ykA6v8aAOj/CADt//b/+v/o/woA3/8aANn/HwDf/xQA5v8DAOz/6v/4/87//f+9/wMAvf8MAND/CgDh/wAA+P/6/xEA6P8kAOP/LgDj/ysA6v8dAPb/AwABAO//DQDa/xYA0/8WANr/GADx/w0A//8DAA0A+v8aAPb/HQDv/x8A8/8YAP3/GgANABsAGAATAB8ADAAhAAMAIgD//yEA+/8PAPP/AQDs//j/+P/x/wEA5f8BAN//AwDe/wAA4f8DAOz/+/////r/EQADACcACAA0ABQANQAbAC4AIQAkACIAEwAmAAgAJAABABYA//8KAP//BQAKAAoAFgANAB8AEQAbABEAGgANABEADAAKAAMA+v/2//T/8f/x/+z/8f/t//T/7P/4//v///////v/+//v//b/2v/s/9P/4//V/+b/3P/q/+3/8/8AAAAAEQABABoAAwAUAP3/DADt//v/6v/z/+P/6P/q/+b/8//a////2f8DANr/DADl/xgA/f8YABgAFAA0ABMAVQANAFgADABOAAEANQATAA0ADwDe/woAr/8DAJ3/DACo/w8A1f8YABoAJABtAEoAvwBwAAEBmgAiAa8AFwHZAOAA1wCYAMcAMgCCAMv/EwBb/5//+P4U/7/+nv6g/mH+qP5S/uX+mf5O/x//1//f/18AngDsAE8BWAG7AZMBzgGAAY8BIwH1AIkAKQDM/2L/Gf+u/n3+If4K/tH94f3d/QP+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4//h/+X/4f/h/+X/5f/m////DAAPABgAJgAhABMAAQDq/9//0//h//r/BQANABoAGAAFAAgACgADAPP/6v/l/9n/1f/e//H/AQAKABMAFgADAOr/0v/L/8z/zv/a/+r/9P/0//b/9P/s/+r/7f/4/wAAAAAFAAgADAAGAAAA/f8BAAwABgABAA0AFAAUABsAFgATABYADQD6/9//3P/j/+z//f8IABgADwDv/9r/3P/f/+//BQAMAAwABQD9/woAFAAWAB8AHQAiABsADwABAPP/BQAkAC0AMAArACYAGwAPABYAHwAtAD4APAA1ABoABQD9//H/CAAmAC4AMgAuABgADAD2/+X/7//4/wUACgD6//b/8f/j/9z/3/8DAB8AHwAWAPv/7P/c/9D/5f/0//P/7f/l/9L/wP/A/8n/3//7/wgADAD0/+r/6P/V/9X/3P/j/+H/5v/c/73/sv+q/6b/wP/Z//r/BgATAB0ACgAFAAYAAQD9/wMA+//m/97/6P/o//P/HQApADQAPgAuAB0ADAANABYAGAAwADQAJwAkAAEA4//Q/9f/7//x/wYAGAD9//P/8f/v////CAAbABoAFgAYAAUA+////xEAIQAnADAANAAiAAwAAQD6//r/FgA3AD4AMgApAB0ACgAUACIAKQA1ADUAIQD//+P/zP+4/7b/1//h/9n/4f/v//b/8f///wEA+v8DAPr/6v/a/9P/xP+9/8z/0v/j/+3/+P/4/wEACgAIAAoAFgAdAA8ACAAGAAUACAAdACQAIgAfACEAKQAdAB0AGgAPACEAKQApACcAHQAhABYACAD9/+//+/8FABYAJAAtADkAMgAwAC0AGAADAPT/7//t/9//6P/6/wMAAQAFAAUACgARAPr/7P/h/9D/xf+t/6T/o/+O/4z/n/+a/5D/n/+y/8f/2f/x//r/+/////H/2v+4/63/rf+t/7L/tv+9/8D/0P/V/+H/8f8FABoAFAAaABQA///z/+X/4f/v//j/CAAaABQAGwAbABMAGAAaACcAKwAkACEAHwARAA8AJgAyAD4AVgBmAGsAZgBkAFgAVQBVAFEAXABOAD4AOwAnAB0AGgAbADcARQBPAFMATABCAC0AMgBAAEcAQgApAAUA6P/O/8f/zP/Q/+z/CgATABoAKQAnACYALQAkABgAGAAGAN//wv+2/6r/uf/c//T/AQD6/+H/xf+x/63/uP+9/8T/zv/H/7H/qv+k/6P/uf/F/8n/wv+y/6T/o/+o/6b/q//A/9D/6v/s/+H/4f/X/+H/8//9/wYABQD//+P/1f/f/+3/BQAhADAANwAmAA0ABgABAAMACAAKAAwAFAARAAAA+/8BAAoAEQAfACkAKQArACQAHQAiACEANQBIAFEAUQA5ACkAJAAkAC0ANwBAAEMATgBRAEgATABMAEoASABAADIAIgAWABgAGgAkAB0AGwAkABoAKQAuACcANAA5ADcAKQAKAPv/8f/q/+z/6P/o/9r/y//C/7n/q/+2/8f/2v/q/9n/zP+2/6H/qP+d/5//u/++/7T/pv+T/4n/g/+f/73/0v/c/9f/0P/C/77/xf/Z/+z/+v8BAPT/1f/C/7T/xP/Q/+b/EwATAAwA///v/+z/3v/0/x8ANAAuAB0AGgAaAAoADQAPABEAIQAhABQA9P/q/+j/5v8DAB0ANAA1ADsAQAAwACkALQArADkATABFADAAHQAUAAEAAwAaACsAQABKAEwASgA7ADIAKQAyAEUAQgA7ADQAJwAUAAMAAAAAAAEAGAAiABYAFgAiACIAJgA+AFgAXwBdAGMAUwAyAA0A9P/z//b///8MAAwAFAAKAA0AIQAYACQAMgA1ADUAJgAKAOb/xf++/7v/u/+7/7v/xP+7/7n/tv+t/7T/xf/Z/+P/7//j/8f/r/+W/4z/h/+M/5H/nP+t/6//pv+o/5//qP+4/8L/1f/M/77/tv+o/5//pP+y/8v/4//q/+P/4//c/9P/0v/a//T/AwANABgADQAAAPb/AAAWABoAKwA5ADcAPgA0ACkAMgA+AEgAUQBdAF8ASgBCADsAPABFAFEAYwBkAFoAXwBjAFYAXwB0AIIAjgCFAHQAbQBVAEIAQgA1ADQANwBDAEMAOwA8ADwAOwA8AE4AVgBRAEMANwAhAAwA9P/t/+r/3//X/9n/3v/a/97/7f/q/+j/+/////j/8f/o/9n/xP++/7b/pP+V/5z/pv+W/5j/qv+v/8T/2f/j/9//5f/s/+b/5v/l/+X/2v/L/8v/yf+x/5b/mv+V/5r/rf+7/9L/4f/q//b////7//v/+//6//b/6P/m/9//yf/H/8f/zv/f//T/EQAfABsAGwAfACEAMAAyADAAOwAuABoABgD9//r/BQATACYANAAwADQANAAuADUAQgBIAEoATwBVAEoAPgAyAC4AMgAuAC4ANwAyADIAMgA3ADkANwA+ADsANwArAC0AOQAtAC0AOQAmAB0AGgATABMACAANAA8ABQABAPj/7P/v//b////2//3/AQD7//b/4//c/9n/0v/Q/87/zP/Q/9D/zv+5/7n/sv+r/7H/r//E/8n/wv/M/8f/xP/O/9r/4//j/+X/5v/j/8v/xP+9/7j/xP/a/+//+P////P/7f/v/+z///8IABMALQAwACIACgD0/+b/6P/0/wYADwAMAAUAAAAMAA0AGAAmACYAMAAtACIAGgAUAP//9P8AAAEABgABAPb/+v/6/wMAEQAfAC0ALgAiABYAEQAMAAAA7//v/wAAAwD7//v/8f/q/+j/9P8IAAEA//8MAB0AHQAIAPr/6P/a/9X/x//H/9X/5f/x//b//f8NABEADwAaACEAHQAbABYAAQD7//H/6P/s/97/4f/o/+j/AQAMAB0AMAA1ADwANwArAB8ADQADAP3/AQAMAAgABQDq/97/4f/l//3/EwAfADAANQArABsAFgATAAgAAwDx//H/6v/c/9r/3P/l//H/AAD//wMAAQDt/97/4f/j//H///8BAP//7//a/8z/wP+4/8D/1//t////BQD6/+j/5v/s//T/DAAUAA0ABgD0//P/9v/9//3///8GAAYA+P/x//r/AAAMABYAJgAnABEA+//x/+////8UACEAHQAYAAUA+P/x/+b/5v/t/w8AIgAiAB8AEQAAAAgAEwAWABYAGgAYAAgAAQD6//v/+v8AABMAFgAbABoAEQAPAAoAEwAWABEADwD///T/8//7/wYADQARABEAGwAkACcAHQAaABsAFgAPAA8AEQD9/+3/8f/0/wEAAwAAAAgABgAKABQAGgAbABQAAwD6/+3/3//X/9D/0P/V/+b/8//9/wMA+//2//T/7f/q//H/6v/l//H/8f/v/+3/5v/j/+H/6v/o//T/9P/s/wYADwATABEABQABAAoAEwAMAAUACAAMAAoABgD9//r/AwABAAEACAAPABMAFAAMAAgAEQAIAAMAAwAAAPT/7f/v/+j/4f/j/+P/7P/7//j/+P/9////DQAGAAoABgD6//3/9P8AAAoADQAKAAEAAwABAAgAEQAWACIAJwAiABQAAAD///v//f8PABoAHQAfABgADAAFAAAAAQAAAAAA+v/j/97/5v/h/+H/8f8MABEAFAAUAP3/7f/z////BQAGAP//8f/h/9z/6P/0/wYAFgAdABgAEwAKAP3///8KAAoADwAYAAgA7//h/9P/1f/l/wAAIgAnAB8ADwAGAPT/6v/t//T//f/4//T/2f/C/73/u//O//P/+//6/wMABQADAAMA8f/q//H/9P/4//P/4f/Z/9X/0v/e/+z/7f/v//j/BgAPABMAEwANABgAIQAbAB0ACgD2/+3/7f/6/wMAEQAWAB8AKQA0ADIAKwArADAALQAnACkAKQAhABQACgABAAYABQAFABYAMAA5ADQAKQAwAC4AIQAbAAoABQABAAEAAADx/+//4f/j/+//9P8AAAAAAwANAA8AFgAiABQAAQD2/+3/4f/S/9f/0//O/9r/1f/e/+P/4f/v//b/+//7//j/6v/a/9n/0P/Q/9z/4f/f/9r/1//O/9D/2v/Q/9X/4f/m/+3/4//f/9r/y//F/87/3//q//P/+/8AAAoABgD6//v/AAAFAAYA+v/4//j/6v/l/9//5f/v//H/AQAUACIAIQAaACIAHwAhABgAAwAGAAMA9P/x/+3/8f8BAAwAEQAIAA0AEQAbADAAMAAtAB0AFgAmACkAHwATAAwADQATABgAGgAhAC0ANwA0ADQAQAA1AC4ALQAmAB0AFAAMAAUA+v/7/wUACAARAB0AJgAkACIAHwANAPj/+P/6//v/AAD7//H/4//q//P/6v/0/+3/7f/0////AQDx/+//7P/t//T/6P/t/+j/2v/f/87/x//E/87/3v/c/+P/3//T/87/xP/E/8T/tv+5/8L/wv/H/8n/wv/C/8X/0P/Q/9L/2v/Z/9n/2f/a/9z/4f/m/97/3P/f/+3/8/8BABgAHwAhACIAIgAfAB8AIgAiACEAJAAnACcAHQAiACIADwARABsAIQAmACkAKwA1ADwAPgAwACcAJAARABEAGAAbACIAIgAwADIAIgAaABYAFgAiADAAJAAfABYABQAGAAEADwAaACYALQAuAD4AOwAuACIAGAAdACcAJwAbABMADAAMABMAFAAUABEACgABAAUAAwAKAA0ABQAKAAYA/f/v/9f/0v/L/8v/0//T/9L/wP+0/7L/uf/J/8v/zv/X/9X/zv/O/8f/tv+2/7v/wv/M/9X/0/+9/7n/sv+x/8D/y//m//P/+/8DAPr///////3/AwAFAAUABgAKAAMA9P/z//j/AAARABgAHwAnAC0ANQA0AC0AEwAGAAYA/f8AAPv/+/8FAA8AGAATAAwACgAKABEAHwAnACsAJwAiAB0ADQADAAEACAAWACQAJgAiADAALgArACsAKwAyADwAQAA1AC4AJwAiABsAIgAnACIAKwAyADsANwArACkAGgAUAB0AGAAUAAgABQABAPb/8//l/+X/6v/t//T/8//v/+P/3v/V/8v/yf+9/8X/zP/Z/9r/y//H/8L/vf/E/8v/0//a/+P/3P/V/9D/wP+9/8T/zP/O/87/0v/a/+H/3P/Z/+H/7P/t//T//f/z/+z/5v/s/+//9v8DAAUACAAPAAwABQAMAA0ACAARABMAGAAfACcALgAhAB0AGgAdABMADwATAAEABgADAAEA/f/9/wYABgARABsAHwAfABsAHwAbABoACgD7//r///8IABQACgAGABQAGgAtADQAPgBFAEcAVQBTAEoAOwAtADAALQA0ADwAPAA7AD4AQwA8ADcAMAAtADUAPAA1AC0AJAAiAB0AEQAKAPv/8f/v//T/8//s/+r/6v/m/+H/3v/a/9D/zP/V/9n/1f/T/8n/wv++/77/tP+t/7v/wP/E/9D/y//F/8L/xf/J/8n/0P/J/8X/vv+2/73/wP/H/9D/zP/X/9P/0P/V/8L/uP+2/7v/yf/S/9P/zP/O/9D/1//h/+b/7f/0//v////7//b/8f/s//j/AwAFAAgADAAYAB0AJgArADQAQABHAFMATwBRAFUAWABqAGgAZgBkAF0AWgBMAEMARwBDAE8AYwBfAFgATAA+ADkANQA0ADAALgApACEAGAAIAPv/7//t//r////9//v/8//q/+j/5f/l/+P/7P/t/+P/5v/a/9P/0P/X/9P/3P/x/+r/7P/m/9n/4//s//H/9P/2/+//6P/h/9z/0v/J/8T/xf/X/9r/1//T/8z/0v/Q/9X/3v/c/9//4f/c/9D/x//J/87/0//l/+P/4f/t//P//f8BAAoACAATABsAEwAPAAYAAAAAAAYAFgAYAB8AJgApACEAGwAiABoAFgAdAB8AGAATAAoA+/8BAAYACAAWABMACgAIAPb/6v/m/+P/3//o//r/+/8AAP//8f/o/+z/9v/6////AwD6//H/AQAKAA0AFgAdACEAFgAbABsABQAAAP3////7//v/EQAMAAYADwANABMAFgAdABsACAD6/+//6P/q/+j/4//c/+j/9P/q//H/9v/s/+z/+v/9//P/7P/s//P/8f/6//v/8//9/wAABQABAPb/9P/q//H/AwAIAAYAAwADAAYAAwAIAAoADwAbACQAIQAKAPj/7f/j/+P/6v/x//P/AAAKAAUABQABAP3///8KAAYA9P/m/+P/1//T/+P/8f/z//b////7//H/8f/q/+b/8////wMABQD///b/7f/v////DwAbAB0AEQAGAAEAAAABAPv/+/8PABQADQAWAA0AAwANAB0AGgAWABEA/f/4//T/9P/7//j/AAAIAAoABQD7//H/9v///wwAGAAbABgAFAAKAAMACgAFAAUAEQAaABQABgAFAP3/AwARABMAIgAyADUALgAiACQAHwATACEAIQAWABYADwD//+3/9v8NAA0AHQAhABEAAQDv/+//7f/t////AwAKAAYA+P/m/9L/0P/X/9//7//x/+z/4//e/+b/4//c/+H/7P/q/+X/3//c/+H/6v/7/wAA/f8AAPj/7f/q/+//8////xEAFgATAAMA9v/x/+//AwARABEAGgAaAA8A+P/t/+j/4//2/wgADAAFAPT/7P/t//P/AwAIAA8AGwAYAAUA7f/f/9z/4//t//3////6//3/+P/z//H///8KABMAGwAaAAgA+/////r///8IAAwADQAKAA8ACgD4//b//f8DAA0AFgAUAA8ADAAIAAYAAQABAPj/8//2//v/7//o//P/+/8GAA8AEQAKAAoADQANAAgADwAMAAAAAQD///3///8DAAYACgAWABoAGAAYABoAHwAWABQAEQAKAA0ADwAMAAgADQANAA8AEwANAAgABgD///r/9P/2//r/+v/2/+3/4f/f/+P/7P/t/+r/8//x//v//f/x//H/5f/f/+z/7P/0//T/9P/7//P/9v/0//b/AAABAAwAEwAUABMACAAMAA0AAwD9////AwAAAPv/+/8BAAMABgATABEAFAAUAA8ADAAIAAYAAAABAAAAAwD///r/+//4//v/AQAAAAMAAwAMABgAFgAaABgADAARABQAFgATAA8ADQAGAAYAAwD///3/AQAGAA0AFgAhACcALQAwACcAGgARAAoABgD///v/+v/4//v////7//T/+P8BAAEAAAAGAAUAAAAFAAgAAADt/+P/2v/V/9n/4//o//P/AQAAAPr/+//4/+//7P/x//b/7f/m/+P/4f/e/+P/9P/4//j/9P/m/+b/5v/q/+z/8f/9//v////4/+r/5f/l/+z/+v///wMACgAIAAEA/f/4////BgAIAA8ADwAMAAYAAQAFAP///f//////CAAIABMAGAAKAAwA+//t//P/7P/v//r//f8GAAoAGAAdAA0AEQAKAAYAAwAFAAgAAQABAAEAAwAGAA8AHQAbACYAKwAmACIAGgAiABgAEQAaABsAGwAbACYAJwAiACYAHQAYABsAFAATABEAEwAPAAYADwAMAAwAAQD7//3/9P/6//v/8f/s/+X/4f/l/+z/7P/m/+P/7P/o/9z/6P/s/+z/8f/s/+b/2v/a/9r/2f/f/+b/7//6/wEACAD9//j/8//x//j/9P/7//P/+P///wAACAAKAA8ACAAGAAgABQADAAUACgAMAAgABgD7//T/7//j/+P/3v/o//T/+P/7//T/7f/m/+b/9P/4/wAA/f/v/+b/4f/c/9r/3//t//v/+v8DAAgACAARABQAFAAWACIAJgAkACIAGwARAAoACAAWACEAIgAmACEAHwAbAB8AJgAhAB8AGgARABMAEQAIAP//+P/x//T/9v/6//r/8f/v/+//7f/x//b///8FAAMABQD6//T/8//j/9r/3P/f/+r/8/8FAAoADAARAAwAEQAYABYAEQAKAAYABgD6//T//f8AAAEAAQD///H/8f/t/+r/+P/7//T/9v//////7f/s/+j/4//e/9n/3P/e/9X/zv/S/9n/7P/6/wEAAAAAAPb/8//6//T//f/x/+3/7f/q/+//7P/7/wMACAAbAB0AIgAhABYAEwAGAAoAEwAUACIAHwAdABgACgAWABQAFgAiAB8AJwApACsALgAuADIAKQAtAC0AJAAaAA0ACAABAAMACAAUACEAIQAkACQAGAAUAB0AIgAfABoADwD///T/7f/o/+z/8f///wEABgAMAAUA/f///wYAAAD9//3/+//0/+z/3P/O/8z/1f/l/+3/8//s/+H/4f/c/+H/4//j//b/8//o/9//zv/J/8L/xf/M/9D/2f/a/9L/zP/T/9L/2v/v/wAABgAFAAEA+P/o/9//3//Z/9r/6P/x//b//f/9//v/AQAIAAgADAAUABgAEwAFAP///f/4/wEABQAGAAAAAAAIAP//BQARABMADQAYACQAGgAYABgAGwAYACIAKQAkAB0AEwANAAYACAAMABEAIQAyAEMAOwAwADIAJwAiACYAKwArACIAHQATAAoACAAAAAMAEQAdACEAHQAiAB8AFAATAAwAEQATABMACgADAPb/6P/j/+P/7P/q//T////6//P/7f/x//T//f8AAAAABQABAOr/1//J/8D/xf/L/9n/3v/f/9//3v/X/9P/3v/l/+z/8//2/+r/2v/X/8n/uP+2/73/y//a/9z/2f/e/+P/6P/s//P/+v/7//b/9v/v/+P/1//T/+b/7f/2////+//6//v///8AAAgAEwAbABsAGAAbABMACgANABEAFgAYABoAFAAGAP////8FABMAIQArAC4AOQA3AC0AJAAdAB8AHQAdACEAGgAWABoAGgAaACEALQAuADAALgAnACcAJgAiABgAFgAnACEAFgAWABEAEQANABQAFAATABgAEwAMAAoADQAKAAYADAAPAAoAAwD9//P/4f/f/+j/5f/z//H/7P/s/+H/3//a/9z/3v/X/9L/0v/S/8z/wP+9/8L/wP/F/9L/zv/Q/8z/xP+7/7v/xf/F/8z/1f/Z/9r/1//Z/8v/y//Z/+b/9v/2////9v/t//T/9P/0//r/CgAPAA8AEQAMAAgADAANABEAIgAyADkAMgArACQAIgApACYAKwAuADIAOQA0ACkAIQAmAC0APABAADsANwAtACsAJwArADQANQA1ADcAMgAnACYAJAAiACcAJgAwACsAIQAUAAEA/f8BAA0ADQAWABsAFgATAAoADwAMAAoAFgAUABEACgAAAPP/4//j/9//3P/h/+P/5v/m/+X/7P/0//v/AAD9/wAA+v/v/+H/0P/M/8T/wv/F/8f/zv/O/9L/0v/f/+r/7P/0//r/AAD9//b/8f/e/9P/zP/H/8L/wP/C/8f/1//j/+r/8f/9/wYADwAUABEACgAGAPv/8//s/+r/6v/m/+X/5v/m/+z/9P8BAA8AFAAbACEAIgAdABMADQAPABQAFAANAAgABQD4/+//6P/t//r//f8IAAoACgAPABEAFgAYABoAGgAUAA8ACAADAPj/8f/7//r/9v/9/wAABQAGAAoACgARABoAFAAYAB8AIQAfABoAGwATAAwADAAGAAEABQAMAAYABgAIAAYACgAMAA8AFAAYAB8AJAAnABsACgD9//j/+/8AAAUA+P/7//3/7//s/+j/9P8AAAoADwAKAAEA+P/x/+X/5f/s//P/+P/2//H/3//V/9r/5f/o/+r/8f/x/+//7f/s/+//+P8DAAoADAAKAAMA+//x/+3/7//2//3//f/6//b/+v8BAAYADwATABMAGwAhABsADQAIAAoACAATAA8ACgAKAP3/+P/z//T/8f/0/wEABQAIAAMA/f/9//j/+v/7/wMACAD4/+3/4//X/9X/0//c/+j/7P/x//H/7f/l/+P/7//9/wMACgANAAwACAAAAPr/9v/4//j/AAAGAPv/+P/2//v/AwARACEAJgAtACsAJAAfABYAGgAdABsAGwAYABYACAD///r/+P8BAAUABgADAAAAAQD//wAAAQAGAA0AEwAPAAAA8f/j/9//3//c/9r/1f/S/9X/1//a/+P/8/////v/+v/6//b/8//s/+r/7//z//b/7//o/97/2v/m//j/AQAFAAwADQAMAAwAFAAUABQAGwAaABgAEQAIAAEA//8AAAEABgAKAAgACAADAAgAEwAbAB0AFgAPAAoADwAPAAYABQAAAP3/+//9//T/7f/4/wEAEQAYABQADAAFAA0ADQANABMAEQAUABMADAAGAAgAAwAAAA0ADwAWABoAGAAYABEADwANABMAEwAPAAUAAQAFAAEAAAD///v/9P/z//P/7//x//H/8f/2//T/8//2//r/+//4//H/7f/l/+H/3P/X/9X/0//X/9z/4//o//P//f/9//v//f/9//v/8//x//H/7//s/+z/8f/t/+r/6v/q/+3/+v8DABEAEQAGAAMAAQADAAEABQAIAAoAEQAPAAMA/f/7/wAACAAKAA0ADQAUABEAEQATABYAIQApACkAHwAPAAYABQAIAAoADwAKAAMAAQD9//P/8f/7/wgAEQATABMADwANAAAA//8GAAoADQATABEACAD///j/+P/2//v//f8BAAYAAwD///v/+//9/wEAAAAAAAMAAAD4//b/8f/t//H/7//x//T/8f/t//T//f////3/+v/x//H/7P/s//P/9P/4//v/+//7/wMACgAWABgAGAAaABgAGAATAA0ADAAAAP3/AAADAAEAAQD///b/7//4/wYAEQAbAB8AGwAaABMABQD///b/7P/v//H/7f/m/+H/4f/j/+r/8//9/wEAAwAIAAUACAADAAAA/f/0//P/7f/v/+X/3//m/+j/7//4//b/+P//////AwANABEAGAAWAA0AAwD///3/+v/7//j//f8IAAoADAAIAAYAAQADAA8AHwAnACcAJwAmAB0AGAAYABgAGAAaABoADQD///v/AAD9////AQAKAAoACAAUACEAJgAnACIAFgAPAAMA+//z/+z/5v/m/+3/+/8AAAEABgAFAAgADQAUABQAEwAWAA0ABgD7//P/9P/0//T///////b/+v/7//v/9v/z//b/9v///wUAAwD///P/6P/e/+H/5v/l/+r/7f/s/+H/3//f/+P/6v/z//v/+v/7//r/7P/j/+r/9v///wAAAwD///3/+P/0//j///8IAAwADAAKAAMA+v8AAAUADQATABQAFgATAA0ACgAIAAoAEQAYABMADAAGAAEAAwAFAAYABQANABEAGAAdABMADAADAP//AAAAAPv/+//6//T/9v/4//3/BQAGAAgAAQAAAP///f/4//P/7f/m/+r/7f/s/+P/4f/s//P/+/8BAAMAAwABAP///f/9//v/AQAKAAUA////////AAAAAAoAEwAYABoAEwAWABQAFAAaAB0AGwAUAAwABgAMAAYACAAKAA==\" type=\"audio/wav\" />\n                    Your browser does not support the audio element.\n                </audio>\n              "},"metadata":{}}],"execution_count":8},{"cell_type":"code","source":"train_transforms = torch.nn.Sequential(\n    torchaudio.transforms.MFCC(\n        n_mfcc = 128,\n        log_mels = True,\n        melkwargs={\"n_fft\": 400, \"hop_length\": 125}\n    )\n)\n\n\nval_transform = torch.nn.Sequential(\n    torchaudio.transforms.MFCC(\n        n_mfcc = 128,\n        log_mels = True,\n        melkwargs={\"n_fft\": 400, \"hop_length\": 125}\n    )\n)\n\ntrain_dataloader = DataLoader(\n    SpeechCommandDataset(\n        dir_path=TRAIN_DIR_PATH,\n        data=train_data,\n        labels=train_labels,\n        dict_label_to_index=dict_label_to_index,\n        transform=train_transforms\n    ),\n    batch_size=BATCH_SIZE,\n    shuffle=True,\n    num_workers=N_WORKERS\n)\n\nvalid_dataloader = DataLoader(\n    SpeechCommandDataset(\n        dir_path=TRAIN_DIR_PATH,\n        data=val_data,\n        labels=val_labels,\n        dict_label_to_index=dict_label_to_index,\n        transform=train_transforms\n    ),\n    batch_size=BATCH_SIZE,\n    shuffle=False,\n    num_workers=N_WORKERS\n)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:21.045356Z","iopub.execute_input":"2024-03-23T20:15:21.04572Z","iopub.status.idle":"2024-03-23T20:15:21.152565Z","shell.execute_reply.started":"2024-03-23T20:15:21.045691Z","shell.execute_reply":"2024-03-23T20:15:21.15158Z"},"trusted":true},"outputs":[],"execution_count":9},{"cell_type":"code","source":"for item in train_dataloader:\n    print(item[0].shape)\n    break","metadata":{"execution":{"iopub.status.busy":"2024-03-23T20:15:24.06422Z","iopub.execute_input":"2024-03-23T20:15:24.064621Z","iopub.status.idle":"2024-03-23T20:15:28.906522Z","shell.execute_reply.started":"2024-03-23T20:15:24.064589Z","shell.execute_reply":"2024-03-23T20:15:28.905271Z"},"trusted":true},"outputs":[{"name":"stdout","text":"torch.Size([256, 1, 128, 129])\n","output_type":"stream"}],"execution_count":10},{"cell_type":"code","source":"class M5(nn.Module):\n    def __init__(self, n_input=1, n_output=35, n_channel=32, kernel_size=3):\n        super().__init__()\n        self.conv1 = nn.Conv2d(n_input, 64, kernel_size=kernel_size, padding=1)\n        self.bn1 = nn.BatchNorm2d(64)\n        self.pool1 = nn.AvgPool2d((2,2))\n        # shape [512, 64, 128, 127]\n        \n        self.conv2 = nn.Conv2d(64, 128, kernel_size=3, padding=1)\n        self.bn2 = nn.BatchNorm2d(128)\n        self.pool2 = nn.AvgPool2d((2,2))\n        # shape [512, 128, 64, 64]\n        \n        self.conv3 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n        self.bn3 = nn.BatchNorm2d(128)\n        self.pool3 = nn.AvgPool2d((2,2))\n        # shape [4, 128, 32, 32]\n        \n        self.conv4 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n        self.bn4 = nn.BatchNorm2d(128)\n        self.pool4 = nn.AvgPool2d((2,2))\n        # shape [4, 128, 16, 16]\n        \n        self.conv5 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n        self.bn5 = nn.BatchNorm2d(128)\n        self.pool5 = nn.AvgPool2d((2,2))\n        # shape [4, 128, 8, 8]\n        \n        self.conv6 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n        self.bn6 = nn.BatchNorm2d(128)\n        self.pool6 = nn.AvgPool2d((2,2))\n        # shape [4, 128, 4, 4]\n        \n        self.conv7 = nn.Conv2d(128, 128, kernel_size=3, padding=1)\n        self.bn7 = nn.BatchNorm2d(128)\n        self.pool7 = nn.AvgPool2d((2,2))\n        # shape [4, 128, 2, 2]\n        \n        self.fc1 = nn.Linear(128, 64)\n        self.fc2 = nn.Linear(64, n_output)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = F.relu(self.bn1(x))\n        x = self.pool1(x)\n        # print(x.shape)\n        x = self.conv2(x)\n        x = F.relu(self.bn2(x))\n        x = self.pool2(x)\n        # print(x.shape)\n        x = self.conv3(x)\n        x = F.relu(self.bn3(x))\n        x = self.pool3(x)\n        # print(x.shape)\n        x = self.conv4(x)\n        x = F.relu(self.bn4(x))\n        x = self.pool4(x)\n        # print(x.shape)\n        x = self.conv5(x)\n        x = F.relu(self.bn5(x))\n        x = self.pool5(x)\n        # print(x.shape)\n        x = self.conv6(x)\n        x = F.relu(self.bn6(x))\n        x = self.pool6(x)\n        # print(x.shape)\n        x = self.conv7(x)\n        x = F.relu(self.bn7(x))\n        x = self.pool7(x)\n        # print(x.shape)\n        x = torch.flatten(x, start_dim=1)\n        # x = F.relu(self.fc0(x))\n        x = F.relu(self.fc1(x))\n        x = self.fc2(x)\n        \n        return F.log_softmax(x, dim=0)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T21:45:47.280906Z","iopub.execute_input":"2024-03-23T21:45:47.281558Z","iopub.status.idle":"2024-03-23T21:45:47.294711Z","shell.execute_reply.started":"2024-03-23T21:45:47.281527Z","shell.execute_reply":"2024-03-23T21:45:47.293633Z"},"trusted":true},"outputs":[],"execution_count":41},{"cell_type":"code","source":"model = M5()\nmodel = model.to(DEVICE)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T21:45:47.678721Z","iopub.execute_input":"2024-03-23T21:45:47.679345Z","iopub.status.idle":"2024-03-23T21:45:47.803511Z","shell.execute_reply.started":"2024-03-23T21:45:47.67931Z","shell.execute_reply":"2024-03-23T21:45:47.802554Z"},"trusted":true},"outputs":[],"execution_count":42},{"cell_type":"code","source":"input_image = torch.rand(4, 1, 128, 129).to(DEVICE)\nmodel = model.to(DEVICE)\nresult = model(input_image)\n\nprint(result.size())\nprint(result)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T21:45:48.781204Z","iopub.execute_input":"2024-03-23T21:45:48.78208Z","iopub.status.idle":"2024-03-23T21:45:48.795337Z","shell.execute_reply.started":"2024-03-23T21:45:48.782048Z","shell.execute_reply":"2024-03-23T21:45:48.794325Z"},"trusted":true},"outputs":[{"name":"stdout","text":"torch.Size([4, 35])\ntensor([[-1.3887, -1.3880, -1.3833, -1.3788, -1.3857, -1.3867, -1.3986, -1.3863,\n         -1.3894, -1.3873, -1.3848, -1.3873, -1.3728, -1.3834, -1.3836, -1.4103,\n         -1.3878, -1.3800, -1.3883, -1.3822, -1.3850, -1.3971, -1.3904, -1.3866,\n         -1.3972, -1.3769, -1.3925, -1.3823, -1.3847, -1.3859, -1.3824, -1.3764,\n         -1.3939, -1.3741, -1.3801],\n        [-1.3782, -1.3917, -1.3814, -1.3825, -1.3934, -1.3820, -1.3824, -1.3933,\n         -1.3832, -1.3851, -1.3913, -1.3852, -1.3925, -1.3751, -1.3843, -1.3742,\n         -1.3875, -1.3968, -1.3820, -1.3888, -1.3917, -1.3963, -1.3910, -1.3929,\n         -1.3902, -1.3849, -1.3792, -1.3927, -1.3817, -1.3909, -1.3862, -1.3793,\n         -1.3737, -1.3904, -1.3942],\n        [-1.3909, -1.3867, -1.3897, -1.3948, -1.3829, -1.3877, -1.3807, -1.3800,\n         -1.3869, -1.3845, -1.3712, -1.3856, -1.3830, -1.3928, -1.3908, -1.3918,\n         -1.3926, -1.3899, -1.3846, -1.3862, -1.3866, -1.3771, -1.3827, -1.3906,\n         -1.3838, -1.4116, -1.3891, -1.3805, -1.3900, -1.3874, -1.4023, -1.4021,\n         -1.3906, -1.3895, -1.3792],\n        [-1.3874, -1.3788, -1.3908, -1.3891, -1.3832, -1.3888, -1.3836, -1.3856,\n         -1.3858, -1.3883, -1.3980, -1.3871, -1.3971, -1.3939, -1.3866, -1.3694,\n         -1.3775, -1.3786, -1.3903, -1.3880, -1.3820, -1.3748, -1.3811, -1.3752,\n         -1.3741, -1.3723, -1.3844, -1.3898, -1.3887, -1.3810, -1.3745, -1.3876,\n         -1.3872, -1.3914, -1.3917]], device='cuda:0',\n       grad_fn=<LogSoftmaxBackward0>)\n","output_type":"stream"}],"execution_count":43},{"cell_type":"code","source":"def train_model(model: nn.Module, train_data: DataLoader, valid_data: DataLoader):\n    optimizer = torch.optim.Adam(model.parameters(), lr=0.01, weight_decay=0.0001)\n    scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=20, gamma=0.1)\n    criterion = nn.NLLLoss()\n\n    accuracy_train = torchmetrics.classification.Accuracy(task=\"multiclass\", num_classes=N_CLASSES).to(DEVICE)\n    accuracy_val = torchmetrics.classification.Accuracy(task=\"multiclass\", num_classes=N_CLASSES).to(DEVICE)\n\n    min_val_loss = 99999\n    for epoch in range(EPOCHS):\n        train_loss = 0.0\n        val_loss = 0.0\n\n        model.train()\n        for x, y, _ in train_data:\n            x = x.to(DEVICE)\n            y = y.to(DEVICE)\n\n            optimizer.zero_grad()\n\n            y_hat = model(x).squeeze()\n            loss = criterion(y_hat, y)\n\n            loss.backward()\n            optimizer.step()\n\n            train_loss += loss.item() * x.size(0)\n            _, preds = torch.max(y_hat, 1)\n\n            accuracy_train(\n                y_hat,\n                y\n            )\n\n        model.eval()\n        for x, y, _ in valid_data:\n            x = x.to(DEVICE)\n            y = y.to(DEVICE)\n\n            y_hat = model(x).squeeze()\n            loss = criterion(y_hat, y)\n\n            val_loss += loss.item() * x.size(0)\n            _, preds = torch.max(y_hat, 1)\n\n            accuracy_val(\n                y_hat,\n                y\n            )\n\n        train_loss = train_loss / len(train_dataloader.dataset)\n        val_loss = val_loss / len(valid_dataloader.dataset)\n\n        scheduler.step()\n\n        print(f\"Epoch {epoch + 1}/{EPOCHS}\")\n        print(f\"Train Loss: {train_loss:.4f}, Train Acc: {accuracy_train.compute():.4f}\")\n        print(f\"Val Loss: {val_loss:.4f}, Val Acc: {accuracy_val.compute():.4f}\")\n        if val_loss < min_val_loss:\n            min_val_loss = val_loss\n            torch.save(model.state_dict(), 'best_model' + str(epoch+1))\n            print('SAVED BEST MODEL!')\n        ","metadata":{"execution":{"iopub.status.busy":"2024-03-23T21:45:51.280362Z","iopub.execute_input":"2024-03-23T21:45:51.280999Z","iopub.status.idle":"2024-03-23T21:45:51.295677Z","shell.execute_reply.started":"2024-03-23T21:45:51.280966Z","shell.execute_reply":"2024-03-23T21:45:51.294925Z"},"trusted":true},"outputs":[],"execution_count":44},{"cell_type":"code","source":"train_model(\n    model=model,\n    train_data=train_dataloader,\n    valid_data=valid_dataloader\n)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T21:45:55.341762Z","iopub.execute_input":"2024-03-23T21:45:55.342142Z","iopub.status.idle":"2024-03-23T22:27:51.654334Z","shell.execute_reply.started":"2024-03-23T21:45:55.342111Z","shell.execute_reply":"2024-03-23T22:27:51.652936Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Epoch 1/50\nTrain Loss: 4.7443, Train Acc: 0.2854\nVal Loss: 3.9901, Val Acc: 0.4953\nSAVED BEST MODEL!\nEpoch 2/50\nTrain Loss: 3.5133, Train Acc: 0.4540\nVal Loss: 3.1614, Val Acc: 0.6009\nSAVED BEST MODEL!\nEpoch 3/50\nTrain Loss: 2.9782, Train Acc: 0.5538\nVal Loss: 2.8885, Val Acc: 0.6605\nSAVED BEST MODEL!\nEpoch 4/50\nTrain Loss: 2.7619, Train Acc: 0.6191\nVal Loss: 2.7297, Val Acc: 0.7018\nSAVED BEST MODEL!\nEpoch 5/50\nTrain Loss: 2.6498, Train Acc: 0.6642\nVal Loss: 2.7212, Val Acc: 0.7260\nSAVED BEST MODEL!\nEpoch 6/50\nTrain Loss: 2.5865, Train Acc: 0.6972\nVal Loss: 2.5891, Val Acc: 0.7483\nSAVED BEST MODEL!\nEpoch 7/50\nTrain Loss: 2.5299, Train Acc: 0.7231\nVal Loss: 2.5994, Val Acc: 0.7639\nEpoch 8/50\nTrain Loss: 2.5114, Train Acc: 0.7431\nVal Loss: 2.7654, Val Acc: 0.7697\nEpoch 9/50\nTrain Loss: 2.4847, Train Acc: 0.7595\nVal Loss: 2.5854, Val Acc: 0.7799\nSAVED BEST MODEL!\nEpoch 10/50\nTrain Loss: 2.4684, Train Acc: 0.7730\nVal Loss: 2.5468, Val Acc: 0.7893\nSAVED BEST MODEL!\nEpoch 11/50\nTrain Loss: 2.4539, Train Acc: 0.7844\nVal Loss: 2.5454, Val Acc: 0.7974\nSAVED BEST MODEL!\nEpoch 12/50\nTrain Loss: 2.4423, Train Acc: 0.7942\nVal Loss: 2.5873, Val Acc: 0.8029\nEpoch 13/50\nTrain Loss: 2.4366, Train Acc: 0.8026\nVal Loss: 2.5420, Val Acc: 0.8082\nSAVED BEST MODEL!\nEpoch 14/50\nTrain Loss: 2.4235, Train Acc: 0.8100\nVal Loss: 2.5649, Val Acc: 0.8122\nEpoch 15/50\nTrain Loss: 2.4164, Train Acc: 0.8166\nVal Loss: 2.4949, Val Acc: 0.8176\nSAVED BEST MODEL!\nEpoch 16/50\nTrain Loss: 2.4089, Train Acc: 0.8225\nVal Loss: 2.4995, Val Acc: 0.8217\nEpoch 17/50\nTrain Loss: 2.4044, Train Acc: 0.8278\nVal Loss: 2.4970, Val Acc: 0.8256\nEpoch 18/50\nTrain Loss: 2.3985, Train Acc: 0.8327\nVal Loss: 2.4807, Val Acc: 0.8293\nSAVED BEST MODEL!\nEpoch 19/50\nTrain Loss: 2.3973, Train Acc: 0.8370\nVal Loss: 2.4983, Val Acc: 0.8324\nEpoch 20/50\nTrain Loss: 2.3934, Train Acc: 0.8409\nVal Loss: 2.5836, Val Acc: 0.8342\nEpoch 21/50\nTrain Loss: 2.2770, Train Acc: 0.8460\nVal Loss: 2.3625, Val Acc: 0.8385\nSAVED BEST MODEL!\nEpoch 22/50\nTrain Loss: 2.2434, Train Acc: 0.8512\nVal Loss: 2.3585, Val Acc: 0.8425\nSAVED BEST MODEL!\nEpoch 23/50\nTrain Loss: 2.2266, Train Acc: 0.8561\nVal Loss: 2.3616, Val Acc: 0.8462\nEpoch 24/50\nTrain Loss: 2.2122, Train Acc: 0.8608\nVal Loss: 2.3669, Val Acc: 0.8496\nEpoch 25/50\nTrain Loss: 2.2024, Train Acc: 0.8654\nVal Loss: 2.3712, Val Acc: 0.8527\nEpoch 26/50\nTrain Loss: 2.1904, Train Acc: 0.8697\nVal Loss: 2.3800, Val Acc: 0.8556\nEpoch 27/50\nTrain Loss: 2.1808, Train Acc: 0.8738\nVal Loss: 2.3921, Val Acc: 0.8582\nEpoch 28/50\nTrain Loss: 2.1745, Train Acc: 0.8777\nVal Loss: 2.3961, Val Acc: 0.8606\nEpoch 29/50\nTrain Loss: 2.1635, Train Acc: 0.8815\nVal Loss: 2.4121, Val Acc: 0.8628\nEpoch 30/50\nTrain Loss: 2.1561, Train Acc: 0.8851\nVal Loss: 2.4091, Val Acc: 0.8650\nEpoch 31/50\nTrain Loss: 2.1511, Train Acc: 0.8885\nVal Loss: 2.4344, Val Acc: 0.8668\nEpoch 32/50\nTrain Loss: 2.1459, Train Acc: 0.8918\nVal Loss: 2.4367, Val Acc: 0.8686\nEpoch 33/50\nTrain Loss: 2.1450, Train Acc: 0.8949\nVal Loss: 2.4363, Val Acc: 0.8703\nEpoch 34/50\nTrain Loss: 2.1435, Train Acc: 0.8978\nVal Loss: 2.4399, Val Acc: 0.8718\nEpoch 35/50\nTrain Loss: 2.1405, Train Acc: 0.9006\nVal Loss: 2.4475, Val Acc: 0.8733\nEpoch 36/50\nTrain Loss: 2.1400, Train Acc: 0.9032\nVal Loss: 2.4486, Val Acc: 0.8746\nEpoch 37/50\nTrain Loss: 2.1400, Train Acc: 0.9057\nVal Loss: 2.4445, Val Acc: 0.8760\nEpoch 38/50\nTrain Loss: 2.1348, Train Acc: 0.9081\nVal Loss: 2.4620, Val Acc: 0.8771\nEpoch 39/50\nTrain Loss: 2.1421, Train Acc: 0.9103\nVal Loss: 2.4582, Val Acc: 0.8782\n","output_type":"stream"},{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)","Cell \u001b[0;32mIn[45], line 1\u001b[0m\n\u001b[0;32m----> 1\u001b[0m \u001b[43mtrain_model\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m      2\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m      3\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtrain_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtrain_dataloader\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m      4\u001b[0m \u001b[43m    \u001b[49m\u001b[43mvalid_data\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mvalid_dataloader\u001b[49m\n\u001b[1;32m      5\u001b[0m \u001b[43m)\u001b[49m\n","Cell \u001b[0;32mIn[44], line 27\u001b[0m, in \u001b[0;36mtrain_model\u001b[0;34m(model, train_data, valid_data)\u001b[0m\n\u001b[1;32m     24\u001b[0m loss\u001b[38;5;241m.\u001b[39mbackward()\n\u001b[1;32m     25\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mstep()\n\u001b[0;32m---> 27\u001b[0m train_loss \u001b[38;5;241m+\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[43mloss\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mitem\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m \u001b[38;5;241m*\u001b[39m x\u001b[38;5;241m.\u001b[39msize(\u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m     28\u001b[0m _, preds \u001b[38;5;241m=\u001b[39m torch\u001b[38;5;241m.\u001b[39mmax(y_hat, \u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m     30\u001b[0m accuracy_train(\n\u001b[1;32m     31\u001b[0m     y_hat,\n\u001b[1;32m     32\u001b[0m     y\n\u001b[1;32m     33\u001b[0m )\n","\u001b[0;31mKeyboardInterrupt\u001b[0m: "],"ename":"KeyboardInterrupt","evalue":"","output_type":"error"}],"execution_count":45},{"cell_type":"code","source":"df_test = pd.read_csv(\n    os.path.join(TEST_DIR_PATH, 'metadata.csv')\n)\ntest_dataloader = DataLoader(\n    SpeechCommandDataset(\n        dir_path=TEST_DIR_PATH,\n        data=df_test.file_name.values,\n        labels=None,\n        dict_label_to_index=dict_label_to_index,\n        transform=train_transforms\n    ),\n    batch_size=BATCH_SIZE,\n    shuffle=False,\n    num_workers=N_WORKERS\n)\n","metadata":{"execution":{"iopub.status.busy":"2024-03-23T22:28:06.601467Z","iopub.execute_input":"2024-03-23T22:28:06.60182Z","iopub.status.idle":"2024-03-23T22:28:06.620493Z","shell.execute_reply.started":"2024-03-23T22:28:06.601791Z","shell.execute_reply":"2024-03-23T22:28:06.619754Z"},"trusted":true},"outputs":[],"execution_count":46},{"cell_type":"code","source":"# ENSEMBLE PREDICTIONS AND SUBMIT\nresults = {\n    'id': [],\n    'label': []\n}\n\nmodel = M5()\nmodel = model.to(DEVICE)\nmodel.load_state_dict(torch.load('best_model22'))\nmodel.eval()\nfor x, y, ids in test_dataloader:\n    x = x.float().to(DEVICE)\n    with torch.no_grad():\n        y_hat = model(x).squeeze()\n        _, preds = torch.max(y_hat, 1)\n        for i in range(len(preds)):\n            results[\"id\"].append(ids[i].item())\n            results[\"label\"].append(dict_index_to_label[int(preds[i].item())])\n        \n\npd.DataFrame(results).to_csv(\n    'submission.csv',\n    columns=['id', 'label'],\n    index=False\n)","metadata":{"execution":{"iopub.status.busy":"2024-03-23T22:28:07.279408Z","iopub.execute_input":"2024-03-23T22:28:07.279743Z","iopub.status.idle":"2024-03-23T22:28:14.397485Z","shell.execute_reply.started":"2024-03-23T22:28:07.279715Z","shell.execute_reply":"2024-03-23T22:28:14.396276Z"},"trusted":true},"outputs":[],"execution_count":47},{"cell_type":"code","source":"from IPython.display import FileLink\n\nFileLink(r'submission.csv')","metadata":{"execution":{"iopub.status.busy":"2024-03-23T22:28:19.994544Z","iopub.execute_input":"2024-03-23T22:28:19.995264Z","iopub.status.idle":"2024-03-23T22:28:20.002036Z","shell.execute_reply.started":"2024-03-23T22:28:19.995229Z","shell.execute_reply":"2024-03-23T22:28:20.00102Z"},"trusted":true},"outputs":[{"execution_count":48,"output_type":"execute_result","data":{"text/plain":"/kaggle/working/submission.csv","text/html":"<a href='submission.csv' target='_blank'>submission.csv</a><br>"},"metadata":{}}],"execution_count":48},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# **HACK**","metadata":{}},{"cell_type":"code","source":"class CustomTransformerDataset(Dataset):\n    def __init__(self, dir_path, data, labels=None, dict_label_to_index=None, transform=None):\n        self.dir_path = dir_path\n        self.data = data\n        self.labels = labels\n        self.dict_label_to_index = dict_label_to_index\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.data)\n\n    def __getitem__(self, idx):\n        file_name = self.data[idx]\n        waveform = np.load(os.path.join(self.dir_path, file_name))\n        if waveform.shape[1] < 16000:\n            waveform = np.pad(\n                waveform, pad_width=((0, 0), (0, 16000 - waveform.shape[1])),\n                mode='constant',\n                constant_values=0\n            )\n\n        # waveform = torch.from_numpy(waveform)\n        return {\n            'audio': {\n                'array': waveform[0],\n                'sampling_rate': 16000\n            },\n            'transcription': self.labels[idx].upper()\n        }","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:03:34.427568Z","iopub.execute_input":"2024-03-22T21:03:34.428022Z","iopub.status.idle":"2024-03-22T21:03:34.439133Z","shell.execute_reply.started":"2024-03-22T21:03:34.427993Z","shell.execute_reply":"2024-03-22T21:03:34.437893Z"},"trusted":true},"outputs":[],"execution_count":8},{"cell_type":"code","source":"lol_train = CustomTransformerDataset(\n        dir_path=TRAIN_DIR_PATH,\n        data=train_data,\n        labels=train_labels,\n    )\n\nlen(lol_train)","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:03:46.054467Z","iopub.execute_input":"2024-03-22T21:03:46.054873Z","iopub.status.idle":"2024-03-22T21:03:46.061574Z","shell.execute_reply.started":"2024-03-22T21:03:46.054842Z","shell.execute_reply":"2024-03-22T21:03:46.060684Z"},"trusted":true},"outputs":[{"execution_count":9,"output_type":"execute_result","data":{"text/plain":"76196"},"metadata":{}}],"execution_count":9},{"cell_type":"code","source":"!mkdir /kaggle/working/data","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:03:50.233326Z","iopub.execute_input":"2024-03-22T21:03:50.234027Z","iopub.status.idle":"2024-03-22T21:03:51.260217Z","shell.execute_reply.started":"2024-03-22T21:03:50.233997Z","shell.execute_reply":"2024-03-22T21:03:51.258694Z"},"trusted":true},"outputs":[],"execution_count":10},{"cell_type":"code","source":"!touch /kaggle/working/metadata.jsonl","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:03:58.720368Z","iopub.execute_input":"2024-03-22T21:03:58.720747Z","iopub.status.idle":"2024-03-22T21:03:59.710265Z","shell.execute_reply.started":"2024-03-22T21:03:58.720712Z","shell.execute_reply":"2024-03-22T21:03:59.708897Z"},"trusted":true},"outputs":[],"execution_count":11},{"cell_type":"code","source":"!pip install jsonlines","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:29:40.229222Z","iopub.execute_input":"2024-03-22T21:29:40.229646Z","iopub.status.idle":"2024-03-22T21:29:53.421027Z","shell.execute_reply.started":"2024-03-22T21:29:40.229614Z","shell.execute_reply":"2024-03-22T21:29:53.419897Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Collecting jsonlines\n  Downloading jsonlines-4.0.0-py3-none-any.whl.metadata (1.6 kB)\nRequirement already satisfied: attrs>=19.2.0 in /opt/conda/lib/python3.10/site-packages (from jsonlines) (23.2.0)\nDownloading jsonlines-4.0.0-py3-none-any.whl (8.7 kB)\nInstalling collected packages: jsonlines\nSuccessfully installed jsonlines-4.0.0\n","output_type":"stream"}],"execution_count":20},{"cell_type":"code","source":"import jsonlines\nfrom scipy.io.wavfile import write\n\nwith jsonlines.open(\"/kaggle/working/metadata.jsonl\", \"w\") as f:\n    field = [\"file_name\", \"transcription\"]\n    for i in range(20000):\n        full_path = '/kaggle/working/data/'+str(i)+'.wav'\n        write(full_path, 16000, lol_train[i][\"audio\"][\"array\"])\n        query = {\n            \"file_name\": full_path, \n            \"transcription\": lol_train[i][\"transcription\"]\n        }\n        f.write(query)","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:32:33.416016Z","iopub.execute_input":"2024-03-22T21:32:33.41683Z","iopub.status.idle":"2024-03-22T21:34:57.354219Z","shell.execute_reply.started":"2024-03-22T21:32:33.416779Z","shell.execute_reply":"2024-03-22T21:34:57.352897Z"},"trusted":true},"outputs":[],"execution_count":21},{"cell_type":"code","source":"!pip show datasets","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:48:23.416425Z","iopub.execute_input":"2024-03-22T21:48:23.417202Z","iopub.status.idle":"2024-03-22T21:48:35.519039Z","shell.execute_reply.started":"2024-03-22T21:48:23.417168Z","shell.execute_reply":"2024-03-22T21:48:35.517687Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Name: datasets\nVersion: 2.14.0\nSummary: HuggingFace community-driven open-source library of datasets\nHome-page: https://github.com/huggingface/datasets\nAuthor: HuggingFace Inc.\nAuthor-email: thomas@huggingface.co\nLicense: Apache 2.0\nLocation: /opt/conda/lib/python3.10/site-packages\nRequires: aiohttp, dill, fsspec, huggingface-hub, multiprocess, numpy, packaging, pandas, pyarrow, pyyaml, requests, tqdm, xxhash\nRequired-by: \n","output_type":"stream"}],"execution_count":35},{"cell_type":"code","source":"!pip install --upgrade datasets","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:49:21.651048Z","iopub.execute_input":"2024-03-22T21:49:21.651869Z","iopub.status.idle":"2024-03-22T21:49:49.36699Z","shell.execute_reply.started":"2024-03-22T21:49:21.651836Z","shell.execute_reply":"2024-03-22T21:49:49.365876Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Requirement already satisfied: datasets in /opt/conda/lib/python3.10/site-packages (2.14.0)\nCollecting datasets\n  Downloading datasets-2.18.0-py3-none-any.whl.metadata (20 kB)\nRequirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from datasets) (3.13.1)\nRequirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from datasets) (1.26.4)\nCollecting pyarrow>=12.0.0 (from datasets)\n  Downloading pyarrow-15.0.2-cp310-cp310-manylinux_2_28_x86_64.whl.metadata (3.0 kB)\nCollecting pyarrow-hotfix (from datasets)\n  Downloading pyarrow_hotfix-0.6-py3-none-any.whl.metadata (3.6 kB)\nRequirement already satisfied: dill<0.3.9,>=0.3.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (0.3.7)\nRequirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from datasets) (2.1.4)\nRequirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.10/site-packages (from datasets) (2.31.0)\nRequirement already satisfied: tqdm>=4.62.1 in /opt/conda/lib/python3.10/site-packages (from datasets) (4.66.1)\nRequirement already satisfied: xxhash in /opt/conda/lib/python3.10/site-packages (from datasets) (3.4.1)\nRequirement already satisfied: multiprocess in /opt/conda/lib/python3.10/site-packages (from datasets) (0.70.15)\nRequirement already satisfied: fsspec<=2024.2.0,>=2023.1.0 in /opt/conda/lib/python3.10/site-packages (from fsspec[http]<=2024.2.0,>=2023.1.0->datasets) (2024.2.0)\nRequirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets) (3.9.1)\nRequirement already satisfied: huggingface-hub>=0.19.4 in /opt/conda/lib/python3.10/site-packages (from datasets) (0.20.3)\nRequirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from datasets) (21.3)\nRequirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from datasets) (6.0.1)\nRequirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (23.2.0)\nRequirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (6.0.4)\nRequirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.9.3)\nRequirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.4.1)\nRequirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (1.3.1)\nRequirement already satisfied: async-timeout<5.0,>=4.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets) (4.0.3)\nRequirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.19.4->datasets) (4.9.0)\nRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging->datasets) (3.1.1)\nRequirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets) (3.3.2)\nRequirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets) (3.6)\nRequirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets) (1.26.18)\nRequirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets) (2024.2.2)\nRequirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2.8.2)\nRequirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.3.post1)\nRequirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets) (2023.4)\nRequirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas->datasets) (1.16.0)\nDownloading datasets-2.18.0-py3-none-any.whl (510 kB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m510.5/510.5 kB\u001b[0m \u001b[31m9.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m\n\u001b[?25hDownloading pyarrow-15.0.2-cp310-cp310-manylinux_2_28_x86_64.whl (38.3 MB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m38.3/38.3 MB\u001b[0m \u001b[31m41.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m:00:01\u001b[0m00:01\u001b[0m\n\u001b[?25hDownloading pyarrow_hotfix-0.6-py3-none-any.whl (7.9 kB)\nInstalling collected packages: pyarrow-hotfix, pyarrow, datasets\n  Attempting uninstall: pyarrow\n    Found existing installation: pyarrow 11.0.0\n    Uninstalling pyarrow-11.0.0:\n      Successfully uninstalled pyarrow-11.0.0\n  Attempting uninstall: datasets\n    Found existing installation: datasets 2.14.0\n    Uninstalling datasets-2.14.0:\n      Successfully uninstalled datasets-2.14.0\n\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\ncudf 23.8.0 requires cubinlinker, which is not installed.\ncudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\ncudf 23.8.0 requires ptxcompiler, which is not installed.\ncuml 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\ndask-cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\napache-beam 2.46.0 requires dill<0.3.2,>=0.3.1.1, but you have dill 0.3.7 which is incompatible.\napache-beam 2.46.0 requires numpy<1.25.0,>=1.14.3, but you have numpy 1.26.4 which is incompatible.\napache-beam 2.46.0 requires pyarrow<10.0.0,>=3.0.0, but you have pyarrow 15.0.2 which is incompatible.\nbeatrix-jupyterlab 2023.128.151533 requires jupyterlab~=3.6.0, but you have jupyterlab 4.1.2 which is incompatible.\ncudf 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.3.0 which is incompatible.\ncudf 23.8.0 requires pandas<1.6.0dev0,>=1.3, but you have pandas 2.1.4 which is incompatible.\ncudf 23.8.0 requires protobuf<5,>=4.21, but you have protobuf 3.20.3 which is incompatible.\ncudf 23.8.0 requires pyarrow==11.*, but you have pyarrow 15.0.2 which is incompatible.\ncuml 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ndask-cudf 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ndask-cudf 23.8.0 requires pandas<1.6.0dev0,>=1.3, but you have pandas 2.1.4 which is incompatible.\u001b[0m\u001b[31m\n\u001b[0mSuccessfully installed datasets-2.18.0 pyarrow-15.0.2 pyarrow-hotfix-0.6\n","output_type":"stream"}],"execution_count":36},{"cell_type":"code","source":"!pip install datasets==2.14.7","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:59:51.810475Z","iopub.execute_input":"2024-03-22T21:59:51.810938Z","iopub.status.idle":"2024-03-22T22:00:06.595039Z","shell.execute_reply.started":"2024-03-22T21:59:51.810905Z","shell.execute_reply":"2024-03-22T22:00:06.593884Z"},"trusted":true},"outputs":[{"name":"stdout","text":"Collecting datasets==2.14.7\n  Downloading datasets-2.14.7-py3-none-any.whl.metadata (19 kB)\nRequirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (1.26.4)\nRequirement already satisfied: pyarrow>=8.0.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (15.0.2)\nRequirement already satisfied: pyarrow-hotfix in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (0.6)\nRequirement already satisfied: dill<0.3.8,>=0.3.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (0.3.7)\nRequirement already satisfied: pandas in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (2.1.4)\nRequirement already satisfied: requests>=2.19.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (2.31.0)\nRequirement already satisfied: tqdm>=4.62.1 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (4.66.1)\nRequirement already satisfied: xxhash in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (3.4.1)\nRequirement already satisfied: multiprocess in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (0.70.15)\nCollecting fsspec<=2023.10.0,>=2023.1.0 (from fsspec[http]<=2023.10.0,>=2023.1.0->datasets==2.14.7)\n  Downloading fsspec-2023.10.0-py3-none-any.whl.metadata (6.8 kB)\nRequirement already satisfied: aiohttp in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (3.9.1)\nRequirement already satisfied: huggingface-hub<1.0.0,>=0.14.0 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (0.20.3)\nRequirement already satisfied: packaging in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (21.3)\nRequirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from datasets==2.14.7) (6.0.1)\nRequirement already satisfied: attrs>=17.3.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (23.2.0)\nRequirement already satisfied: multidict<7.0,>=4.5 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (6.0.4)\nRequirement already satisfied: yarl<2.0,>=1.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (1.9.3)\nRequirement already satisfied: frozenlist>=1.1.1 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (1.4.1)\nRequirement already satisfied: aiosignal>=1.1.2 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (1.3.1)\nRequirement already satisfied: async-timeout<5.0,>=4.0 in /opt/conda/lib/python3.10/site-packages (from aiohttp->datasets==2.14.7) (4.0.3)\nRequirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0.0,>=0.14.0->datasets==2.14.7) (3.13.1)\nRequirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0.0,>=0.14.0->datasets==2.14.7) (4.9.0)\nRequirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging->datasets==2.14.7) (3.1.1)\nRequirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.14.7) (3.3.2)\nRequirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.14.7) (3.6)\nRequirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.14.7) (1.26.18)\nRequirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests>=2.19.0->datasets==2.14.7) (2024.2.2)\nRequirement already satisfied: python-dateutil>=2.8.2 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.14.7) (2.8.2)\nRequirement already satisfied: pytz>=2020.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.14.7) (2023.3.post1)\nRequirement already satisfied: tzdata>=2022.1 in /opt/conda/lib/python3.10/site-packages (from pandas->datasets==2.14.7) (2023.4)\nRequirement already satisfied: six>=1.5 in /opt/conda/lib/python3.10/site-packages (from python-dateutil>=2.8.2->pandas->datasets==2.14.7) (1.16.0)\nDownloading datasets-2.14.7-py3-none-any.whl (520 kB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m520.4/520.4 kB\u001b[0m \u001b[31m9.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0mta \u001b[36m0:00:01\u001b[0m\n\u001b[?25hDownloading fsspec-2023.10.0-py3-none-any.whl (166 kB)\n\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m166.4/166.4 kB\u001b[0m \u001b[31m10.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n\u001b[?25hInstalling collected packages: fsspec, datasets\n  Attempting uninstall: fsspec\n    Found existing installation: fsspec 2024.2.0\n    Uninstalling fsspec-2024.2.0:\n      Successfully uninstalled fsspec-2024.2.0\n  Attempting uninstall: datasets\n    Found existing installation: datasets 2.14.3\n    Uninstalling datasets-2.14.3:\n      Successfully uninstalled datasets-2.14.3\n\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\ncudf 23.8.0 requires cubinlinker, which is not installed.\ncudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\ncudf 23.8.0 requires ptxcompiler, which is not installed.\ncuml 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\ndask-cudf 23.8.0 requires cupy-cuda11x>=12.0.0, which is not installed.\ncudf 23.8.0 requires cuda-python<12.0a0,>=11.7.1, but you have cuda-python 12.3.0 which is incompatible.\ncudf 23.8.0 requires pandas<1.6.0dev0,>=1.3, but you have pandas 2.1.4 which is incompatible.\ncudf 23.8.0 requires protobuf<5,>=4.21, but you have protobuf 3.20.3 which is incompatible.\ncudf 23.8.0 requires pyarrow==11.*, but you have pyarrow 15.0.2 which is incompatible.\ncuml 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ndask-cuda 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ndask-cuda 23.8.0 requires pandas<1.6.0dev0,>=1.3, but you have pandas 2.1.4 which is incompatible.\ndask-cudf 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ndask-cudf 23.8.0 requires pandas<1.6.0dev0,>=1.3, but you have pandas 2.1.4 which is incompatible.\ndistributed 2023.7.1 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ngcsfs 2023.12.2.post1 requires fsspec==2023.12.2, but you have fsspec 2023.10.0 which is incompatible.\nraft-dask 23.8.0 requires dask==2023.7.1, but you have dask 2024.2.0 which is incompatible.\ns3fs 2024.2.0 requires fsspec==2024.2.0, but you have fsspec 2023.10.0 which is incompatible.\u001b[0m\u001b[31m\n\u001b[0mSuccessfully installed datasets-2.14.7 fsspec-2023.10.0\n","output_type":"stream"}],"execution_count":43},{"cell_type":"code","source":"import datasets\n\n\ndataset = load_dataset(\"./\", data_dir=\"./\")\ndataset[\"train\"][0]","metadata":{"execution":{"iopub.status.busy":"2024-03-22T22:01:55.342949Z","iopub.execute_input":"2024-03-22T22:01:55.343401Z","iopub.status.idle":"2024-03-22T22:01:55.846011Z","shell.execute_reply.started":"2024-03-22T22:01:55.343369Z","shell.execute_reply":"2024-03-22T22:01:55.844483Z"},"trusted":true},"outputs":[{"traceback":["\u001b[0;31m---------------------------------------------------------------------------\u001b[0m","\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)","Cell \u001b[0;32mIn[44], line 4\u001b[0m\n\u001b[1;32m      1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m \u001b[38;5;21;01mdatasets\u001b[39;00m\n\u001b[0;32m----> 4\u001b[0m dataset \u001b[38;5;241m=\u001b[39m \u001b[43mload_dataset\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m./\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m./\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n\u001b[1;32m      5\u001b[0m dataset[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtrain\u001b[39m\u001b[38;5;124m\"\u001b[39m][\u001b[38;5;241m0\u001b[39m]\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/load.py:2106\u001b[0m, in \u001b[0;36mload_dataset\u001b[0;34m(path, name, data_dir, data_files, split, cache_dir, features, download_config, download_mode, verification_mode, ignore_verifications, keep_in_memory, save_infos, revision, token, use_auth_token, task, streaming, num_proc, storage_options, **config_kwargs)\u001b[0m\n\u001b[1;32m   2101\u001b[0m verification_mode \u001b[38;5;241m=\u001b[39m VerificationMode(\n\u001b[1;32m   2102\u001b[0m     (verification_mode \u001b[38;5;129;01mor\u001b[39;00m VerificationMode\u001b[38;5;241m.\u001b[39mBASIC_CHECKS) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m save_infos \u001b[38;5;28;01melse\u001b[39;00m VerificationMode\u001b[38;5;241m.\u001b[39mALL_CHECKS\n\u001b[1;32m   2103\u001b[0m )\n\u001b[1;32m   2105\u001b[0m \u001b[38;5;66;03m# Create a dataset builder\u001b[39;00m\n\u001b[0;32m-> 2106\u001b[0m builder_instance \u001b[38;5;241m=\u001b[39m \u001b[43mload_dataset_builder\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   2107\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpath\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2108\u001b[0m \u001b[43m    \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2109\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_dir\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2110\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata_files\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_files\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2111\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcache_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcache_dir\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2112\u001b[0m \u001b[43m    \u001b[49m\u001b[43mfeatures\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mfeatures\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2113\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdownload_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownload_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2114\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdownload_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownload_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2115\u001b[0m \u001b[43m    \u001b[49m\u001b[43mrevision\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrevision\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2116\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtoken\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtoken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2117\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstorage_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstorage_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2118\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mconfig_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   2119\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   2121\u001b[0m \u001b[38;5;66;03m# Return iterable dataset in case of streaming\u001b[39;00m\n\u001b[1;32m   2122\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m streaming:\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/load.py:1792\u001b[0m, in \u001b[0;36mload_dataset_builder\u001b[0;34m(path, name, data_dir, data_files, cache_dir, features, download_config, download_mode, revision, token, use_auth_token, storage_options, **config_kwargs)\u001b[0m\n\u001b[1;32m   1790\u001b[0m     download_config \u001b[38;5;241m=\u001b[39m download_config\u001b[38;5;241m.\u001b[39mcopy() \u001b[38;5;28;01mif\u001b[39;00m download_config \u001b[38;5;28;01melse\u001b[39;00m DownloadConfig()\n\u001b[1;32m   1791\u001b[0m     download_config\u001b[38;5;241m.\u001b[39mtoken \u001b[38;5;241m=\u001b[39m token\n\u001b[0;32m-> 1792\u001b[0m dataset_module \u001b[38;5;241m=\u001b[39m \u001b[43mdataset_module_factory\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   1793\u001b[0m \u001b[43m    \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1794\u001b[0m \u001b[43m    \u001b[49m\u001b[43mrevision\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrevision\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1795\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdownload_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownload_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1796\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdownload_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownload_mode\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1797\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_dir\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1798\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdata_files\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_files\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m   1799\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1800\u001b[0m \u001b[38;5;66;03m# Get dataset builder class from the processing script\u001b[39;00m\n\u001b[1;32m   1801\u001b[0m builder_kwargs \u001b[38;5;241m=\u001b[39m dataset_module\u001b[38;5;241m.\u001b[39mbuilder_kwargs\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/load.py:1426\u001b[0m, in \u001b[0;36mdataset_module_factory\u001b[0;34m(path, revision, download_config, download_mode, dynamic_modules_path, data_dir, data_files, **download_kwargs)\u001b[0m\n\u001b[1;32m   1420\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m LocalDatasetModuleFactoryWithScript(\n\u001b[1;32m   1421\u001b[0m         combined_path, download_mode\u001b[38;5;241m=\u001b[39mdownload_mode, dynamic_modules_path\u001b[38;5;241m=\u001b[39mdynamic_modules_path\n\u001b[1;32m   1422\u001b[0m     )\u001b[38;5;241m.\u001b[39mget_module()\n\u001b[1;32m   1423\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m os\u001b[38;5;241m.\u001b[39mpath\u001b[38;5;241m.\u001b[39misdir(path):\n\u001b[1;32m   1424\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mLocalDatasetModuleFactoryWithoutScript\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m   1425\u001b[0m \u001b[43m        \u001b[49m\u001b[43mpath\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata_dir\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_dir\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata_files\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata_files\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdownload_mode\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdownload_mode\u001b[49m\n\u001b[0;32m-> 1426\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_module\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m   1427\u001b[0m \u001b[38;5;66;03m# Try remotely\u001b[39;00m\n\u001b[1;32m   1428\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m is_relative_path(path) \u001b[38;5;129;01mand\u001b[39;00m path\u001b[38;5;241m.\u001b[39mcount(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m1\u001b[39m:\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/load.py:853\u001b[0m, in \u001b[0;36mLocalDatasetModuleFactoryWithoutScript.get_module\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    850\u001b[0m \u001b[38;5;66;03m# even if metadata_configs_dict is not None (which means that we will resolve files for each config later)\u001b[39;00m\n\u001b[1;32m    851\u001b[0m \u001b[38;5;66;03m# we cannot skip resolving all files because we need to infer module name by files extensions\u001b[39;00m\n\u001b[1;32m    852\u001b[0m base_path \u001b[38;5;241m=\u001b[39m Path(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpath, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata_dir \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m)\u001b[38;5;241m.\u001b[39mexpanduser()\u001b[38;5;241m.\u001b[39mresolve()\u001b[38;5;241m.\u001b[39mas_posix()\n\u001b[0;32m--> 853\u001b[0m patterns \u001b[38;5;241m=\u001b[39m sanitize_patterns(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata_files) \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdata_files \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m \u001b[43mget_data_patterns\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbase_path\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    854\u001b[0m data_files \u001b[38;5;241m=\u001b[39m DataFilesDict\u001b[38;5;241m.\u001b[39mfrom_patterns(\n\u001b[1;32m    855\u001b[0m     patterns,\n\u001b[1;32m    856\u001b[0m     base_path\u001b[38;5;241m=\u001b[39mbase_path,\n\u001b[1;32m    857\u001b[0m     allowed_extensions\u001b[38;5;241m=\u001b[39mALL_ALLOWED_EXTENSIONS,\n\u001b[1;32m    858\u001b[0m )\n\u001b[1;32m    859\u001b[0m module_name, default_builder_kwargs \u001b[38;5;241m=\u001b[39m infer_module_for_data_files(\n\u001b[1;32m    860\u001b[0m     data_files\u001b[38;5;241m=\u001b[39mdata_files,\n\u001b[1;32m    861\u001b[0m     path\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpath,\n\u001b[1;32m    862\u001b[0m )\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/data_files.py:456\u001b[0m, in \u001b[0;36mget_data_patterns\u001b[0;34m(base_path, download_config)\u001b[0m\n\u001b[1;32m    454\u001b[0m resolver \u001b[38;5;241m=\u001b[39m partial(resolve_pattern, base_path\u001b[38;5;241m=\u001b[39mbase_path, download_config\u001b[38;5;241m=\u001b[39mdownload_config)\n\u001b[1;32m    455\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 456\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43m_get_data_files_patterns\u001b[49m\u001b[43m(\u001b[49m\u001b[43mresolver\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    457\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n\u001b[1;32m    458\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m EmptyDatasetError(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mThe directory at \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mbase_path\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m doesn\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mt contain any data files\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/data_files.py:233\u001b[0m, in \u001b[0;36m_get_data_files_patterns\u001b[0;34m(pattern_resolver)\u001b[0m\n\u001b[1;32m    231\u001b[0m pattern \u001b[38;5;241m=\u001b[39m split_pattern\u001b[38;5;241m.\u001b[39mreplace(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{split}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m*\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m    232\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 233\u001b[0m     data_files \u001b[38;5;241m=\u001b[39m \u001b[43mpattern_resolver\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpattern\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m    234\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mFileNotFoundError\u001b[39;00m:\n\u001b[1;32m    235\u001b[0m     \u001b[38;5;28;01mcontinue\u001b[39;00m\n","File \u001b[0;32m/opt/conda/lib/python3.10/site-packages/datasets/data_files.py:335\u001b[0m, in \u001b[0;36mresolve_pattern\u001b[0;34m(pattern, base_path, allowed_extensions, download_config)\u001b[0m\n\u001b[1;32m    333\u001b[0m fs_base_path \u001b[38;5;241m=\u001b[39m base_path\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m::\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m://\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;129;01mor\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mroot_marker\n\u001b[1;32m    334\u001b[0m fs_pattern \u001b[38;5;241m=\u001b[39m pattern\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m::\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m0\u001b[39m]\u001b[38;5;241m.\u001b[39msplit(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m://\u001b[39m\u001b[38;5;124m\"\u001b[39m)[\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m]\n\u001b[0;32m--> 335\u001b[0m protocol_prefix \u001b[38;5;241m=\u001b[39m \u001b[43mfs\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprotocol\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m://\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m \u001b[38;5;28;01mif\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mprotocol \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfile\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    336\u001b[0m files_to_ignore \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mset\u001b[39m(FILES_TO_IGNORE) \u001b[38;5;241m-\u001b[39m {xbasename(pattern)}\n\u001b[1;32m    337\u001b[0m matched_paths \u001b[38;5;241m=\u001b[39m [\n\u001b[1;32m    338\u001b[0m     filepath \u001b[38;5;28;01mif\u001b[39;00m filepath\u001b[38;5;241m.\u001b[39mstartswith(protocol_prefix) \u001b[38;5;28;01melse\u001b[39;00m protocol_prefix \u001b[38;5;241m+\u001b[39m filepath\n\u001b[1;32m    339\u001b[0m     \u001b[38;5;28;01mfor\u001b[39;00m filepath, info \u001b[38;5;129;01min\u001b[39;00m fs\u001b[38;5;241m.\u001b[39mglob(pattern, detail\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\u001b[38;5;241m.\u001b[39mitems()\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m    347\u001b[0m     )\n\u001b[1;32m    348\u001b[0m ]  \u001b[38;5;66;03m# ignore .ipynb and __pycache__, but keep /../\u001b[39;00m\n","\u001b[0;31mTypeError\u001b[0m: can only concatenate tuple (not \"str\") to tuple"],"ename":"TypeError","evalue":"can only concatenate tuple (not \"str\") to tuple","output_type":"error"}],"execution_count":44},{"cell_type":"code","source":"!ls","metadata":{"execution":{"iopub.status.busy":"2024-03-22T21:42:04.276003Z","iopub.execute_input":"2024-03-22T21:42:04.276405Z","iopub.status.idle":"2024-03-22T21:42:05.289677Z","shell.execute_reply.started":"2024-03-22T21:42:04.276375Z","shell.execute_reply":"2024-03-22T21:42:05.28867Z"},"trusted":true},"outputs":[{"name":"stdout","text":"data  metadata.jsonl\n","output_type":"stream"}],"execution_count":29},{"cell_type":"code","source":"/kaggle/working/data/","metadata":{"execution":{"iopub.status.busy":"2024-03-22T14:38:33.212637Z","iopub.execute_input":"2024-03-22T14:38:33.213597Z","iopub.status.idle":"2024-03-22T14:38:34.247659Z","shell.execute_reply.started":"2024-03-22T14:38:33.213563Z","shell.execute_reply":"2024-03-22T14:38:34.246509Z"},"trusted":true},"outputs":[{"name":"stdout","text":"/kaggle/working\n","output_type":"stream"}],"execution_count":60}]}