【发布时间】:2018-08-03 19:44:07
【问题描述】:
我正在尝试使用遗传算法训练 keras 模型,因此对于每一代,我都会生成 100 个随机模型,以将部分模型用作人口的突变。合并和变异时,我直接将权重作为 numpy 数组进行处理,但我注意到,使用 get_weights 函数时,每次运行它都需要更长的时间,即使我每次都从相同大小的模型中获取权重.我简化了代码以在下面显示此行为:
import time
import numpy as np
from keras.layers.core import Dense, Activation
from keras.models import Sequential
def build_model():
model = Sequential()
model.add(Dense(
input_dim=12,
output_dim=8))
model.add(Dense(
output_dim=4))
model.add(Activation("linear"))
model.compile(loss="mse", optimizer="rmsprop")
return model
while True:
model = build_model()
start_time = time.time()
mut1 = np.array(model.layers[0].get_weights())
mut2 = np.array(model.layers[1].get_weights())
print(time.time() - start_time)
del(mut1) ##
del(mut2) ## Added these to rule-out a memory issue
del(model) ##
在前 50 次左右的迭代后,行为变得清晰。我已经尝试在 pycharm 中进行调试,但至少查看变量列表,没有一个 rouge 变量不断变大或没有被删除,一切看起来都是我期望的。任何想法为什么计算时间不断增加?
还有一点需要注意,我已经对 build_model() 函数进行了类似的计时,并且它在我的计算机上需要一个恒定的 0.07 秒,所以我认为这不是问题的根源。
谢谢!
【问题讨论】: