前のパートに戻る 完了して次のパートへ  

  2-1 第2章 データを増幅して精度を向上させよう

第2章 データを増幅して精度を向上させよう


この章では、データを増幅し、推定精度の向上を図りたいと思います。

まずは、gendata_aug.pyという名前でプログラムを作成していきましょう。

intro_deep_learning
└── gendata_aug.py #新規作成

まずはパッケージやライブラリのインポートを実行します。

from PIL import Image
import os, glob
import numpy as np
from sklearn import model_selection

次にクラスラベルと画像サイズを定義しましょう。

classes = ["monkey","boar","crow"]
num_classes = len(classes)
image_size = 50
num_testdata = 100

続いては、

  • トレーニング用の画像を格納する変数X_train, 正解ラベルY_train
  • テスト画像を格納する変数X_test, 正解ラベルY_test を初期化します。

# 画像の読み込み
X_train = []
X_test = []
Y_train = []
Y_test = []

続いては前の章でやったように画像ファイルを順に読み込んでリストに格納し、最終的にNumPy配列に変換します。

if文の中のelseのブロックでは画像を-20°から20°まで回転、および反転させたデータをリストに追加しています。

データの回転イメージ

データの反転イメージ


主な処理は、増幅なしのコードと同様です。

for index, classlabel in enumerate(classes):
    photos_dir = "./" + classlabel
    files = glob.glob(photos_dir + "/*.jpg")
    for i, file in enumerate(files):
        if i >= 200: break #200個以上なら次のラベルへ
        image = Image.open(file)
        image = image.convert("RGB")
        image = image.resize((image_size, image_size))
        data = np.asarray(image)

        if i < num_testdata: #テストデータの個数以下の場合
            X_test.append(data)
            Y_test.append(index)
        else: #テストデータの個数以上の場合、増幅して学習データに追加
            for angle in range(-20,21,5):
                # 回転
                img_r = image.rotate(angle) 
                data = np.asarray(img_r)
                X_train.append(data)
                Y_train.append(index)

                # 反転
                img_trans = img_r.transpose(Image.FLIP_LEFT_RIGHT)
                data = np.asarray(img_trans)
                X_train.append(data)
                Y_train.append(index)

X_train = np.array(X_train)
X_test = np.array(X_test)
y_train = np.array(Y_train)
y_test = np.array(Y_test)

最後にxyという変数に4つのデータを格納し、NumPyのsave関数を用いて、ファイルに出力します。

取り出すときには格納するときと同じ変数名で参照するように気をつけましょう。

xy = (X_train, X_test, y_train, y_test)
np.save("./animal_aug.npy", xy)

ファイルを保存したら実行してみましょう。

$ python gendata_aug.py

そして、同じ階層に「animal_aug.npy」というファイルが生成されたら成功です。

続いてはこのデータを用いてトレーニングを行っていきましょう。

議論
0 質問