我想用Keras(TF作为后端)评估一个简单的自动编码器,在隐藏层中尝试不同数量的神经元。
因此,我有以下简单的循环,在其中尝试从10到200的不同值:
import gc
for latent_size in range(10, 210, 10):
print(latent_size)
model = build_ae(latent_size, x_train)
latent_test = model.predict(x_test)
# This is to free the GPU memory
del model
gc.collect()
其中build_ae是用于创建自动编码器的以下函数:
def build_ae(encoding_size, x):
# Clear the Tensorflow session
K.clear_session()
input_data = Input(shape=(x.shape[-1],))
encoded = Dense(encoding_size, activation='relu')(input_data)
decoded = Dense(x.shape[-1], activation='relu')(encoded)
autoencoder = Model(input_data, decoded)
simple_ae_encoder = Model(input_data, encoded)
encoded_input = Input(shape=(encoding_size,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input))
# Training
OPTIMIZER = optimizers.Adagrad(lr=0.01, epsilon=None, decay=0.0)
autoencoder.compile(optimizer=OPTIMIZER, loss='mean_squared_error')
history = autoencoder.fit(x, x, epochs=2, batch_size=100, shuffle=True, verbose=1)
# Free the memory
del history
return simple_ae_encoder
不幸的是,在第3次迭代之后(即,encoding_size = 30),在模型训练之后,我收到了分段错误(核心被丢弃)。
我不知道如何解决这个问题。欢迎任何建议。
谢谢。
编辑:我不同意将这个问题标记为重复的决定。这是与Keras和Python有关的问题,因此建议不要使用gdb调试代码。
顺便说一句,可能我想出了解决问题的方法,该问题迫使垃圾回收器释放内存,而Tensorflow清除内存。我根据解决方案编辑了代码段。