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

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

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

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

Q&A

1回答

767閲覧

variational autoencoderのencoder modelを保存してもう一度読み込むとエラーが出る

hyo-medsoh

総合スコア1

Keras

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

0グッド

0クリップ

投稿2023/03/31 12:05

VAEのエンコーダーを保存して読み込むとエラーが出ます。
SystemError: Exception encountered when calling layer "lambda" (type Lambda).

unknown opcode

Call arguments received:
• inputs=['tf.Tensor(shape=(None, 32), dtype=float32)', 'tf.Tensor(shape=(None, 32), dtype=float32)']
• mask=None
• training=False

試したコード
import tensorflow.keras as keras
import tensorflow.keras.backend as K
from tensorflow.keras.layers import Input, Flatten, Dense, Lambda
from tensorflow.keras.layers import Dropout, Conv2D

latent_dim = 32

def sampling(args):
mean, logvar = args
eps = K.random_normal([K.shape(mean)[0], latent_dim])
return mean + K.exp(logvar/2) * eps

enc_input = Input(shape=(512,512,1))
x = Conv2D(128, 3, padding='same', activation='relu')(enc_input)
x = Dropout(0.3)(x)
x = Conv2D(64, 3, padding='same', strides=2, activation='relu')(x)
x = Dropout(0.3)(x)
x = Conv2D(32, 3, padding='same', activation='relu')(x)
x = Conv2D(16, 3, padding='same', activation='relu')(x)
enc_shape = K.int_shape(x)
x = Flatten()(x)
x = Dense(16)(x)
z_mean = Dense(latent_dim, name='Z-mean')(x)
z_logvar = Dense(latent_dim, name='Z-logvariance')(x)
z = Lambda(sampling, output_shape=(latent_dim,))([z_mean, z_logvar])
encoder = keras.Model(enc_input, z)
encoder.summary()

save the model

encoder.save("modelmodel.h5")

load the model

rebuild = keras.models.load_model("modelmodel.h5")

どこがおかしいのでしょうか?
kerasのバージョンも変えてみましたが、同じでした。
一度コンパイルしてからモデルを保存してみましたが同じでした。
tensorflow 2.8.4, keras 2.8.0

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

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

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

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

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

guest

回答1

0

.h5形式を使わないでください.

Kerasモデルの保存と読み込み - 制限事項より

カスタムレイヤーなどのカスタムオブジェクトの計算グラフは、保存されたファイルに含まれません。読み込む際に、Keras はモデルを再構築するためにこれらのオブジェクトの Python クラス/関数にアクセスする必要があります。詳細については、「カスタムオブジェクト」をご覧ください。

この操作は面倒なので.h5の拡張子を削除してSavedModel形式で保存してください.

投稿2023/03/31 12:21

PondVillege

総合スコア1579

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

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

hyo-medsoh

2023/04/01 07:55

こういうことでしょうか? encoder.save("modeldir") rebuild=tf.keras.models.load_model("modeldir")とすると やはりエラーが返ってきます。 SystemError: Exception encountered when calling layer "lambda" (type Lambda). unknown opcode Call arguments received by layer "lambda" (type Lambda): • inputs=['tf.Tensor(shape=(None, 32), dtype=float32)', 'tf.Tensor(shape=(None, 32), dtype=float32)'] • mask=None • training=None
PondVillege

2023/04/13 01:41

ちなみに,.h5のままでも再現しませんでした. 再現可能な環境を提示ください.
hyo-medsoh

2023/04/14 14:15

windows10 python3.9 tensorflow 2.8.4, keras 2.8.0です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問