質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python

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

Q&A

解決済

1回答

1704閲覧

h5ファイルをtfliteファイルに変換できない

TakaKan

総合スコア10

Python

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

0グッド

0クリップ

投稿2020/02/11 10:37

編集2020/02/11 12:35

前提・実現したいこと

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

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

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

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

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

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

fiveHundred

2020/02/11 11:23

h5ファイルをどこで入手したかorどのように学習したかを記載したほうがいいかもしれません。
TakaKan

2020/02/11 12:17 編集

ありがとうございます! 学習に関して書き足しました。よろしくお願いいたします。
fiveHundred

2020/02/11 12:28

いや、どのようなコードでモデルを保存したのかを書いてほしいのですが… (学習不足でこのようなエラーは出るはずが無いので)
TakaKan

2020/02/11 12:35

すみません... 修正し直しました よろしくお願いします。
guest

回答1

0

ベストアンサー

Python

1 vgg_model.save_weights(os.path.join(result_dir, 'finetuning.h5'))

上記のvgg_model.save_weights()は名前にある通り、重みしか保存されません。
vgg_model.save()で保存するか、モデルを構築して~.load_weights()で読み込んでください。
詳細はこちらを参考にしてください。

投稿2020/02/11 12:46

fiveHundred

総合スコア9805

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

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

TakaKan

2020/02/11 12:58

そうなのですね 一度vgg_model.save()を使ってやってみます。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問