前提・実現したいこと
h5ファイルをtfliteに変換してandroid端末上で動かせるようにしたいです
※h5ファイルは、計4つのクラスそれぞれトレーニング画像約300枚、バリデーション用画像役100枚でfine-tuningを用いて作成しました。
作成時に使用したコードは以下のようになります。
Python
1import os 2from keras.applications.vgg16 import VGG16 3from keras.preprocessing.image import ImageDataGenerator 4from keras.models import Sequential, Model 5from keras.layers import Input, Activation, Dropout, Flatten, Dense 6from keras.preprocessing.image import ImageDataGenerator 7from keras import optimizers 8import numpy as np 9import time 10 11# 分類するクラス 12classes = ['arin', 'kanako', 'reni', 'shiori'] 13nb_classes = len(classes) 14 15img_width, img_height = 150, 150 16 17# トレーニング用とバリデーション用の画像格納先 18train_data_dir = '/dataset/train' 19validation_data_dir = 'dataset/validation' 20 21# 今回はトレーニング用に200枚、バリデーション用に50枚の画像を用意した。 22nb_train_samples = 1438 23nb_validatbion_samples = 389 24 25batch_size = 16 26nb_epoch = 10 27 28 29result_dir = 'results' 30if not os.path.exists(result_dir): 31 os.mkdir(result_dir) 32 33 34def vgg_model_maker(): 35 """ VGG16のモデルをFC層以外使用。FC層のみ作成して結合して用意する """ 36 37 # VGG16のロード。FC層は不要なので include_top=False 38 input_tensor = Input(shape=(img_width, img_height, 3)) 39 vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor) 40 41 # FC層の作成 42 top_model = Sequential() 43 top_model.add(Flatten(input_shape=vgg16.output_shape[1:])) 44 top_model.add(Dense(256, activation='relu')) 45 top_model.add(Dropout(0.5)) 46 top_model.add(Dense(nb_classes, activation='softmax')) 47 48 # VGG16とFC層を結合してモデルを作成 49 model = Model(input=vgg16.input, output=top_model(vgg16.output)) 50 51 return model 52 53 54def image_generator(): 55 """ ディレクトリ内の画像を読み込んでトレーニングデータとバリデーションデータの作成 """ 56 train_datagen = ImageDataGenerator( 57 rescale=1.0 / 255, 58 zoom_range=0.2, 59 horizontal_flip=True) 60 61 validation_datagen = ImageDataGenerator(rescale=1.0 / 255) 62 63 train_generator = train_datagen.flow_from_directory( 64 train_data_dir, 65 target_size=(img_width, img_height), 66 color_mode='rgb', 67 classes=classes, 68 class_mode='categorical', 69 batch_size=batch_size, 70 shuffle=True) 71 72 validation_generator = validation_datagen.flow_from_directory( 73 validation_data_dir, 74 target_size=(img_width, img_height), 75 color_mode='rgb', 76 classes=classes, 77 class_mode='categorical', 78 batch_size=batch_size, 79 shuffle=True) 80 81 return (train_generator, validation_generator) 82 83 84if __name__ == '__main__': 85 start = time.time() 86 87 # モデル作成 88 vgg_model = vgg_model_maker() 89 90 # 最後のconv層の直前までの層をfreeze 91 for layer in vgg_model.layers[:15]: 92 layer.trainable = False 93 94 # 多クラス分類を指定 95 vgg_model.compile(loss='categorical_crossentropy', 96 optimizer=optimizers.SGD(lr=1e-3, momentum=0.9), 97 metrics=['accuracy']) 98 99 # 画像のジェネレータ生成 100 train_generator, validation_generator = image_generator() 101 102 # Fine-tuning 103 history = vgg_model.fit_generator( 104 train_generator, 105 samples_per_epoch=nb_train_samples, 106 nb_epoch=nb_epoch, 107 validation_data=validation_generator, 108 nb_val_samples=nb_validation_samples) 109 110 vgg_model.save_weights(os.path.join(result_dir, 'finetuning.h5')) 111 112 process_time = (time.time() - start) / 60 113 print(u'学習終了。かかった時間は', process_time, u'分です。')
発生している問題・エラーメッセージ
tensorflowのホームページにあるコードをファイル名のみ変更して試したところ
ValueError: No model found in config file.
というエラーが出てしまいました。
該当のソースコード
Python
1new_model= tf.keras.models.load_model(filepath="finetuning.h5") 2tflite_converter = tf.lite.TFLiteConverter.from_keras_model(new_model) 3tflite_model = tflite_converter.convert() 4open("tf_lite_model.tflite", "wb").write(tflite_model)
補足情報(FW/ツールのバージョンなど)
python3
macbook
回答1件
あなたの回答
tips
プレビュー