【问题标题】:ValueError when using vae.fit in Keras在 Keras 中使用 vae.fit 时出现 ValueError
【发布时间】:2020-12-21 21:12:28
【问题描述】:

我正在 mnist 数据集上创建一个 vae 模型,希望针对历元绘制损失函数。但是我遇到了一些问题,无法在线找到解决方案。在我的导入期间,我有以下导入(只是为代码提供一些上下文):

from keras import backend as K

from keras.layers import Input, Dense, Lambda, Layer, Add, Multiply
from keras.models import Model, Sequential
from keras.datasets import mnist

我还为我自己的损失计算创建了一个名为 bn 的函数,以及为最终模型损失添加 KL 散度层的 KLDivergenceLayer 类。

代码:

decoder = Sequential([
    Dense(intermediate_dim, input_dim=latent_dim, activation='relu'),
    Dense(original_dim, activation='sigmoid')
])

x = Input(shape=(original_dim,))
h = Dense(intermediate_dim, activation='relu')(x)

z_mu = Dense(latent_dim)(h)
z_log_var = Dense(latent_dim)(h)

z_mu, z_log_var = KLDivergenceLayer()([z_mu, z_log_var])
z_sigma = Lambda(lambda t: K.exp(.5*t))(z_log_var)

eps = Input(tensor=K.random_normal(stddev=epsilon_std,
                                   shape=(K.shape(x)[0], latent_dim)))
z_eps = Multiply()([z_sigma, eps])
z = Add()([z_mu, z_eps])

x_pred = decoder(z)

vae = Model(inputs=[x, eps], outputs=x_pred)
vae.compile(optimizer='rmsprop', loss=bn)

# train the VAE on MNIST digits
(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train = x_train.reshape(-1, original_dim) / 255.
x_test = x_test.reshape(-1, original_dim) / 255.

vae.fit(x_train, x_train,
        shuffle=True,
        epochs=epochs,
        batch_size=batch_size,
        validation_data=(x_test, x_test))

我回复的错误如下:

ValueError: Layer model expects 2 input(s), but it received 1 input tensors. Inputs received: [<tf.Tensor 'IteratorGetNext:0' shape=(100, 784) dtype=float32>]

【问题讨论】:

    标签: python tensorflow machine-learning keras deep-learning


    【解决方案1】:

    问题出在您的 eps 层。这不是模型输入

    你可以用一个像这样的简单层来代替它:

    eps = Lambda(lambda t: K.random_normal(stddev=1.0, shape=(K.shape(t)[0], latent_dim)))(z_log_var)
    

    在这里你可以找到正在运行的笔记本:

    https://colab.research.google.com/drive/1fLmfwCA_TOeOlXiiSabp4C4UKq73ofEN?usp=sharing

    【讨论】:

    • 非常感谢!您的解决方案成功了,干杯。
    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 2022-10-14
    • 2017-11-14
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多