【问题标题】:Keras get_weights takes longer to compute each time when looping每次循环时,Keras get_weights 需要更长的时间来计算
【发布时间】: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 秒,所以我认为这不是问题的根源。

谢谢!

【问题讨论】:

    标签: python keras


    【解决方案1】:

    Keras 似乎在幕后存储会话信息,如果有人对此有更多信息,请提供更深入的答案,以防将来有人遇到像我这样的问题。在那之前,我发现只需添加

        keras.backend.clear_session()
    

    在每个循环之间解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-29
      相关资源
      最近更新 更多