Python入門トップページ


手書き数字を認識するAIを作ってみよう : 目次

  1. 画像データの準備と確認
  2. 画像データを読み込んでみよう
  3. 画像データの一覧を読み込んでみよう
  4. 学習データとテストデータを準備する
  5. 保存したデータを開いてみる
  6. モデルを作る
  7. 学習(トレーニング)させてみよう
  8. モデルを評価しよう
  9. 学習データで認識させてみよう(1)
  10. 学習データで認識させてみよう(2)
  11. 学習データで認識させてみよう(3)
  12. テストデータで認識させてみよう
  13. モデルと重みパラメータを保存しよう
  14. 学習済みモデルをロードしよう
  15. 学習済みモデルをロードして,認識してみよう

学習データとテストデータを準備する

ここでは,読み込んだ100枚の画像データを80%の学習データと20%テストデータに分割します.

リスト png_files に格納された全画像データをシャッフルして,80%の学習用画像と20%のテスト用画像に分割します.

学習用画像とテスト用画像に分割 (03-data.py)
import glob
import os
from PIL import Image
import numpy as np
import random, math

# png 画像データが保存されているディレクトリの指定
search_path = os.path.sep.join(['png', '*.png'])
# ファイルを検索
files = glob.glob(search_path)

# 全画像データを格納するためのリストを準備する
png_files = []

for file in files:
    img = Image.open(file)
    img = img.convert("P") # 白黒データに変換
    data = np.asarray(img) # numpy 配列に変換
    cat = file[4]
    data = data.flatten()  # numpy 配列を一次元化
    png_files.append([cat, data]) # リストに追加

# シャッフルして,8割を学習用画像に,2割をテスト用画像にする
random.shuffle(png_files)
threshold = math.floor(len(png_files) * 0.8)
train_data = png_files[0:threshold]
test_data = png_files[threshold:]

print("number of training data : ", len(train_data))
print("number of test data : ", len(test_data))
# print(train_data[0])
# print(test_data[0])
number of training data :  80
number of test data :  20

次に,分割した学習用画像とテスト用画像のデータをそれぞれファイルに書き出す.

学習用画像とテスト用画像に分割してファイルに書き出す (03-data.py)
import glob
import os
from PIL import Image
import numpy as np
import random, math

# png 画像データが保存されているディレクトリの指定
search_path = os.path.sep.join(['png', '*.png'])
# ファイルを検索
files = glob.glob(search_path)

# 全画像データを格納するためのリストを準備する
png_files = []

for file in files:
    img = Image.open(file)
    img = img.convert("P") # 白黒データに変換
    data = np.asarray(img) # numpy 配列に変換
    cat = file[4]
    data = data.flatten()  # numpy 配列を一次元化
    png_files.append([cat, data]) # リストに追加

# シャッフルして,8割を学習用画像に,2割をテスト用画像にする
random.shuffle(png_files)
threshold = math.floor(len(png_files) * 0.8)
train_data = png_files[0:threshold]
test_data = png_files[threshold:]

print("number of training data : ", len(train_data))
print("number of test data : ", len(test_data))

# 学習用画像
X_train = []
Y_train = []
for train in train_data:
    X_train.append(np.asarray(train[1]))
    Y_train.append(np.asarray(train[0]))

# テスト用画像
X_test = []
Y_test = []
for test in test_data:
    X_test.append(np.asarray(test[1]))
    Y_test.append(np.asarray(test[0]))

# ファイルに書き出す
np.save('train_X_data.npy', X_train)
np.save('train_Y_data.npy', Y_train)
np.save('test_X_data.npy', X_test)
np.save('test_Y_data.npy', Y_test)

print('ファイルに書き出しました')
number of training data :  80
number of test data :  20
ファイルに書き出しました

目次に戻る