如何释放lstm中的内存

问题描述 投票:0回答:0
for i in range(0,len(dictStats)):
        pkb_ips = dictStats[i:i + 1].index.map(str)[0]

        model_path = file_url + model_url + '/model/' + pkb_ips + '.h5'
        sc_path = file_url + model_url + '/sc/' + pkb_ips + '.save'
        std_path = file_url + model_url + '/std/std.json'

        if os.path.exists(model_path) and os.path.exists(sc_path) and os.path.exists(std_path):
            regressor = load_model(model_path)
            sc = joblib.load(sc_path)
            with open(std_path , "r") as f:
                std_list = json.load(f)
        else:
            continue

        std = std_list[pkb_ips]
        NewDF = dictStats[i:i + 1]
        NewDF = NewDF.T
        testDF = NewDF
        test_mean = testDF.mean()
        testDF = testDF.rolling(5).mean().iloc[4:, :]
        testDF.fillna(value=test_mean, inplace=True)
        real_data = testDF.values

        real_data = np.concatenate((np.zeros((21 - len(real_data), 1)), real_data), axis=0)
        real_data[np.isnan(real_data)] = 0
        real_data = real_data[20:, :][0][0]
        timestep = 20
        inputs = testDF.iloc[0:20, :].values
        inputs = inputs.reshape(-1, 1)
        inputs = sc.transform(inputs)
        X_test = []
        for i in range(timestep, len(inputs)+1):
            X_test.append(inputs[i - timestep:i, 0])
        X_test = np.array(X_test)
        X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
        predicted_data = regressor.predict(X_test)
        predicted_data = sc.inverse_transform(predicted_data)[0][0]

        lower_limit_2std = predicted_data - 2 * std
        upper_limit_2std = predicted_data + 2 * std

        lower_limit_4std = predicted_data - 4 * std
        upper_limit_4std = predicted_data + 4 * std

        result = True if real_data > upper_limit_2std or predicted_data < lower_limit_2std else False
        del regressor
        del sc
        del predicted_data
        K.clear_session()
        tf.compat.v1.reset_default_graph()
        gc.collect()

我在程序中添加了很多释放内存的方法 但是“predicted_data = regressor.predict(X_test)”行中生成的内存无法释放 请问是什么原因或者有其他解决办法吗 这是跟踪内存的结果

   142    494.5 MiB      0.4 MiB          10           predicted_data = regressor.predict(X_test)
   143    494.5 MiB      0.0 MiB          10           predicted_data = sc.inverse_transform(predicted_data)[0][0]  # to get the original scale
   152    494.5 MiB      0.0 MiB          10           del regressor
   153    494.5 MiB      0.0 MiB          10           del sc
   154    494.5 MiB      0.0 MiB          10           del predicted_data
   155    494.4 MiB     -0.1 MiB          10           K.clear_session()  # 清除 Keras 會話
   156    494.4 MiB      0.0 MiB          10           tf.compat.v1.reset_default_graph()  # 重置 TensorFlow 預設圖
   157    494.4 MiB      0.0 MiB          10           gc.collect()

释放由 Predicted_data = regressor.predict(X_test) 行生成的原始内存

tensorflow keras memory lstm
© www.soinside.com 2019 - 2024. All rights reserved.