オッサンはDesktopが好き

自作PCや機械学習、自転車のことを脈絡無く書きます

mnistのjpeg画像をtensorflowに入力する、Part 02

前回に↓に引き続いて、画像をtensorflowの学習モデルに入力してみます
mnistのjpeg画像をtensorflowに入力する、Part 01 - オッサンはDesktopが好き

今回は、画像データを学習に適した形式(要はテンソル)に構成します。
下記のように並べてファイル出力することにしました。

番号 画像データ(28*28) ラベル
1 0 0 0 ....0 0 0 5
2 0 0 0 ....0 0 0 0
3 8 0 4 ....0 0 0 4
import math
import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

from PIL import Image

TRAIN_DATA_SIZE = 10000
VALID_DATA_SIZE = 500
TEST_DATA_SIZE = 500
IMG_SIZE = 28

if __name__ == "__main__":

    trnIMG = []
    valIMG = []
    tstIMG = []

    init = tf.global_variables_initializer()
    sess = tf.Session()
    with sess.as_default():
    
        # load training images (1-60000)
        train_label = np.loadtxt('./images/training/label.txt')
        for k in range(TRAIN_DATA_SIZE):
            filename = './images/training/image_' + str(k + 1) + '.jpg'
            print(filename)
            imgtf = tf.read_file(filename)
            img = tf.image.decode_jpeg(imgtf, channels=1)
            #resized = tf.cast(resized, tf.float32)
            array = img.eval()
            gray = np.zeros([IMG_SIZE*IMG_SIZE + 1 + 1]) # image, index, label
            for i in range(IMG_SIZE):
                for j in range(IMG_SIZE):
                    gray[i*IMG_SIZE + j + 1] = array[i, j, 0]
            gray[0] = k
            gray[IMG_SIZE*IMG_SIZE + 1] = train_label[k]
            trnIMG.append(gray)

        # load validation images (1-10000)
        evaluate_label = np.loadtxt('./images/evaluation/label.txt')
        for k in range(VALID_DATA_SIZE + TEST_DATA_SIZE):
            filename = './images/evaluation/image_' + str(k + 1) + '.jpg'
            print(filename)
            imgtf = tf.read_file(filename)
            img = tf.image.decode_jpeg(imgtf, channels=1)
            array = img.eval()
            gray = np.zeros([IMG_SIZE*IMG_SIZE + 1 + 1]) # image, index, label
            for i in range(IMG_SIZE):
                for j in range(IMG_SIZE):
                    gray[i*IMG_SIZE + j + 1] = array[i, j, 0]
            gray[0] = k
            gray[IMG_SIZE*IMG_SIZE + 1] = evaluate_label[k]
            if(k < VALID_DATA_SIZE):
                valIMG.append(gray)
            else:
                gray[0] -= VALID_DATA_SIZE
                tstIMG.append(gray)

        np.savetxt('./data/trainImage.txt', trnIMG)
        np.savetxt('./data/validationImage.txt', valIMG)
        np.savetxt('./data/testImage.txt', tstIMG)

MNISTの元データは学習用に60000枚、
評価用に10000枚の画像が用意されています
全部使うと読み込みに一晩かかってしまうので、
学習用に10000枚、評価用に1000枚を使っています