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"