41. 実際にコーディング
# numpy
import numpy as np
# 画像ファイル処理用
from PIL import Image
import glob
# 読み込むフォルダ名
folder = ["apple", "banana"]
# 画像とラベルを格納するための配列を準備
X = []
Y = []
# ファイルオープン~配列生成までを関数化
# 画像サイズは50×50に強制的に圧縮
def img(x):
y = Image.open(x)
y = y.convert(“RGB”)
y = y.resize((50, 50))
y = np.asarray(y)
return y
準備部分。ファイルオープン~配列化までは
トレーニングとテストで2度出てくるので関数化。
Kerasにぶちこむ配列の長さは
統一されていないといけないので
画像のサイズは強制的に50×50にする。
42. 実際にコーディング
# 画像の読み込み処理。インデックスを取得するためにenumerateを使用
# folder名に一致するフォルダの中身を1次元配列化しながらXに格納
# 同時に、Yにはインデックス(今回はappleフォルダが0、bananaフォルダが1)がXと1:1対応で格納される
for index, name in enumerate(folder):
dir = "./" + name
files = glob.glob( dir + "/*.jpg")
for i, file in enumerate(files):
image = img(file)
X.append(image.flatten())
Y.append(index)
X = np.array(X)/255
Y = np.array(Y)
画像読み込み部分
43. 実際にコーディング
from keras.utils import np_utils
# Kerasで使うためにYの値をバイナリに変換
Y = np_utils.to_categorical(Y, 2)
from keras.models import Sequential
from keras.layers.core import Dense,Activation
# モデルの構築
# とりあえず全結合層だけのやつを作ってみる。一層目出力ノード数は適当
model = Sequential( [ Dense(512, input_dim=7500), Activation("relu"), Dense(2), Activation("softmax") ] )
# モデルのコンパイル
# 損失関数:交差エントロピー、最適化関数:sgd、評価関数:正解率(acc)
model.compile(loss="categorical_crossentropy", optimizer="sgd", metrics=["accuracy"])
# 学習。バッチサイズ:5、ログ出力:プログレスバー、反復数:20、検証データの割合:0.3
hist = model.fit(X, Y, batch_size=5, verbose=1, epochs=20, validation_split=0.3)
モデル構築~学習部分
今回はMNISTチュートリアルの流用なので全結合層のみ
44. 実際にコーディング
ringo.jpg
# 学習完了したモデルで画像判別を試してみる
Xt = []
testimg = img("ringo.jpg")
Xt.append(testimg.flatten())
Xt = np.array(Xt)/255
# 判定
# predict_classは予測結果のクラスを返す
result = model.predict_classes(Xt)
# 判定結果。リンゴじゃなければバナナ
if result == 0:
print("apple")
else:
print("banana")
予測部分
学習に使わなかった画像を見せて、リンゴかバナナか答えさせる
apple
45. 実際にコーディング
ringo.jpg
# 学習完了したモデルで画像判別を試してみる
Xt = []
testimg = img("ringo.jpg")
Xt.append(testimg.flatten())
Xt = np.array(Xt)/255
# 判定
# predict_classは予測結果のクラスを返す
result = model.predict_classes(Xt)
# 判定結果。リンゴじゃなければバナナ
if result == 0:
print("apple")
else:
print("banana")
予測部分
学習に使わなかった画像を見せて、リンゴかバナナか答えさせる
apple
banana.jpg
apple
46. 実際にコーディング
ringo.jpg
# 学習完了したモデルで画像判別を試してみる
Xt = []
testimg = img("ringo.jpg")
Xt.append(testimg.flatten())
Xt = np.array(Xt)/255
# 判定
# predict_classは予測結果のクラスを返す
result = model.predict_classes(Xt)
# 判定結果。リンゴじゃなければバナナ
if result == 0:
print("apple")
else:
print("banana")
予測部分
学習に使わなかった画像を見せて、リンゴかバナナか答えさせる
apple
banana.jpg
apple