我正在处理 keras 中的堆叠降噪自动编码器。因此,在使用随机工具生成噪声输入后,我注意到即使我使用检查指针来保存模型的权重,每次运行脚本时我都会得到不同的编码数据,而当我处理普通的 auotencoder 时,我没有这样的问题。
所以我认为问题来自生成的噪声输入数据。我怎样才能一劳永逸地修复此噪声数据输入的值。
以下是我生成噪声输入的方式:
mu, sigma = 2, 3
noise_noy = np.random.normal(mu, sigma, [7412,48])
noise_test = np.random.normal(mu, sigma, [3600,48])
noised_noyau_y = df_noyau_yes + noise_noy
noised_test_y = df_test_yes + noise_test
print(noised_noyau_y)
这是降噪自动编码器
checkpointer = ModelCheckpoint(filepath="modelyes.h5",
verbose=0,
save_best_only=True,
save_weights_only=True)
tensorboard = TensorBoard(log_dir='/tmp/autoencoder',
histogram_freq=0,
write_graph=True,
write_images=True)
input_enc = Input(shape=(input_size,))
hidden_1 = Dense(hidden_size1, activation='relu')(input_enc)
hidden_11 = Dense(hidden_size2, activation='relu')(hidden_1)
code = Dense(code_size, activation='relu')(hidden_11)
hidden_22 = Dense(hidden_size2, activation='relu')(code)
hidden_2 = Dense(hidden_size1, activation='relu')(hidden_22)
output_enc = Dense(input_size, activation='tanh')(hidden_2)
D_autoencoder_yes = Model(input_enc, output_enc)
D_autoencoder_yes.compile(optimizer='adam',
loss='mean_squared_error',
metrics=['accuracy'])
history_D_yes = D_autoencoder_yes.fit(df_noised_noy_norm_y, df_noyau_norm_y,
epochs=200,
batch_size=batch_size,
shuffle = True,
validation_data=(df_noised_test_norm_y, df_test_norm_y),
verbose=1,
callbacks=[checkpointer, tensorboard]).history
D_autoencoder_yes.save_weights("modelyes.h5")
D_autoencoder_yes.load_weights("modelyes.h5")
生成编码数据
encoder_yes = Model (inputs = input_enc,outputs = code)
encoded_input = Input(shape=(code_size, ))
encoded_data_yes = encoder_yes.predict(df_noised_noy_norm_y)
print("Encoded representations of samples belonging to class YES",encoded_data_yes)
所以你想每次都有相同的"随机"输入吗?
在生成随机数组之前,通过使用整数x
调用 np.random.seed(x)
来锁定随机生成器。请注意,x
可以是任何整数,只要每次都相同
np.random.seed(42)
noise_noy_1 = np.random.normal(mu, sigma, [7412,48])
np.random.seed(42)
noise_noy_2 = np.random.normal(mu, sigma, [7412,48])
if (noise_noy_1 == noise_noy_2).all():
print('Equal')