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