こんにちは, 現在Kerasを使用して画像の分類(2クラス)に取り組んでいます.
皆様のおかげで, 学習段階, モデル保存はエラーなく実行できました.
しかし, いざ保存したモデルを利用して画像を分類させると,
本来ならば, [クラス1の確率, クラス2の確率]となるはずなのですが,
今回[確率]のみとなってしまい, 困っています.
本環境について
Win 10
jupyter notebook
-python 3.6
-Keras 2.x
以上の環境で実行しております.
使用画像について
使用画像は, 240*160の画像となります.
こちらをtrain 400枚ずつ, validation 100枚ずつ, test10枚ずつ用意しました.
(サンプル少ないのは承知の上です)
ソースコードについて
学習段階までは, こちらを,
モデル利用からはこちらのページのコードを使用しております.
Keras
1import numpy as np 2from keras.models import model_from_json 3from keras.preprocessing.image import load_img, img_to_array 4from keras import layers 5from keras import models 6 7model = models.Sequential() 8model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3))) 9model.add(layers.MaxPooling2D((2,2))) 10 11model.add(layers.Conv2D(64,(3,3),activation="relu")) 12model.add(layers.MaxPooling2D((2,2))) 13 14model.add(layers.Conv2D(128,(3,3),activation="relu")) 15model.add(layers.MaxPooling2D((2,2))) 16 17model.add(layers.Conv2D(128,(3,3),activation="relu")) 18model.add(layers.MaxPooling2D((2,2))) 19 20model.add(layers.Flatten()) 21 22model.add(layers.Dense(512,activation="relu")) 23model.add(layers.Dense(1,activation="sigmoid")) 24 25model.summary() 26 27from keras import optimizers 28 29model.compile(loss="binary_crossentropy", 30 optimizer=optimizers.RMSprop(lr=1e-4), 31 metrics=["acc"]) 32 33##正規化 34from keras.preprocessing.image import ImageDataGenerator 35train_dir = "/~~/train" 36validation_dir = "/~~/validation" 37 38train_datagen = ImageDataGenerator(rescale=1./255) 39validation_datagen = ImageDataGenerator(rescale=1./255) 40 41train_generator = train_datagen.flow_from_directory( 42 train_dir, 43 target_size=(150,150), 44 batch_size=20, 45 class_mode="binary" 46) 47validation_generator = validation_datagen.flow_from_directory( 48 validation_dir, 49 target_size=(150,150), 50 batch_size=20, 51 class_mode="binary" 52) 53 54##学習 55history = model.fit_generator(train_generator, 56 steps_per_epoch=100, 57 epochs=30, 58 validation_data=validation_generator, 59 validation_steps=50) 60##モデルの保存 61json_string=model.to_json() 62open("/~~/train.json","w").write(json_string) 63model.save_weights("/~~/train.hdf5") 64 65 66##未知の画像を分類 67import cv2 68for i in range(1, 21): 69 img = cv2.imread("/~~/test ({0:d}).jpg".format(i)) 70 71 # 入力画像サイズ - 訓練時の画像サイズと合わせる 72 INPUT_IMAGE_SIZE = 150 73 74 # GrayScaleのときに1、COLORのときに3にする - 訓練時のカラーチャンネル数と合わせる 75 COLOR_CHANNEL = 3 76 77 # 確認したい画像へのフルパス 78 TEST_PATH = "/~~/test ({0:d}).jpg".format(i) 79 80 # 今回利用するアーキテクチャと重みのファイルへのパス 81 MODEL_ARC_PATH = '/~~/train.json' 82 WEIGHTS_PATH = '/~~/train.hdf5' 83 84 # 今回は1枚の画像だが複数画像対応も可能 85 test_images = [] 86 87 # テスト画像の入力部分 88 if COLOR_CHANNEL == 1: 89 img = load_img(TEST_PATH, color_mode = "grayscale", target_size=(INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE)) 90 elif COLOR_CHANNEL == 3: 91 img = load_img(TEST_PATH, color_mode = "rgb", target_size=(INPUT_IMAGE_SIZE, INPUT_IMAGE_SIZE)) 92 array = img_to_array(img) 93 test_images.append(array) 94 95 test_images = np.array(test_images) 96 97 # imageの画素値をint型からfloat型にする 98 test_images = test_images.astype('float32') 99 # 画素値を[0~255]⇒[0~1]とする 100 test_images = test_images / 255.0 101 102 # ------------------------------------------------------------------------------------- 103 # モデル読み込み部分 104 # ------------------------------------------------------------------------------------- 105 106 # JSONファイルからモデルのアーキテクチャを得る 107 model_arc_str = open(MODEL_ARC_PATH).read() 108 model = model_from_json(model_arc_str) 109 110 # モデル構成の確認 111 model.summary() 112 113 # モデルの重みを得る 114 model.load_weights(WEIGHTS_PATH) 115 116 # ------------------------------------------------------------------------------------- 117 # テスト実行部 118 # ------------------------------------------------------------------------------------- 119 120 # テストの実行 121 result = model.predict(test_images, batch_size=1) 122 123 # 結果の表示 124 print('result : ', result) 125 max_index = np.argmax(result) 126 print('max_index : ', max_index) 127
そして出ている結果の一部が以下の通りです.
Keras
1_________________________________________________________________ 2Layer (type) Output Shape Param # 3================================================================= 4conv2d_1 (Conv2D) (None, 148, 148, 32) 896 5_________________________________________________________________ 6max_pooling2d_1 (MaxPooling2 (None, 74, 74, 32) 0 7_________________________________________________________________ 8conv2d_2 (Conv2D) (None, 72, 72, 64) 18496 9_________________________________________________________________ 10max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64) 0 11_________________________________________________________________ 12conv2d_3 (Conv2D) (None, 34, 34, 128) 73856 13_________________________________________________________________ 14max_pooling2d_3 (MaxPooling2 (None, 17, 17, 128) 0 15_________________________________________________________________ 16conv2d_4 (Conv2D) (None, 15, 15, 128) 147584 17_________________________________________________________________ 18max_pooling2d_4 (MaxPooling2 (None, 7, 7, 128) 0 19_________________________________________________________________ 20flatten_1 (Flatten) (None, 6272) 0 21_________________________________________________________________ 22dense_1 (Dense) (None, 512) 3211776 23_________________________________________________________________ 24dense_2 (Dense) (None, 1) 513 25================================================================= 26Total params: 3,453,121 27Trainable params: 3,453,121 28Non-trainable params: 0 29_________________________________________________________________ 30result : [[0.01599144]] 31max_index : 0 32 33_________________________________________________________________ 34Layer (type) Output Shape Param # 35================================================================= 36conv2d_1 (Conv2D) (None, 148, 148, 32) 896 37_________________________________________________________________ 38max_pooling2d_1 (MaxPooling2 (None, 74, 74, 32) 0 39_________________________________________________________________ 40conv2d_2 (Conv2D) (None, 72, 72, 64) 18496 41_________________________________________________________________ 42max_pooling2d_2 (MaxPooling2 (None, 36, 36, 64) 0 43_________________________________________________________________ 44conv2d_3 (Conv2D) (None, 34, 34, 128) 73856 45_________________________________________________________________ 46max_pooling2d_3 (MaxPooling2 (None, 17, 17, 128) 0 47_________________________________________________________________ 48conv2d_4 (Conv2D) (None, 15, 15, 128) 147584 49_________________________________________________________________ 50max_pooling2d_4 (MaxPooling2 (None, 7, 7, 128) 0 51_________________________________________________________________ 52flatten_1 (Flatten) (None, 6272) 0 53_________________________________________________________________ 54dense_1 (Dense) (None, 512) 3211776 55_________________________________________________________________ 56dense_2 (Dense) (None, 1) 513 57================================================================= 58Total params: 3,453,121 59Trainable params: 3,453,121 60Non-trainable params: 0 61_________________________________________________________________ 62result : [[0.03004535]] 63max_index : 0 64 65(中略) 66
回答1件
あなたの回答
tips
プレビュー