python中keras和tensorflow.keras之间的意外性能差异

四极

我正在基于网上找到的一个简单的自动编码器示例,在python中建立模型。该示例是为喀拉拉邦编写的。在建议的过渡到tensorflow.keras的过程中,我修改了程序的导入,希望不需要进行其他更改。

随着喀拉拉邦进口

from keras.layers import Input, Dense
from keras.models import Model
from keras.datasets import mnist

自动编码器工作正常,您可以看到它在std输出中收敛,并且恢复的图像有意义。当我使用张量流输入

from tensorflow.python.keras.layers import Input, Dense
from tensorflow.python.keras.models import Model
from tensorflow.python.keras.datasets import mnist

结果不再收敛,恢复的图像看起来像是噪声。

下面是我的问题的最小工作示例。只需在上述两个导入之间进行更改即可重现行为上的差异。

import numpy as np
import matplotlib.pyplot as plt


def prepModel(inputShape, outputShape, numNeurons):
    input_image = Input(shape=(inputShape,))

    #encoded representation of input
    encoded = Dense(numNeurons, activation='relu')(input_image)
    #decoded lossy reconstruction
    decoded = Dense(outputShape, activation='sigmoid')(encoded)

    #model to encoded data
    autoencoder = Model(input_image, decoded)

    encoder = Model(input_image, encoded)
    encoded_input = Input(shape=(numNeurons,)) #placeholder
    decoder_layer = autoencoder.layers[-1] #last layer of model
    decoder = Model(encoded_input, decoder_layer(encoded_input)) #decoder model

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

    return autoencoder, encoder, decoder


def prepData():
    #import / set data
    (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:])))

    return x_train, x_test


def runModel(autoencoder, encoder, decoder, x_train, x_test):
    #train encoder
    autoencoder.fit(x_train, x_train,
                    epochs=50,
                    batch_size=256,
                    shuffle=True,
                    validation_data=(x_test, x_test))

    encoded_images = encoder.predict(x_test)
    decoded_images = decoder.predict(encoded_images)

    return encoded_images, decoded_images


def plotComparison(x_test, decoded_images):
    #Plot original image
    n = 10
    plt.figure(figsize=(20,4))
    for i in range(n):
        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)
     #plot decompressed image
        ax = plt.subplot(2, n, i+1+n)
        plt.imshow(decoded_images[i].reshape(28,28))
        plt.gray()
        ax.get_xaxis().set_visible(False)
        ax.get_yaxis().set_visible(False)
    plt.show()


x_train, x_test = prepData()
autoencoder, encoder, decoder = prepModel(784, 784, 16)
encoded_images, decoded_images = runModel(autoencoder, encoder, decoder, x_train, x_test)
plotComparison(x_test, decoded_images)

我正在运行python 3.8.3,keras版本2.3.1和tensorflow版本2.2.0。我愚弄了重新缩放输入数据和其他幼稚技巧的举动,但无济于事。我已经在另外两台计算机上验证了该行为。有什么可以解释为什么两组进口产品之间的性能如此不同?

马苏德·马勒基(Masoud Maleki)

看来是因为optimizer='adadelta'如上所述这里

keras版本中Adadelta优化器的默认学习率为1.0,而tensorflow.keras中的默认学习率为0.001。

因此,要解决此问题,请尝试使用optimizer = tensorflow.keras.optimizers.Adadelta(lr = 1.0)而不是optimizer='adadelta'或者,您也可以使用其他优化器,例如“ adam”。

附加说明:另外如此处所述,请尝试使用tensorflow.keras.*代替tensorflow.python.keras.*

不支持从tensorflow.python或任何其他模块(包括import tensorflow_core)导入,并且可能会突然中断。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数组和哈希之间的意外访问性能差异

来自分类Dev

?? 之间的性能差异 和 ==

来自分类Dev

R的Keras与Python的Keras之间的差异-准确性错误?

来自分类Dev

TensorFlow和Keras中的度量系统行为

来自分类Dev

loc和ix之间的意外差异

