首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AutoEncoder要素图层不稳定

AutoEncoder要素图层不稳定
EN

Stack Overflow用户
提问于 2021-03-24 04:10:00
回答 1查看 27关注 0票数 0

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

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

代码语言:javascript
复制
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)

要素图层为

代码语言:javascript
复制
w_encoder = autoencoder.layers[0].get_weights()[1]
w_decoder = autoencoder.layers[1].get_weights()[1]

每次我拟合模型时,w_encoder的输出都有很大的不同

代码语言:javascript
复制
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 ]]

vs

代码语言:javascript
复制
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]]

有没有办法让层指标在两次运行之间保持稳定?

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 04:17:42

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

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

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

如果您想要重现,请尝试以下方法:

使用种子。

代码语言:javascript
复制
SEED = 1997
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.random.set_seed(SEED)

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

代码语言:javascript
复制
pip install tensorflow-determinism

你可以这样使用它:

代码语言:javascript
复制
import tensorflow as tf
import os
os.environ['TF_DETERMINISTIC_OPS'] = '1'

对于Tensorflow < 2.1,添加上述内容并如下所示:

代码语言:javascript
复制
from tfdeterminism import patch
patch()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66770588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档