{"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":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\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":"f25ba8a3-d800-4696-978d-0918133500a8","_cell_guid":"7dc934f1-c0ab-4770-a6f2-563601ab556c","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train =  pd.read_csv('../input/predict-volcanic-eruptions-ingv-oe/train.csv') #dataframe of segment_id vs time_to eruption","metadata":{"_uuid":"d65ca757-dd35-4cb4-90d0-f56f9875a917","_cell_guid":"6aae4f0a-cf77-4187-9ee9-40343ada727a","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_test = pd.read_csv('../input/predict-volcanic-eruptions-ingv-oe/sample_submission.csv')","metadata":{"_uuid":"b729d48e-e2eb-432c-8168-c79b06c0b4f7","_cell_guid":"cfffd2f6-f3bf-447d-827b-db7bcd0a06a0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#list of segment_id, train\nid_list = [] \nfor dirname, _, filenames in os.walk('../input/predict-volcanic-eruptions-ingv-oe/train'):\n    for filename in filenames:\n        id_list.append(os.path.join(dirname, filename))\n        \nfor i in range(len(id_list)): \n    id_list[i] = id_list[i].replace('../input/predict-volcanic-eruptions-ingv-oe/train/','').replace('.csv','')\n    \nid_list = np.asarray(id_list)\nid_list = id_list.astype(np.int)\n\ndisplay( len(id_list), id_list)","metadata":{"_uuid":"ce5d2fae-bbde-4944-a465-1ebbd900c71a","_cell_guid":"451f81a9-accf-4165-8356-460ce57abc97","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"id_list_val = id_list[(len(id_list) - 1000):]\nid_list_train = id_list[:(len(id_list) - 1000)]\nprint(len(id_list_val), len(id_list_train))","metadata":{"_uuid":"a6756746-870f-4356-842e-3c17939ecbc7","_cell_guid":"485ddaf8-886c-45c6-a57a-230562b81e80","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#list of segment_id, test\nid_list_test = [] \nfor dirname, _, filenames in os.walk('../input/predict-volcanic-eruptions-ingv-oe/test'):\n    for filename in filenames:\n        id_list_test.append(os.path.join(dirname, filename))\n        \nfor i in range(len(id_list_test)): \n    id_list_test[i] = id_list_test[i].replace('../input/predict-volcanic-eruptions-ingv-oe/test/','').replace('.csv','')\n    \nid_list_test = np.asarray(id_list_test)\nid_list_test = id_list_test.astype(np.int)\n\ndisplay( len(id_list_test), id_list_test)","metadata":{"_uuid":"9ed8a93d-49d8-41f0-b8d5-2128cea4d079","_cell_guid":"dc8315b6-d32b-4cbf-84b9-e19333aa9e79","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import matplotlib.pyplot as plt\nimport scipy as scp\nimport scipy.signal\nimport time","metadata":{"_uuid":"6ef2272e-4631-48ca-a8c0-5420084bc3a9","_cell_guid":"4abd4ae0-60e4-4dc2-a96e-bd3177504a51","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#optional\ndef get_spectra(sens_num, id_segment, train):\n    if train:\n        path = '../input/predict-volcanic-eruptions-ingv-oe/train/' + str(id_segment) + '.csv'\n    else:\n        path = '../input/predict-volcanic-eruptions-ingv-oe/test/' + str(id_segment) + '.csv'\n    \n    df_spec = pd.read_csv(path)\n    sens_num = 'sensor_' + str(sens_num)\n    \n    sns = df_spec[sens_num].to_numpy()\n    f, t, Sxx = scipy.signal.spectrogram(sns, 100)\n    plt.figure(figsize=(25,10))\n    spectra = plt.pcolormesh(t, f, Sxx, shading='auto')\n    plt.ylabel('Frequency [Hz]')\n    plt.xlabel('Time [sec]')\n    #plt.ylim(0,30)\n    plt.colorbar(spectra)\n    plt.show()\n    pass","metadata":{"_uuid":"05dd27cd-727e-4727-bf79-7d3083462394","_cell_guid":"11dcd4d7-097e-449d-9e41-7a17fe7e6bab","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#optional\nid_segment1 = id_list_train[0]\nget_spectra(sens_num=3, id_segment=id_segment1, train=True)","metadata":{"_uuid":"e3bdf86c-3d75-48c9-8140-44932f84612d","_cell_guid":"8dd55158-9f35-4e06-9ac3-29f709cb6e44","collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def extract_features(id_df, id_segment, train):\n    \n    extracted_features = np.zeros([10,129,267])\n    \n    if train:\n        t = id_df['time_to_eruption'].loc[id_df['segment_id'] == id_segment]\n        t = t.to_numpy()\n    else:\n        t = 0\n    \n    if train:\n        path = '../input/predict-volcanic-eruptions-ingv-oe/train/' + str(id_segment) + '.csv'\n    else:\n        path = '../input/predict-volcanic-eruptions-ingv-oe/test/' + str(id_segment) + '.csv'\n        \n    df_extr = pd.read_csv(path)\n    sns = df_extr.to_numpy()\n\n    for i in range(10):\n        _, _, Sxx  = scipy.signal.spectrogram(sns[:,i], 100)\n        extracted_features[i] = Sxx\n        np.nan_to_num(extracted_features[i], copy=False, nan=0.0)\n    \n    \n    return extracted_features, t","metadata":{"_uuid":"6dee9623-f7a8-493e-acfb-6a59fe2dbecb","_cell_guid":"b50f2875-31f8-4c41-a652-832feefa40d2","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#optional\nextracted_features1, t1 = extract_features(df_train, id_list_train[0], train=True)\ndisplay(extracted_features1, t1)","metadata":{"_uuid":"d8c5f223-cc43-44b8-bb84-7d1804b297cd","_cell_guid":"9563ac4d-7ade-4b81-bd53-4a86f1d69adf","_kg_hide-input":false,"_kg_hide-output":false,"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_data = 38865.23487951409\nstd_data = 2305226.454056576","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_data = 0.0\nfor i in range(len(id_list)):\n    e_f, _ = extract_features(df_train, id_list[i], train=True)\n    e_f = np.asarray(e_f)\n    mean_data += np.sum(e_f)\n    \n    if i % 100 == 99:\n        print(i + 1)\n\nmean_data /= 10 * 129 * 267 * len(id_list)\nprint(mean_data)","metadata":{"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"std_data = 0.0\nfor i in range(len(id_list)):\n    e_f, _ = extract_features(df_train, id_list[i], train=True)\n    e_f = np.asarray(e_f)\n    e_f = np.subtract(e_f, mean)\n    e_f = np.power(e_f, 2)\n    std_data += np.sum(e_f)\n    \n    if i % 100 == 99:\n        print(i + 1)\n\nstd_data /= 10 * 129 * 267 * len(id_list)\nstd_data = np.sqrt(std_data)\nprint(std_data)","metadata":{"collapsed":true,"jupyter":{"outputs_hidden":true},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nimport torch.optim as optim","metadata":{"_uuid":"d3451911-5f19-46df-8349-b30771fcfbf5","_cell_guid":"901d6858-653d-43b4-8245-c6471f6f22fc","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"USE_GPU = True\n\nif USE_GPU and torch.cuda.is_available():\n    print('using device: cuda')\nelse:\n    print('using device: cpu')","metadata":{"_uuid":"a6e705de-aadb-48f2-814a-a86ee0347a05","_cell_guid":"530691c2-382f-4d7b-8517-13685363fcd6","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_target = 22848906.832769126\nstd_target = 13484385.863632679","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"mean_target, std_target = 0, 0\nmean_target = df_train['time_to_eruption'].mean()\nstd_target = df_train['time_to_eruption'].std()\nprint(mean_target, std_target)","metadata":{"_uuid":"86529193-8303-453e-ab22-0a389a84831f","_cell_guid":"527ea5f1-4e46-417a-be37-c6ac601b91f7","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def normalize(tensor, mean, std):\n    tensor = (tensor - mean)/ std\n    return tensor\n\ndef unnormalize(tensor, mean, std):\n    tensor = tensor * std + mean\n    return tensor","metadata":{"_uuid":"88c6e20a-d8d3-4a8a-ab8b-bfeb94319d6c","_cell_guid":"6b4d8337-d063-4b07-bad0-e19e744bdbf3","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"class erupt_predictor(torch.nn.Module):\n    def __init__(self):\n        super(erupt_predictor, self).__init__()\n        \n        self.conv0 = nn.Conv2d(1, 8, 2)  # input, output, kernel\n        self.conv1 = nn.Conv2d(8, 16, 3)\n        self.conv2 = nn.Conv2d(16, 32, 3)\n        self.conv3 = nn.Conv2d(32, 64, 3)\n        self.conv4 = nn.Conv2d(64, 128, 3)\n        self.conv5 = nn.Conv2d(128, 256, 3)\n        self.conv6 = nn.Conv2d(256, 512, 3)\n        \n        self.pool1 = nn.MaxPool2d(2, 2, (1, 0)) #kernel, stride, padding\n        self.pool2 = nn.MaxPool2d(2, 2, 1)\n        self.pool3 = nn.MaxPool2d((2, 4), (2, 4), (1, 0))\n        self.pool4 = nn.MaxPool2d(2, 2, 1)\n        self.pool5 = nn.MaxPool2d(2, 2, 0)\n        \n        self.fc1 = nn.Linear(512, 64)\n        self.fc2 = nn.Linear(64, 1)\n        self.fc3 = nn.Linear(10, 10)\n        self.fc4 = nn.Linear(10, 1)\n        \n        torch.nn.init.xavier_uniform_(self.conv0.weight)\n        torch.nn.init.xavier_uniform_(self.conv1.weight)\n        torch.nn.init.xavier_uniform_(self.conv2.weight)\n        torch.nn.init.xavier_uniform_(self.conv3.weight)\n        torch.nn.init.xavier_uniform_(self.conv4.weight)\n        torch.nn.init.xavier_uniform_(self.conv5.weight)\n        torch.nn.init.xavier_uniform_(self.conv6.weight)\n        torch.nn.init.xavier_uniform_(self.fc1.weight)\n        torch.nn.init.xavier_uniform_(self.fc2.weight)\n        torch.nn.init.xavier_uniform_(self.fc3.weight)\n        torch.nn.init.xavier_uniform_(self.fc4.weight)\n\n    def forward(self, x):\n        x = F.leaky_relu(self.conv0(x))\n        \n        x = F.leaky_relu(self.conv1(x))\n        x = self.pool1(x)\n        x = F.leaky_relu(self.conv2(x))\n        x = self.pool2(x)\n        x = F.leaky_relu(self.conv3(x))\n        x = self.pool3(x)\n        \n        x = F.leaky_relu(self.conv4(x))\n        x = self.pool4(x)\n        x = F.leaky_relu(self.conv5(x))\n        x = self.pool5(x)\n        x = F.leaky_relu(self.conv6(x))\n        \n        x = x.view(-1, 512)\n        x = self.fc1(x)\n        x = F.leaky_relu(x)\n        x = self.fc2(x)\n        x = F.leaky_relu(x)\n\n        x = torch.transpose(x, 0, 1)\n        x = self.fc3(x)\n        x = F.leaky_relu(x)\n        x = self.fc4(x)\n        x = F.leaky_relu(x)\n        x = torch.reshape(x, (-1,))\n        \n        return x\n","metadata":{"_uuid":"389fcdc8-4b39-4c9b-89a2-95efb9f007bb","_cell_guid":"91d5c4bf-eab3-4d87-b573-a0590aabcfcf","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = erupt_predictor()\nmodel.double()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"params = list(model.parameters())\nprint(len(params))\nfor i in range(len(params)):\n  print(params[i].size())","metadata":{"_uuid":"279fb5d0-5cb1-4ddf-adec-465e187bc5fc","_cell_guid":"0a8686c5-bd2d-40d7-83ab-3b2e7f67ba5e","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def hook1(grad):\n    nan_sum = torch.isnan(grad.view(-1)).sum().item()\n    if nan_sum != 0:\n        print('nan values count:{}'.format(nan_sum))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"clip_value = 0.1","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"for p in model.parameters():\n    p.register_hook(hook1)\n    p.register_hook(lambda grad: torch.clamp(grad, -clip_value, clip_value))","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"epochCount = 30\nlearningRate = 1e-4\ncriterion = nn.L1Loss()\n#criterion = nn.MSELoss()\noptimizer = optim.Adam(params, lr = learningRate, betas = (0.9,0.999), eps = 1e-6)\n#optimizer = optim.SGD(params, lr = learningRate, momentum = 0.9, nesterov=False)","metadata":{"_uuid":"020b6f8b-e029-4f40-8924-a57283d40c46","_cell_guid":"b1e8fbf8-0841-4f1f-9c37-6c93ae5902c6","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def missing_sensors(e_f):\n    miss_sens_list = []\n    for i in range(len(e_f)):\n        mean = np.mean(e_f[i])\n        miss_sens_list.append(mean == 0)\n    sens_num = np.sum(miss_sens_list)\n    return miss_sens_list, sens_num","metadata":{"_uuid":"09c459b9-fe68-4159-aec6-4a8e976b2a71","_cell_guid":"52d2238f-3533-43a2-8f1c-37821ccffd3b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def prep_data(e_f, t, train): # if train=False, write t=None\n        \n        #miss_sens_list, _ = missing_sensors(e_f)\n        #e_f = np.delete(e_f, np.where(miss_sens_list), 0)\n        \n        e_f_trch = torch.DoubleTensor(e_f)\n        e_f_trch = e_f_trch.unsqueeze(1)\n        if train:\n            t_trch = torch.DoubleTensor(t)\n        else:\n            t_trch = 0\n        \n        #t_trch = normalize(t_trch, mean_target, std_target)\n        e_f_trch = normalize(e_f_trch, mean_data, std_data)\n        \n        np.nan_to_num(e_f_trch, copy=False, nan=0.0)\n        \n        e_f_trch = e_f_trch.to('cuda')\n        t_trch = t_trch.to('cuda')\n        \n        return e_f_trch, t_trch","metadata":{"_uuid":"6b940c91-de92-435e-a8be-c14206bc88ca","_cell_guid":"2dacb8e4-76b5-43d4-b865-bb80b68659a0","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import random","metadata":{"_uuid":"23258373-c54e-4c37-bdf4-5dac8c72c262","_cell_guid":"299d0d88-4037-4fa1-8e58-8dc5c70e48f8","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def evaluate():\n    global model, criterion\n    i = np.random.randint(0, 1000)\n    print('------evaluation------')\n    print('segment idx:', i)\n    extracted_features, t = extract_features(df_train, id_list_val[i], train=True)\n    with torch.no_grad():\n        e_f_trch, t_trch = prep_data(extracted_features, t, train=True)\n        \n        e_f_trch = e_f_trch.to('cuda')\n        t_trch = t_trch.to('cuda')\n        model = model.to('cuda')\n        criterion = criterion.to('cuda')\n\n        output = model(e_f_trch)\n        ms, sens_num = missing_sensors(extracted_features)\n        loss = criterion(output, t_trch)\n        \n        output = output.cpu()\n        t_trch = t_trch.cpu()\n        loss = loss.cpu()\n        \n        print('%d sensor(s) missing:' % sens_num, ms)\n        print('ground_truth & predicted time:')\n        print(t_trch.numpy(), output.numpy(), sep='\\n')\n        print('loss:', loss.numpy())\n        print('----------------------')\n        model.train(mode=True)","metadata":{"_uuid":"3ebeb6ca-4efb-4528-8f65-24230a87a2d2","_cell_guid":"40d7409e-989b-46f2-82f1-85338101f5b6","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"evaluate()","metadata":{"_uuid":"c9870fe8-9799-4911-8e40-3a8019518449","_cell_guid":"2799e1a3-a2d6-4a11-b99f-b9f58feab723","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def validate():\n    global model, criterion\n    epoch_loss = 0.0\n    print('------validation------')\n    for i in range(1000):\n        with torch.no_grad():\n            extracted_features, t = extract_features(df_train, id_list_val[i], train=True)\n            e_f_trch, t_trch = prep_data(extracted_features, t, train=True)\n            \n            e_f_trch = e_f_trch.to('cuda')\n            t_trch = t_trch.to('cuda')\n            model = model.to('cuda')\n            criterion = criterion.to('cuda')\n            \n            output = model(e_f_trch)\n            loss = criterion(output, t_trch)\n            epoch_loss += loss\n            \n            if i % 100 == 99:\n                print(i + 1, '/1000', sep='')\n   \n    epoch_loss /= 1000\n    epoch_loss = epoch_loss.cpu().item()\n    print('mean validation loss:', epoch_loss)\n    print('----------------------')\n    return epoch_loss","metadata":{"_uuid":"2e00ae8e-231c-4246-a4fa-8302c29c42e8","_cell_guid":"3eb2d72b-7ea1-4dac-904a-91ad780d95e7","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"validate()","metadata":{"_uuid":"06d91dc6-e6ea-4575-b651-c1cf43259289","_cell_guid":"1feb95c1-8733-4fc2-a4f6-1e450bfec8da","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"loss_val = []\nloss_train = []\nrunning_loss = 0.0","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#with torch.autograd.detect_anomaly():\nstart_tr = time.time()\nwith torch.enable_grad():\n    model.train(mode=True)\n    for epoch in range(epochCount):\n        start_ep = time.time()\n\n        model.train(mode=True)\n        optimizer.zero_grad()\n\n        print('-' * 10)\n        print('EPOCH %d' % (epoch + 1))\n        print('-' * 10)\n\n        start_batch = time.time()\n        random.shuffle(id_list_train)\n        for i, id_seg in enumerate(id_list_train):\n\n            e_f, t = extract_features(df_train, id_seg, train=True)\n            e_f_trch, t_trch = prep_data(e_f, t, train=True)\n\n            e_f_trch = e_f_trch.to('cuda')\n            t_trch = t_trch.to('cuda')\n            model = model.to('cuda')\n            criterion = criterion.to('cuda')\n\n            output = model(e_f_trch)\n            loss = criterion(output, t_trch)\n            loss_for_plt = loss\n            loss_for_plt = loss_for_plt.cpu().detach().numpy()\n            running_loss += loss_for_plt\n            loss.backward()\n            optimizer.step()\n\n            if i % 100 == 99:\n                end_batch = time.time()\n                print('%d / %d' % (i + 1, len(id_list_train)))\n                print('time: %d s' % (end_batch - start_batch))\n                start_batch = end_batch\n\n            if i % 500 == 499:\n                evaluate()\n                \n            if i % 1000 == 999:\n                running_loss /= 1000\n                loss_train.append(running_loss)\n                running_loss = validate()\n                loss_val.append(running_loss)\n                running_loss = 0.0\n                    \n                print(loss_train, '\\n', loss_val)\n                    \n        end_ep = time.time()\n        print('epoch end losses:',loss_train, loss_val, sep='\\n')\n        print('time spent: %d s' % (end_ep - start_ep))\n\nend_tr = time.time()\nprint('sector clear, time spent: %d s' % (end_tr - start_tr))","metadata":{"_uuid":"2c34dde3-90e4-4e4a-bafa-83acb4634821","_cell_guid":"8afd8763-8c41-4691-94b0-6b9a5efb10d6","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"plt.figure(figsize=[10, 10])\nplt.plot(loss_train,label='train loss')\nplt.plot(loss_val,label='validation loss')\nplt.xlabel('every 1000 iterations')\nplt.ylabel('loss')\nplt.legend(loc='upper right')","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"checkpoint = {'model': erupt_predictor(),\n              'state_dict': model.state_dict(),\n              'optimizer' : optimizer.state_dict()}\n\ntorch.save(checkpoint, 'checkpoint_17_EPOCHS.pth')","metadata":{"_uuid":"80fea36c-a40b-4b30-9fff-727c86d4ac34","_cell_guid":"2b2f21c1-b468-4413-b652-bf92cba0531b","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def load_checkpoint(filepath):\n    checkpoint = torch.load(filepath)\n    model = checkpoint['model']\n    model.load_state_dict(checkpoint['state_dict'])\n    \n    model.eval()\n    \n    return model","metadata":{"_uuid":"16153d58-d24f-4a7e-a168-cacebd3a53f9","_cell_guid":"0f05971a-0aa9-4d74-b9de-79417b136364","trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"model = load_checkpoint('../input/model-checkpoint/checkpoint (1).pth')\nprint(model)","metadata":{"_uuid":"299691d1-b55f-4a3c-baff-812e3b6cb7e5","_cell_guid":"8783ad46-f936-4ddf-83a3-86ae114e757d","trusted":true},"execution_count":null,"outputs":[]}]}