表題の通り、kerasで書き出した.h5を.pbに変換したいがエラーが出て困っております。
エラー内容をteratail、stackOverflow、github等々で調べ
「読込専用になっているために起きるエラー」
なのはわかりました。
しかし、.h5のデータを書き出す際に.jsonと.yamlのファイルを作っておりません。
その為、過去に先人の方々がやられていた方法が使えない状況です。
自分なりにエラーコードの出ている部分を変更し、ずっとtry&errorを繰り返しましたが難しかったため、此方で御質問させていただきました。
何卒宜しくお願い致します。
<環境>
CPU 8350U
Windows10 Pro
Anaconda3
Python3.7.6
Keras==2.2.4
Tensorflow==1.14.0
absl
opencv==3.4.1.20
h5py
<参考URL>
https://github.com/ohisama/keras_to_tensorflow
https://www.dlology.com/blog/how-to-convert-trained-keras-model-to-tensorflow-and-make-prediction/
python
1print(__doc__) 2 3import sys 4 5from keras.models import load_model 6import tensorflow as tf 7import os 8import os.path as osp 9from keras import backend as K 10 11from tensorflow.python.framework import graph_util 12from tensorflow.python.framework import graph_io 13 14 15# Set parameters 16if len(sys.argv) != 2: 17 print("Usage: python keras_to_tensorflow.py [keras_model/keras_model.h5]") 18 #importOSで絶対パス確認済 19 sys.exit(1) 20keras_model_path = sys.argv[1] 21num_output = 1 22write_graph_def_ascii_flag = True 23prefix_output_node_names_of_final_network = 'output_node' 24keras_model_name = keras_model_path.split("/")[-1].split(".")[0] 25tensorflow_graph_name = keras_model_name + '.pb' 26 27# 出力ディレクトリの準備 28output_dir = './tensorflow_model/' 29if not os.path.isdir(output_dir): 30 os.mkdir(output_dir) 31 32 33# Load keras model and rename output 34K.set_learning_phase(0) 35keras_model = load_model('keras_model/keras_model.h5',compile=False) 36 37pred = [None]*num_output 38pred_node_names = [None]*num_output 39for i in range(num_output): 40 pred_node_names[i] = prefix_output_node_names_of_final_network+str(i) 41 pred[i] = tf.identity(keras_model.output[i], name=pred_node_names[i]) 42print('Output nodes names: ', pred_node_names) 43 44 45# [optional] write graph definition in ascii 46sess = K.get_session() 47if write_graph_def_ascii_flag: 48 f = tensorflow_graph_name + '.ascii' 49 tf.train.write_graph(sess.graph.as_graph_def(), output_dir, f, as_text=True) 50 print('Saved the graph definition: ', osp.join(output_dir, f)) 51 52 53# convert variables to constants and save 54constant_graph = graph_util.convert_variables_to_constants(sess, sess.graph.as_graph_def(), pred_node_names) 55graph_io.write_graph(constant_graph, output_dir, tensorflow_graph_name, as_text=False) 56 57print('Saved the TensorFlow graph: ', osp.join(output_dir, tensorflow_graph_name)) 58
上記コードを試すと出るエラー
Error
1raceback (most recent call last): 2 File "keras_to_tensorflow.py", line 47, in <module> 3 model = load_model('keras_model/keras_model.h5',compile=False) 4 File "C:\Users\user.conda\envs\z\lib\site-packages\keras\engine\saving.py", line 419, in load_model 5 model = _deserialize_model(f, custom_objects, compile) 6 File "C:\Users\user.conda\envs\z\lib\site-packages\keras\engine\saving.py", line 221, in _deserialize_model 7 model_config = f['model_config'] 8 File "C:\Users\user.conda\envs\z\lib\site-packages\keras\utils\io_utils.py", line 302, in __getitem__ 9 raise ValueError('Cannot create group in read only mode.') 10ValueError: Cannot create group in read only mode.
あなたの回答
tips
プレビュー