Я столкнулся с этой проблемой после запуска примера VAE в документации , которую нельзя построить до подгонки данных.
По-видимому, это dr aws следующая ошибка: ValueError: Expected a symbolic Tensors or a callable for the loss value. Please wrap your loss computation in a zero argument `lambda`.
Вот простое MWE:
import tensorflow as tf
from tensorflow.keras import layers
class Test(tf.keras.Model):
def __init__(self, input_dim=784, name='test', **kwargs):
super(Test, self).__init__(name=name, **kwargs)
self.dense1 = layers.Dense(input_dim)
self.dense2 = layers.Dense(input_dim, activation='relu')
def call(self, inputs):
y1 = self.dense1(inputs)
y2 = self.dense2(inputs)
loss = tf.keras.backend.mean(y2)
self.add_loss(loss)
return y1
(x_train, _), _ = tf.keras.datasets.mnist.load_data()
x_train = x_train.reshape(60000, 784).astype('float32') / 255
train_dataset = tf.data.Dataset.from_tensor_slices(x_train)
train_dataset = train_dataset.shuffle(buffer_size=1024).batch(64)
test = Test()
test.compile(optimizer='adam', loss='mse')
# test.build(input_shape=(64,784)) # --> gives error if uncommented.
# test.summary() # --> gives error if uncommented.
test.fit(x_train, x_train, epochs=3, batch_size=64) # --> works well.
test.summary() # --> now it works fine.
Если я удалю self.add_loss
из модели, то модель сможет построить правильно.
Есть ли способ build
модели до fit
связать ее с пользовательской потерей self.add_loss()
? Спасибо!