【问题标题】:Tensorflow autoencoder loss not convergingTensorflow 自动编码器损失不收敛
【发布时间】:2020-01-17 07:01:44
【问题描述】:

我正在浏览 keras 博客,发现了一个 simple autoencoderes。 它是使用 keras 编写的,并且按预期工作。

我对代码进行了一些更改以使用 tensorflow 2 keras 功能 API。 现在的问题是代码没有抛出任何错误,但它没有按预期工作(val loss 超过 0.6)。

我在代码中找不到任何错误。 这是修改后的代码:

from tensorflow.keras.layers import Dense, Input
from tensorflow import keras
from tensorflow.keras.datasets import mnist
import numpy as np

encoding_dim = 32


input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)

autoencoder = keras.Model(input_img, decoded)

encoder = keras.Model(input_img, encoded)

encoded_input = Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = keras.Model(encoded_input, decoder_layer(encoded_input))

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')


(x_train, _), (x_test, _) = mnist.load_data()

x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))
print(x_train.shape)
print(x_test.shape)

autoencoder.fit(x_train, x_train,
               epochs=50,
               batch_size=256,
               shuffle=True,
               validation_data=(x_test, x_test))

encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)


# use Matplotlib (don't ask)
import matplotlib.pyplot as plt

n = 10  # how many digits we will display
plt.figure(figsize=(20, 4))
for i in range(n):
    # display original
    ax = plt.subplot(2, n, i + 1)
    plt.imshow(x_test[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)

    # display reconstruction
    ax = plt.subplot(2, n, i + 1 + n)
    plt.imshow(decoded_imgs[i].reshape(28, 28))
    plt.gray()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.show()

【问题讨论】:

    标签: python tensorflow machine-learning keras computer-vision


    【解决方案1】:

    如果您将优化器更改为adam,则损失函数会收敛。还要检查这个问题:

    【讨论】:

    • 问题在于它只适用于 keras 而不适用于 tensorflow.keras
    • 你试过 tensorflow.keras 中的亚当优化器了吗?因为这就是我正在使用的
    • 是的,它提供了很好的输出,而 adadelta 和 keras 也是如此。我知道更改优化器可以工作,但问题是两个框架为相同的参数提供截然不同的输出
    • 虽然更改优化器有效,但不确定为什么相同的优化器在 keras 和 tf 中表现不同
    • 我也没有,有时间我会研究的!
    猜你喜欢
    • 2015-11-21
    • 2020-01-08
    • 1970-01-01
    • 2019-07-22
    • 2017-02-08
    • 2019-02-20
    • 1970-01-01
    • 2018-07-05
    • 2020-04-12
    相关资源
    最近更新 更多