首页 > 解决方案 > 如何禁用预训练自编码器潜在空间中的神经元?

问题描述

我有一个关于我的神经网络(更具体地说是自动编码器)的问题。

我创建了一个顺序神经网络来分析湍流的特性。

我想探索在潜在空间(出现最大压缩信息的层)中打开/关闭神经元的影响。即,我想采用一个 NN,在编码器中有 2 个隐藏层,在解码器中有 2 个隐藏层(每个隐藏层有 300 个神经元),在潜在空间中有 8 个神经元。我想在这个给定的架构上训练 NN 并保存我的权重和偏差。

之后,我希望能够使用不同数量的 n_mode(见下文)运行我的 NN,比如说 1 或 2。即我仍然想使用训练模型中前几层中的所有权重和偏差,但是例如,在这种情况下,我想禁用潜在空间 (latent_input) 中的 2 个神经元。我可以做吗?如果有意义的话,我不想在不同数量的潜在神经元上训练模型。当我在给定新数据集的情况下实际预测我的输出时,我只需要从模型中丢弃其中的几个。

这是我运行代码的方式。请注意,我已经训练了模型,并且仅使用 load_weights 命令加载了权重和偏差。

def tanh(x):
    return tf.nn.tanh(x)

# ------------------------
# Load or compile model
# ------------------------



n_modes = 4 # this is what I need to change
n_hidden = 300
n_hidden_2 = 300
X_train, X_test, y_train, y_test = train_test_split(training_features, training_features, test_size=split,
                                                    random_state=1)
# ------------------------
# MODEL
# ------------------------
## Encoder
input_img = ks.Input(shape=(X.shape[1], X.shape[2], X.shape[3]))
x1 = ks.Reshape([X.shape[1] * X.shape[2] * X.shape[3]])(input_img)
x2 = ks.Dense(n_hidden, use_bias=True, activation=tanh)(x1)
x3 = ks.Dense(n_hidden_2, use_bias=True, activation=tanh)(x2)
encoded = ks.Dense(n_modes, use_bias=True, activation=None)(x3)
## Decoder 
latent_inputs = ks.Input(shape=(n_modes))
y3 = ks.Dense(n_hidden_2, use_bias=True, activation=tanh)(latent_inputs)
y4 = ks.Dense(n_hidden, use_bias=True, activation=tanh)(y3)
y5 = ks.Dense(X.shape[1] * X.shape[2] * X.shape[3], use_bias=True, activation=None)(y4)
decoded = ks.Reshape([X.shape[1], X.shape[2], X.shape[3]])(y5)
ENC = tf.keras.models.Model(input_img, encoded)
DEC = tf.keras.models.Model(latent_inputs, decoded)
autoencoder = tf.keras.models.Model(input_img, DEC(ENC(input_img)))

lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
learning_rate,

decay_steps=2000,
decay_rate=0.2,
staircase=False)
opt = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
autoencoder.compile(optimizer=opt, loss='mse')
autoencoder.load_weights('axisymmetric/models/{}MODES_{}HIDDEN_{}HIDDEN_tanh_all_data'.format(n_modes,n_hidden,n_hidden_2))
#PREDICTIONS

P = autoencoder.predict(training_features, batch_size=None, verbose=0, steps=None, callbacks=None)

我感谢您的帮助!提前感谢大家:)

标签: kerasneural-networkautoencoder

解决方案


推荐阅读