🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

8429閲覧

Kerasで重みデータ使用する際にValueError: Cannot create group in read only mode.のエラーが出てしまう.

daisuke_factex

総合スコア42

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/09 06:41

編集2019/09/18 02:11

自作のデータセットを学習させて, 画像の分類に取り組んでいるものです.

今までで, データセットの学習, 重みデータの保存まで完了しています.

環境

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カラーの画像を使用しています.

こんな感じ

改めてご存じの方はご教授お願いいたします.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2019/09/09 10:19

保存したときのコードはどんなコードですか?(保存部分のみで結構です)
daisuke_factex

2019/09/09 12:41

コメントありがとうございます。 まずhdf5ファイルで保存しました。 しかしエラーが出てしまったため、h5ファイルでも保存して再度試してみました。
meg_

2019/09/09 20:57

「model.save_weights()」ですか?
daisuke_factex

2019/09/10 02:39

はい, model.save_weights("/~~~~/train.hdf5")といった形で保存しました.
meg_

2019/09/10 09:15

重みの読み込みは「model.load_weights()」ではないでしょうか?
guest

回答1

0

自己解決

重み保存したファイルを読み込みしないとしけなかった・・・

皆様からいろんなご意見いただき, さらにweb上を調べていると,
自分のコードにそもそも重みモデルの読込み部がないということに気づきました.

そこで, 読み込みの前に以下のコードを追加すると, エラーなしで処理が完了しました.

Keras

1 2import numpy as np 3import cv2 4from keras.models import model_from_json 5from keras.preprocessing.image import load_img, img_to_array 6 7MODEL_ARC_PATH = "読み込みたいパスを入力" 8 9# JSONファイルからモデルのアーキテクチャを得る 10model_arc_str = open(MODEL_ARC_PATH).read() 11model = model_from_json(model_arc_str) 12 13# モデル構成の確認 14model.summary() 15

ファイルがあるだけでは, 勝手に動いてくれないので,
まずは読み込みするという命令をしないとダメなのですね・・・勉強になりました!

投稿2019/09/25 05:23

daisuke_factex

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問