我正在尝试使用遗传算法训练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中进行调试,但至少在查看变量列表时,没有一个变得越来越大或者没有被删除的胭脂变量,一切看起来都是我期望的。任何想法为什么计算时间不断增加?
还有一点要注意,我已经对build_model()函数进行了类似的计算,并且在我的计算机上需要一个0.07秒的常量,所以我不认为这是问题的根源。
谢谢!