Kaggle - Digit Recognizer(5) - 手書きの数字認識

手書きの数字認識問題Digit Recognizerの5回目(最終)の記事になります。

今回は、予測結果をKaggleに提出します。

前回記事のTorchvisionで用意されているResNet-18(畳み込みニューラル ネットワーク)モデルを使った成績が一番よかったので、このソースに提出ファイルの作成処理を追加します。

提出ファイルの作成

まずKaggle環境からtest.csvファイルをダウンロードしておきます。

前回のソースに下記のソースを追記し、実行します。(処理内容はコメントをご参照ください。)

[ソース]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
test_data = pd.read_csv('./test.csv', dtype=np.float32)
test_data = test_data.to_numpy() / 255.0
test_data = test_data.reshape(-1, 28, 28, 1) # reshapeの一つのサイズが決まっているとき、もう一方を-1とすると、-1には元の形状から推測された値が入る。

test_tensor = torch.from_numpy(test_data).permute(0, 3, 1, 2) # numpy ndarrayからPytorch tensorに変換し、次元の入れ替え(permute)
test_tensor = test_tensor.repeat(1, 3, 1, 1) # データセットの繰り返し

images = test_tensor.to(device)
outputs = model(images)
_, predictions = torch.max(outputs, 1) # 配列の最大値の要素を返す

predictions = predictions.cpu()
submission = pd.DataFrame({'ImageId': np.arange(1, (predictions.size(0) + 1)), 'Label': predictions})
submission.to_csv("submission.csv", index = False)
print("# 終了 #")

submission.csvが出力されますので、このファイルをKaggleに提出します。

[提出結果]

提出結果は98.21%となりました。

十分な正解率になったかと思います。