PythonMania

普段はロボットとAIを組み合わせて色々作ってます。Python関係以外も色々投稿していくと思います。

【Python】fastaiとDenseNetで実際にコミットしてみる 【DeepLearning】


今回は予測した結果を実際にコミットしてみて、精度を見てみたいと思います。




www.kaggle.com


サボテンの画像認識コンペです(既に終了しているコンペです)



先に結果を書いてしまうと、

Scoreは1.000

でした!

簡単に高精度の結果が出せてしまうfastai恐るべしですね




#必要なライブラリのインポート
import numpy as np
import os
from sklearn.metrics import f1_score

from fastai import *
from fastai.vision import *

import torch
import torch.nn as nn
import torchvision
import cv2

from tqdm import tqdm
from skmultilearn.model_selection import iterative_train_test_split
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer
import warnings
warnings.filterwarnings("ignore")

%load_ext autoreload
%autoreload


#ディレクトリの指定
data_folder = Path("../input")
train_df = pd.read_csv("../input/train.csv")
test_df = pd.read_csv("../input/sample_submission.csv")

#学習用データの読み込み
test_img = ImageList.from_df(test_df, path=data_folder/'test', folder='test')
trfm = get_transforms(do_flip=True, flip_vert=True, max_rotate=10.0, max_zoom=1.1, max_lighting=0.2, max_warp=0.2, p_affine=0.75, p_lighting=0.75)
train_img = (ImageList.from_df(train_df,path=data_folder/"train",folder="train")
            .split_by_rand_pct(0.01)
            .label_from_df()
            .add_test(test_img)
            .transform(trfm,size=128)
            .databunch(path=".",bs=64,device=torch.device('cuda:0'))
             .normalize(imagenet_stats))



learn = cnn_learner(train_img, models.densenet161, metrics=[error_rate, accuracy])
#学習の実行
lr = 3e-02
learn.fit_one_cycle(6, slice(lr))

#推論実行・提出用ファイル作成
preds,_ = learn.get_preds(ds_type=DatasetType.Test)


test_df.has_cactus = preds.numpy()[:, 0]

test_df.to_csv('sample_submit.csv', index=False)