質問編集履歴

1 keras_cnn.h5の保存コードを追加いたしました。よろしくお願い致します。

hampty

hampty score 16

2018/12/25 18:40  投稿

kerasで学習させたh5モデルからmlmodelへの変換
kerasで学習させたh5モデルからmlmodelへの変換しようとするとエラーがでる
### 前提・実現したいこと
kerasで学習させたh5モデルからcoremltoolsを使ったmlmodelへの変換
### 発生している問題・エラーメッセージ
```
Traceback (most recent call last):
 File "converter.py", line 8, in <module>
   class_labels='labels.txt')
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/coremltools/converters/keras/_keras_converter.py", line 745, in convert
   custom_conversion_functions=custom_conversion_functions)
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/coremltools/converters/keras/_keras_converter.py", line 543, in convertToSpec
   custom_objects=custom_objects)
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/coremltools/converters/keras/_keras2_converter.py", line 182, in _convert
   model = _keras.models.load_model(model, custom_objects = custom_objects)
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/keras/models.py", line 233, in load_model
   model = model_from_config(model_config, custom_objects=custom_objects)
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/keras/models.py", line 307, in model_from_config
   return layer_module.deserialize(config, custom_objects=custom_objects)
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/keras/layers/__init__.py", line 54, in deserialize
   printable_module_name='layer')
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/keras/utils/generic_utils.py", line 139, in deserialize_keras_object
   list(custom_objects.items())))
 File "/anaconda3/envs/tf-200/lib/python3.6/site-packages/keras/models.py", line 1204, in from_config
   if 'class_name' not in config[0] or config[0]['class_name'] == 'Merge':
KeyError: 0
```
```python
path = './keras_cnn.h5'
import coremltools
coreml_model = coremltools.converters.keras.convert(
   path,
   input_names='image',
   image_input_names='image',
   class_labels='labels.txt')
coreml_model.save('predict.mlmodel')
```
 
```  
from keras.models import Sequential  
 
from keras.layers import Conv2D, MaxPooling2D  
from keras.layers import Activation, Dropout, Flatten, Dense  
from keras.utils import np_utils  
import keras  
import numpy as np  
 
 
classes = ["perfect", "normal", "bad"]  
num_classes = len(classes)  
image_size = 75  
 
 
def main():  
   X_train, X_test, y_train, y_test = np.load("./Judgment.npy")  
   X_train = X_train.astype("float") / 256  
   X_test = X_test.astype("float") / 256  
   y_train = np_utils.to_categorical(y_train, num_classes)  
   y_test = np_utils.to_categorical(y_test, num_classes)  
 
   model = model_train(X_train, y_train)  
   model_eval(model, X_test, y_test)  
 
 
def model_train(X, y):  
   model = Sequential()  
   model.add(Conv2D(32, (3, 3), padding='same', input_shape=X.shape[1:]))  
   model.add(Activation('relu'))  
   model.add(Conv2D(32, (3, 3)))  
   model.add(Activation('relu'))  
   model.add(MaxPooling2D(pool_size=(2, 2)))  
   model.add(Dropout(0.25))  
 
   model.add(Conv2D(64, (3, 3), padding='same'))  
   model.add(Activation('relu'))  
   model.add(Conv2D(64, (3, 3)))  
   model.add(Activation('relu'))  
   model.add(MaxPooling2D(pool_size=(2, 2)))  
   model.add(Dropout(0.25))  
 
   model.add(Flatten())  
   model.add(Dense(512))  
   model.add(Activation('relu'))  
   model.add(Dropout(0.5))  
   model.add(Dense(3))  
   model.add(Activation('softmax'))  
 
   opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)  
   model.compile(  
       loss='categorical_crossentropy', optimizer=opt, metrics=['accuracy'])  
   model.fit(X, y, batch_size=32, epochs=100)  
 
 
   model.save('./keras_cnn.h5')  
 
   return model  
 
 
def model_eval(model, X, y):  
   scores = model.evaluate(X, y, verbose=1)  
   print('Test Loss: ', scores[0])  
   print('Test Accuracy: ', scores[1])  
 
 
if __name__ == "__main__":  
   main()  
```  
 
 
 
### 試したこと
python2.7で同様の条件での実行
### 補足情報(FW/ツールのバージョンなど)
python 3.6
Keras 2.0.6
h5py  2.7.1
tensorflow 1.1.0
  • Python

    23575 questions

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

  • Keras

    1085 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る