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

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

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

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

Python

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

Q&A

0回答

1896閲覧

[Keras] VAEモデルを学習するとき、”you should implement a `call` method"のメッセージが出ます

kotai2001

総合スコア16

Keras

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

Python

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

0グッド

0クリップ

投稿2020/08/06 09:24

編集2020/08/06 09:30

Kerasを用いて変分オートエンコーダ(Variable AutoEncoder: VAE)を作りたいと思います。Kerasのブログの内容を参考に、自分の画像データで学習したく、データの供給部分をImageDataGeneratorの部分を変更しました。

参考元のVAEコード

しかし、コード実行の時、最後行である学習の部分(fit)で、”you should implement a call method"というエラーが発生しています。

何が原因でエラーが発生しているか教えて頂ければと思います。

Python

1import tensorflow as tf 2from tensorflow import keras 3from tensorflow.keras import layers 4 5# Creating a sampling layer 6class Sampling(layers.Layer): 7 '''Uses (z_mean, z_log_var) to sample z''' 8 9 def call(self, inputs): 10 z_mean, z_log_var = inputs 11 batch = tf.shape(z_mean)[0] #tensorのshapeを返す 12 dim = tf.shape(z_mean)[1] 13 epsilon = tf.keras.backend.random_normal(shape=(batch, dim)) 14 return z_mean + tf.exp(0.5 * z_log_var) * epsilon 15 16 17 18# Encoder Network 19 20latent_dim = 2 21 22encoder_iputs = keras.Input(shape=(28,28,1)) 23 24x = layers.Conv2D(32,3, activation='relu', strides=2, padding='same')(encoder_iputs) 25x = layers.Conv2D(64,3, activation='relu', strides=2, padding='same')(x) 26x = layers.Flatten()(x) 27x = layers.Dense(16, activation='relu')(x) 28 29z_mean = layers.Dense(latent_dim, name='z_mean')(x) 30z_log_var = layers.Dense(latent_dim, name='z_log_var')(x) 31 32z = Sampling()([z_mean, z_log_var]) 33encoder = keras.Model(encoder_iputs, [z_mean, z_log_var, z], name = 'encoder') 34encoder.summary() 35 36 37# Decoder Network 38 39latent_inputs = keras.Input(shape=(latent_dim,)) 40x = layers.Dense(7*7*64, activation='relu')(latent_inputs) 41x = layers.Reshape((7,7,64))(x) 42x = layers.Conv2DTranspose(64, 3, activation='relu', strides=2, padding='same')(x) 43x = layers.Conv2DTranspose(32, 3, activation='relu', strides=2, padding='same')(x) 44decoder_outputs = layers.Conv2DTranspose(1,3,activation='sigmoid', padding='same')(x) 45decoder = keras.Model(latent_inputs, decoder_outputs, name='decoder') 46decoder.summary() 47 48#Define the VAE as a Model with a custom train_step 49 50class VAE(keras.Model): 51 def __init__(self, encoder, decoder, **kwargs): 52 super(VAE, self).__init__(**kwargs) 53 self.encoder = encoder 54 self.decoder = decoder 55 56 def train_step(self,data): 57 if isinstance(data, tuple): 58 data = data[0] 59 with tf.GradientTape() as tape: 60 z_mean, z_log_var, z = encoder(data) 61 reconstruction = decoder(z) 62 reconstruction_loss = tf.reduce_mean( 63 keras.losses.binary_crossentropy(data, reconstruction) 64 ) 65 reconstruction_loss *= 28* 28 66 kl_loss = 1 + z_log_var - tf.square(z_mean)-tf.exp(z_log_var) 67 kl_loss = tf.reduce_mean(kl_loss) 68 kl_loss *= -0.5 69 total_loss = reconstruction_loss + kl_loss 70 71 grads = tape.gradient(total_loss, self.trainable_weights) 72 self.optimizer.apply_gradients(zip(grads, self.trainable_weights)) 73 return{ 74 "loss": total_loss, 75 "reconstruction_loss": reconstruction_loss, 76 "kl_loss": kl_loss, 77 } 78 79 80#Generator 81from tensorflow.keras.preprocessing.image import ImageDataGenerator 82 83base_dir = 'C:\DATA\DOGS' # Surface 84BATCH_SIZE = 256; EPOCHS = 200 85train_datagen = ImageDataGenerator(rescale=1./255) 86train_batches = train_datagen.flow_from_directory(base_dir, 87 target_size=(28,28), shuffle=True, class_mode='input', batch_size=BATCH_SIZE,color_mode="grayscale") 88 89data_batch, labels_batch = next(train_batches) 90 91print('data batch shape', data_batch.shape) 92 93#Train 94 95vae = VAE(encoder, decoder) 96vae.compile(optimizer=keras.optimizers.Adam()) 97vae.fit(x=train_batches, steps_per_epoch = train_batches.samples // BATCH_SIZE, epochs=EPOCHS,verbose=1 ) 98

エラーコード

Traceback (most recent call last): File "C:/Users/se/84.VAE_again/01.CAE-VAE-Test-Generato-Q&Ar.py", line 102, in <module> vae.fit(x=train_batches, steps_per_epoch = train_batches.samples // BATCH_SIZE, epochs=EPOCHS,verbose=1 ) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\training.py", line 66, in _method_wrapper return method(self, *args, **kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\training.py", line 815, in fit model=self) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 1112, in __init__ model=model) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 908, in __init__ **kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 781, in __init__ lambda x: model(x, training=False), args=(concrete_x,)) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\distribute\distribute_lib.py", line 951, in run return self._extended.call_for_each_replica(fn, args=args, kwargs=kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\distribute\distribute_lib.py", line 2290, in call_for_each_replica return self._call_for_each_replica(fn, args, kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\distribute\distribute_lib.py", line 2649, in _call_for_each_replica return fn(*args, **kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\autograph\impl\api.py", line 282, in wrapper return func(*args, **kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\data_adapter.py", line 781, in <lambda> lambda x: model(x, training=False), args=(concrete_x,)) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\base_layer.py", line 968, in __call__ outputs = self.call(cast_inputs, *args, **kwargs) File "C:\Users\se\Anaconda3\envs\kaneko-pip-exe-test\lib\site-packages\tensorflow\python\keras\engine\network.py", line 714, in call raise NotImplementedError('When subclassing the `Model` class, you should' NotImplementedError: When subclassing the `Model` class, you should implement a `call` method.

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問