keras - 如何禁用预训练自编码器潜在空间中的神经元?
问题描述
我有一个关于我的神经网络(更具体地说是自动编码器)的问题。
我创建了一个顺序神经网络来分析湍流的特性。
我想探索在潜在空间(出现最大压缩信息的层)中打开/关闭神经元的影响。即,我想采用一个 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)
我感谢您的帮助!提前感谢大家:)
解决方案
推荐阅读
- c - 我的 c 程序以多种不同的方式挂起,为什么会这样?
- html - 一旦应用程序被引导,在 IONIC 中增加 SVG 图像的大小
- python - 将字符串映射到 ASCII 表中具有位置的整数
- java - 在 Spring Boot 应用程序中使用 AOP 记录方法调用及其参数
- python - 如何从 Windows 中的任何目录使用 manim
- angular - brotli 压缩后部署 Angular 8 项目
- complex-event-processing - Esper / NEsper EPL 声明
- node.js - 用 nodejs 编写 .conf 文件
- google-calendar-api - Google Calendars API - 插入事件 - 通过电子邮件通知组织者
- apache-spark - Pyspark:向过滤器函数添加参数