来自分类Dev

使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

来自分类Dev

管道和流程替代之间的性能差异

来自分类Dev

Linux和Windows之间的numpy性能差异

来自分类Dev

阵列,堆栈和队列之间的性能差异

来自分类Dev

Firefox和Chrome之间的webgl性能差异

来自分类Dev

管道和流程替代之间的性能差异

来自分类Dev

drawBitmap和createScaledBitmap之间的性能差异

来自分类Dev

并行和嵌套IF条件之间的性能差异

来自分类Dev

如何使用 Keras 和 Tensorflow 在 Python 中的 LSTM 网络中获得多个输出?

来自分类Dev

无法从 Python 中的 Tensorflow 库导入 Keras

来自分类Dev

Perl中while(每个)和foreach之间的性能差异

来自分类Dev

Android中query()和rawQuery()方法之间的性能差异

来自分类Dev

JavaScript中的“ let”和“ var”之间是否存在性能差异

来自分类Dev

tf.keras.backend和tensorflow库中的冗余

来自分类Dev

keras/tensorflow 中的 mean 和 stddev 是什么意思

来自分类Dev

TensorFlow中的feature_column.embedding_column和keras.layers.Embedding之间的区别

来自分类Dev

您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

来自分类Dev

C#和Javascript之间的性能和内存差异?

来自分类Dev

Tensorflow和Keras预测阈值

来自分类Dev

等效Java和Kotlin Stream代码之间的意外类型差异

来自分类Dev

Java 8 lambda和匿名内部类之间的性能差异

来自分类Dev

Numpy和Pandas之间有性能差异吗?

来自分类Dev

std :: count和std :: find之间的性能差异

来自分类Dev

Array和ArrayList之间的性能或内存消耗差异

Related 相关文章

  1. 1

    数组和哈希之间的意外访问性能差异

  2. 2

    ?? 之间的性能差异 和 ==

  3. 3

    R的Keras与Python的Keras之间的差异-准确性错误?

  4. 4

    TensorFlow和Keras中的度量系统行为

  5. 5

    loc和ix之间的意外差异

  6. 6

    使用CPU的“ Keras后端+ Tensorflow”和“来自Tensorflow的Keras”之间有什么区别(在Tensorflow 2.x中)

  7. 7

    管道和流程替代之间的性能差异

  8. 8

    Linux和Windows之间的numpy性能差异

  9. 9

    阵列,堆栈和队列之间的性能差异

  10. 10

    Firefox和Chrome之间的webgl性能差异

  11. 11

    管道和流程替代之间的性能差异

  12. 12

    drawBitmap和createScaledBitmap之间的性能差异

  13. 13

    并行和嵌套IF条件之间的性能差异

  14. 14

    如何使用 Keras 和 Tensorflow 在 Python 中的 LSTM 网络中获得多个输出?

  15. 15

    无法从 Python 中的 Tensorflow 库导入 Keras

  16. 16

    Perl中while(每个)和foreach之间的性能差异

  17. 17

    Android中query()和rawQuery()方法之间的性能差异

  18. 18

    JavaScript中的“ let”和“ var”之间是否存在性能差异

  19. 19

    tf.keras.backend和tensorflow库中的冗余

  20. 20

    keras/tensorflow 中的 mean 和 stddev 是什么意思

  21. 21

    TensorFlow中的feature_column.embedding_column和keras.layers.Embedding之间的区别

  22. 22

    您能解释keras模型中的tensorflow加载和hdf5加载之间的区别吗

  23. 23

    C#和Javascript之间的性能和内存差异?

  24. 24

    Tensorflow和Keras预测阈值

  25. 25

    等效Java和Kotlin Stream代码之间的意外类型差异

  26. 26

    Java 8 lambda和匿名内部类之间的性能差异

  27. 27

    Numpy和Pandas之间有性能差异吗?

  28. 28

    std :: count和std :: find之间的性能差异

  29. 29

    Array和ArrayList之间的性能或内存消耗差异

热门标签

归档