前提・実現したいこと
pythonでkerasを使いCNNで矢印が上下左右どの方向を向いているのかを判別するプログラムを作っています
学習が完了したモデルを保存し、別のコードで読み込み、画像の判定をさせたいと考えています
発生している問題・エラーメッセージ
学習結果がうまく反映されません
出力で
print(model.predict_classes(ya_1)) #[1]
print(model.predict(ya_1)) #[[0. 1. 0. 0.]]
と、学習させたモデルとは思えない結果が出ます。
(ya_1は画像データ)
該当のソースコード
python
1# 学習データ 2from tensorflow import keras 3import cv2 4import numpy as np 5 6batch_size = 200 7num_class = 4 8epochs = 10 9 10# set X 11file_name = [] 12 13for im in range(0,13073): 14 file_temp = "./ya_resize/re_ya_" + str(im) + ".bmp" 15 file_name.append(file_temp) 16 17cnt = -1 18img = [] 19for i in file_name: 20 21 cnt += 1 22 img_t = cv2.imread(i) 23 img_t = img_t / 255.0 24 25 img_t = img_t.tolist() 26 img.append(img_t) 27 28print(img[0]) 29 30img = np.array(img) 31for i in range(0,13073): 32 img[i] = np.array(img[i]) 33img = np.array(img) 34 35img = img.reshape(13073,45,45,3) 36 37print(img) 38 39print(img[i].shape) 40 41# set y 42 43y = [] 44f = open("label") 45label = f.read() 46f.close() 47 48for i in label: 49 label_temp = i.rstrip() 50 if not label_temp == "": 51 label_temp = int(label_temp) 52 y.append(label_temp) 53 54y = np.array(y) 55 56x_train = img[:13030] 57y_train = y[:13030] 58x_test = img[13031:] 59y_test = y[13031:] 60 61print(x_train.shape,x_test.shape) 62 63model = keras.models.Sequential([ 64 65 keras.layers.Conv2D(64,kernel_size=(5,5), 66 activation="relu", 67 input_shape=(45,45,3)), 68 keras.layers.Conv2D(32,(5,5),activation="relu"), 69 keras.layers.MaxPooling2D(pool_size=(2,2)), 70 keras.layers.Dropout(0.25), 71 keras.layers.Flatten(), 72 keras.layers.Dense(16,activation="relu"), 73 keras.layers.Dropout(0.5), 74 keras.layers.Dense(num_class,activation="softmax") 75 76]) 77 78model.compile(optimizer="RMSprop", loss="sparse_categorical_crossentropy", metrics=["accuracy"]) 79model.fit(x_train, y_train, epochs=epochs) 80 81a = model.evaluate(x_test,y_test) 82b = model.predict(x_test) 83print(a) 84print(b) 85print(model.summary()) 86print(model.predict_classes(x_test)) 87 88open("and.json","w").write(model.to_json()) 89model.save("ya_model.hdf5",save_format="h5")
python
1# 学習済みモデルを使って判別 2from tensorflow import keras 3import cv2 4import numpy as np 5import h5py 6 7kernel = np.ones((3,3), dtype=np.uint8) 8 9 10img = cv2.imread("./ya_cut/re_ya_1.bmp") 11 12ya_1 = img.reshape(1,45,45,3) 13 14h5file = h5py.File("ya_model.hdf5", 'r') 15 16model = keras.models.load_model(h5file) 17 18print(model.summary()) 19 20print(model.predict_classes(ya_1)) # [1] と出力 21print(model.predict(ya_1)) # [[0. 1. 0. 0.]] と出力 22
試したこと
テストデータを使って試しても[1]と出力
PC再起動
補足情報(FW/ツールのバージョンなど)
実行環境:pycharm
tensorflow 2.1.0
keras 2.3.1
ここで詰まっている方がいないみたいで有効な情報は見つけられませんでした。
どのように解決したらよろしいでしょうか。よろしくおねがいいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/03/31 12:09