pyGad 内存使用情况

问题描述 投票:0回答:1

我正在使用 pygad 作为神经网络,我想知道为什么它在每一代之后都使用 RAM?问题是我让它继续运行,然后当它开始使用越来越多的 RAM 时,RAM 使用量突然激增并导致崩溃。

这是我要重现的代码:

import pygad
import pygad.kerasga
import pandas as pd
import numpy as np

train = np.random.rand(1000000,50)
label = np.random.rand(1000000,1)

def fitness_func(ga_instance, solution, solution_idx):
  global train, dataset, model
    #for batch in dataset:
    #  train['pred'] = pygad.kerasga.predict(model=model, solution=solution, data=batch, verbose=1, batch_size=2**13)
  t0 = datetime.datetime.now()
  preds = pygad.kerasga.predict(model=model, solution=solution, data=train, verbose = 0, batch_size = 2**13)
  t1 = datetime.datetime.now()
  print(t1 - t0)
  scores = label[preds>0.7].mean() - label[preds<0.3].mean()
  score = scores.mean()
  return score

def on_generation(ga_instance):
  print(ga_instance.generations_completed, f"Fitness    = {ga_instance.best_solution()[1]}")

input_layer = tf.keras.layers.Input(shape = (train.shape[1]))
dense_layer1 = tf.keras.layers.Dense(units = train.shape[1], activation = tf.keras.layers.LeakyReLU(alpha=0.01))(input_layer)
output_layer = tf.keras.layers.Dense(units = 1)(dense_layer1)
model = tf.keras.Model(inputs=input_layer, outputs=output_layer)
keras_ga = pygad.kerasga.KerasGA(model=model, num_solutions=5)

ga_instance = pygad.GA(num_generations = 50, num_parents_mating = 2, initial_population=keras_ga.population_weights, fitness_func = fitness_func,\
                       on_generation=on_generation)

ga_instance.run()

即使数据集很小,RAM 也会稳步增加。有没有可以用来防止这种情况的设置?

python tensorflow keras pygad
1个回答
0
投票

您可以尝试在每次生成后通过调用

gc.collect()
来清理 RAM。

在使用 Python 垃圾回收之前,代码使用了我的 32GB RAM 的 17%。使用GC后,只使用了~6%。所以,值得一试。

© www.soinside.com 2019 - 2024. All rights reserved.