main.py

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"

seminar-personal/irie2019


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS