Kaggleコンペの参加チュートリアル(3.推論ファイル投稿編)


はじめに

「タイタニックの生存予測」コンペに投稿

  • 前回、Beginner向けコンペである「タイタニックの生存予測」のデータを使って、モデルの学習を行った。
  • 今回は、学習済モデルを使って投稿用の推論ファイルを作成し、実際にコンペに投稿する。

テストデータ推論

  • 学習済モデルを使って、テストデータを推論させる。
  • 推論コードは以下。
estimate.ipynb(推論コード)
#%load_ext autoreload
#%autoreload

import os
from datetime import datetime
import pandas as pd
import numpy as np
import torch
from torch.utils.data import DataLoader
from src.dataset.dataset import DatasetWithTag, DatasetNoTag
from src.network.simplefcn import SimpleFCN

# config
TRAIN_FILE = "./data/train_prepro.csv"
TEST_FILE = './data/test_prepro.csv'
MODEL = './model/20210618_063522/049_losstrain_0.3914_lossval_0.3814.pth'

BATCH_SIZE = 100
INPUT_N = 7
OUTPUT_N = 2
NODE_N = 64

if __name__ == '__main__':
    # dataloader
    dataset_t = DatasetWithTag(TRAIN_FILE)
    mean, std = dataset_t.get_mean_std()
    dataset = DatasetNoTag(TEST_FILE, mean, std)
    dataloader = torch.utils.data.DataLoader(dataset, batch_size=BATCH_SIZE, shuffle=False, num_workers=1)

    # Network
    net = SimpleFCN(INPUT_N, OUTPUT_N, NODE_N)
    model = torch.load(MODEL)
    net.load_state_dict(model, strict=True)
    #net.eval()

    # prepare output
    test_df = pd.read_csv('./data/test.csv')
    test_data = test_df.values
    passangerids = test_data[:, 0]
    result = np.zeros((passangerids.shape[0], 2))
    result[:, 0] = passangerids

    # estimate
    for i, (batch) in enumerate(dataloader):
        est = net(batch).data
        estmax = torch.max(est, 1)[1]
        result[i*BATCH_SIZE : (i+1)*BATCH_SIZE, 1] = estmax.T
        # result[i*BATCH_SIZE : (i+1)*BATCH_SIZE, 2:] = est

    # output result
    filename = './result/' + os.path.basename(MODEL) + '.csv'
    np.savetxt(filename, result, delimiter=',', fmt='%d')
    print('save file to {}'.format(filename))
  • 実行結果
save file to ./result/049_losstrain_0.3914_lossval_0.3814.pth.csv

コンペへの投稿

  • 「Submit Predictions」を選択。
  • 推論結果のCSVファイルをアップロードし、コメントを書いて「Make Submission」。
  • 投稿できました!

投稿結果の確認

  • 早速LeaderBoardを確認。
  • スコアは0.76555、39216/49676位。

コードをGithubリポジトリに保存

  • 作成したコード一式を、Githubのプライベートリポジトリに保存しておく。
  • まず、Githubにログインしてリポジトリを作成。
  • Amazon Sagemakerにログインし、ノートブック→Gitリポジトリから「リポジトリの追加」を選択し、設定画面へ。
  • リポジトリの設定を以下の例のように入力して、「リポジトリの追加」を選択。
  • ノートブックインスタンスを一旦「停止」して、「編集」からGitリポジトリを追加。
  • ノートブックインスタンスをJupyter Labから起動し、TerminalからコマンドでGithubにPushする。
sh-4.2$ cd SageMaker/titanic
sh-4.2$ git init
sh-4.2$ git add *
sh-4.2$ git commit -m "1st submitted base model"
sh-4.2$ git push origin master

最後に

  • ひとまず、Kaggleコンペに参加してみることができました。
  • 次はもう少し実用的なコンペにTryしたいと思います。