import numpy as np
from PIL import Image
import glob
import keras
from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.optimizers import RMSprop
import matplotlib.pyplot as plt
# メイン
def main():
# 読み込むフォルダ名
folder = ["apple", "banana"]
# 画像とラベルを格納する配列の準備
X = []
Y = []
# 画像読み込み
for index, name in enumerate(folder):
dir = "./" + name
files = glob.glob(dir + "/*.jpg")
for i, file in enumerate(files):
data = img(file)
X.append(data)
Y.append(index)
X = np.array(X)
Y = np.array(Y)
# 画像データを学習用とテスト用に分ける
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2)
# データを50*50*3=7500の一次元配列に変換
x_train = x_train.flatten()
x_train = x_train.reshape(-1, 7500).astype("float32") / 255
x_test = x_test.flatten()
x_test = x_test.reshape(-1, 7500).astype("float32") / 255
# ラベルデータを one-hot ベクトルに直す
y_train = keras.utils.np_utils.to_categorical(y_train, 2)
y_test = keras.utils.np_utils.to_categorical(y_test, 2)
# 入力と出力を指定
in_size = 50*50*3
out_size = 2
# モデル構築
model = Sequential()
model.add(Dense(512, activation='relu', input_shape = (in_size, )))
model.add(Dropout(0.2))
model.add(Dense(out_size, activation='softmax'))
# コンパイル
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 学習
hist = model.fit(x_train, y_train, batch_size = 128, epochs = 20)
# モデルを評価
score = model.evaluate(x_test, y_test, verbose = 1)
print("正解率 = ", score[1], "loss = ", score[0])
# 画像データを取り出す
def img(x):
data = Image.open(x)
data = data.convert("RGB")
# 画像サイズを50x50に強制的に圧縮
data = data.resize((50, 50))
data = np.asarray(data)
return data
if __name__ == "__main__":
main()
#ref(): File not found: "Dence_40_1.png" at page "irie2019-2020706"
#ref(): File not found: "Dence_40_2.png" at page "irie2019-2020706"