自作のデータセットを学習させて, 画像の分類に取り組んでいるものです.
今までで, データセットの学習, 重みデータの保存まで完了しています.
環境
Keras 2.4.4
python 3
##実装したいこと
今回以下のようなコードで
・保存した重みデータをよみこみ
・テストデータを分類する
以上のことを達成しようと思いましたが,
参考にしたコード
python
1import cv2 2from keras import models 3from keras.models import model_from_json 4from keras.preprocessing.image import array_to_img,img_to_array,load_img 5import numpy as np 6 7jpg_name = 'data_001.jpg' 8model_file_name= 'train' 9 10#学習済みモデルの読込 11model=models.load_model("/hogehoge/"+model_file_name+".h5") 12 13#画像の読込 14img_path = (jpg_name) 15img = img_to_array(load_img(img_path, target_size=(240,160))) 16#0-1に変換 17img_nad = img_to_array(img)/255 18#4次元配列に 19img_nad = img_nad[None, ...] 20 21#表示したいクラス名 22label=['A','B'] 23#判別 24pred = model.predict(img_nad, batch_size=1, verbose=0) 25#判別結果で最も高い数値を抜き出し 26score = np.max(pred) 27#判別結果の配列から最も高いところを抜きだし、そのクラス名をpred_labelへ 28pred_label = label[np.argmax(pred[0])] 29#表示 30print('name:',pred_label) 31print('score:',score)
以下のようなエラーが発生してしまいました.
python
1ValueError Traceback (most recent call last) 2<ipython-input-29-65d47ac51ba2> in <module>() 3 9 4 10 #学習済みモデルの読込 5---> 11 model=models.load_model("hogehoge/"+model_file_name+".h5") 6 12 7 13 #画像の読込 8 9~\Anaconda3\lib\site-packages\keras\engine\saving.py in load_model(filepath, custom_objects, compile) 10 417 f = h5dict(filepath, 'r') 11 418 try: 12--> 419 model = _deserialize_model(f, custom_objects, compile) 13 420 finally: 14 421 if opened_new_file: 15 16~\Anaconda3\lib\site-packages\keras\engine\saving.py in _deserialize_model(f, custom_objects, compile) 17 219 return obj 18 220 19--> 221 model_config = f['model_config'] 20 222 if model_config is None: 21 223 raise ValueError('No model found in config.') 22 23~\Anaconda3\lib\site-packages\keras\utils\io_utils.py in __getitem__(self, attr) 24 300 else: 25 301 if self.read_only: 26--> 302 raise ValueError('Cannot create group in read only mode.') 27 303 val = H5Dict(self.data.create_group(attr)) 28 304 return val 29 30ValueError: Cannot create group in read only mode.
重みデータの読み込みの際にエラーがなっているようです.
##調べてみたこと
原因究明のために, エラー文を検索すると, 以下のようなQ&Aがヒットしました.
https://stackoverflow.com/questions/53212672/read-only-mode-in-keras
またそこで, 重みデータの読み込みの際には,
You have to set and define the architecture of your model and then use model.load_weights('alexnet_weights.h5').
と書いてありました.
私の初学者ゆえのエラーかもしれませんが, 解決策などご存じの方はご教授願います.
20190918 追記 調べていく中で分かったこと
エラーの部分を調べていく中で判明したことを追記していきます.
回答の中で「load_weights()を使えばいいのでは・・・?」とあったため, 試行してみました.
model.load_weights(model_file_name+".h5") →NameError: name 'model' is not defined load_weights(model_file_name+".h5") →NameError: name 'load_weights' is not defined keras.load_weights(model_file_name+".h5") →AttributeError: module 'keras' has no attribute 'load_weights'
となり, どれもうまくいきません...
また, Kerasの公式ドキュメントに
モデルのインスタンス作成後,同じアーキテクチャのモデルへ,
予め保存しておいたweightパラメータをロードできます:model.load_weights('my_model_weights.h5')
とあるのですが・・・
モデルのインスタンス化って何・・・?
モデルのインスタンス化の方法がよくわかりません.
Kerasで層を追加しておくという意味なのでしょうか・・・
当方の扱っているデータは, タテ×ヨコ=240×160のRGBカラーの画像を使用しています.
改めてご存じの方はご教授お願いいたします.
回答1件
あなたの回答
tips
プレビュー