前回に↓に引き続いて、画像を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枚を使っています