【问题标题】:AutoEncoder feature layers is unstableAutoEncoder 特征层不稳定
【发布时间】:2021-03-23 20:10:00
【问题描述】:

我在这里复制了一个基于这个例子的线性自动编码器方法; https://towardsdatascience.com/build-the-right-autoencoder-tune-and-optimize-using-pca-principles-part-ii-24b9cca69bd6

基本上,它使用一层线性自动编码器与 PCA 进行比较。 X 是从维度为 5 的正态分布中随机生成的。代码的核心部分如下所示。

encoder = Dense(encoding_dim, activation="linear", input_shape=(input_dim,), use_bias = True) 
decoder = Dense(input_dim, activation="linear", use_bias = True)

autoencoder = Sequential()
autoencoder.add(encoder)
autoencoder.add(decoder)

autoencoder.compile(metrics=['accuracy'],
                    loss='mean_squared_error',
                    optimizer='sgd')
autoencoder.summary()

autoencoder.fit(X_train_scaled, X_train_scaled,
                epochs=nb_epoch,
                batch_size=batch_size,
                shuffle=True,
                verbose=0)

要素层是

w_encoder = autoencoder.layers[0].get_weights()[1]
w_decoder = autoencoder.layers[1].get_weights()[1]

每次我拟合模型时,w_encoder 的输出都显着不同

Encoder_weights
[[ 0.5596451  -0.7303996 ]
 [-0.08105161  0.43715334]
 [ 0.7571198   0.4995086 ]
 [-0.68543106  0.0496945 ]
 [-0.46657953  0.1231109 ]]
Decoder_weights
[[ 0.5596451  -0.7303996 ]
 [-0.08105161  0.43715334]
 [ 0.7571198   0.4995086 ]
 [-0.68543106  0.0496945 ]
 [-0.46657953  0.1231109 ]]

Encoder_weights
[[ 0.49870995 -0.594432  ]
 [-0.03552848  0.3591121 ]
 [ 0.6754906   0.42547104]
 [-0.5236658   0.02657888]
 [-0.36780515  0.07721919]]
Decoder_weights
[[ 0.49870995 -0.594432  ]
 [-0.03552848  0.3591121 ]
 [ 0.6754906   0.42547104]
 [-0.5236658   0.02657888]
 [-0.36780515  0.07721919]]

有什么方法可以让层度量在运行之间保持稳定?

【问题讨论】:

    标签: python machine-learning keras autoencoder


    【解决方案1】:

    发生这种情况的原因有很多。

    1. 你的网络的权重每次都是随机初始化的,所以每次运行都有可能得到不同的结果。

    2. 您的数据加载器本质上是随机的,并且随机抽取样本。

    如果您想要重现性,请尝试以下操作,

    使用种子。

    SEED = 1997
    os.environ['PYTHONHASHSEED']=str(SEED)
    random.seed(SEED)
    np.random.seed(SEED)
    tf.random.set_seed(SEED)
    

    如果在 Nvidia GPU 上运行,您还应该使用 tensorflow-determinism

    pip install tensorflow-determinism
    

    然后你像这样使用它:

    import tensorflow as tf
    import os
    os.environ['TF_DETERMINISTIC_OPS'] = '1'
    

    对于Tensorflow

    from tfdeterminism import patch
    patch()
    

    【讨论】:

    • 我已经尝试过使用 SEED,并且我还在每一层中添加了一个内核初始化程序。但是输出还是不一样
    猜你喜欢
    • 1970-01-01
    • 2013-01-19
    • 2022-07-20
    • 2020-10-10
    • 2017-12-04
    • 2020-03-15
    • 1970-01-01
    • 2013-12-21
    • 2012-12-20
    相关资源
    最近更新 更多