调用Keras www.example.com()后的内存泄漏model.fit

eqoofvh9  于 2023-05-23  发布在  其他
关注(0)|答案(1)|浏览(263)

我写了一个名为Material的自定义Keras层,并尝试在我的模型中使用它:

import tensorflow as tf
from tensorflow import keras
import numpy as np

class Material(keras.layers.Layer):
    def __init__(self):
        super().__init__()
        self.table = tf.Variable(
            initial_value=np.ones(shape=(6, 8, 8), dtype="float32"),
            trainable=True,
        )
        self.k = tf.Variable(initial_value=8., trainable=True, dtype='float32')
    
    def call(self, inp):
        material_white = tf.reduce_sum(inp[..., 0] * self.table, axis=(-1, -2, -3))
        material_black = tf.reduce_sum(inp[..., 1] * self.table, axis=(-1, -2, -3))
        material_white = tf.maximum(material_white, .01)
        material_black = tf.maximum(material_black, .01)
        return tf.math.log(material_white / material_black) * self.k

def get_model() -> keras.Model:
    inp = keras.Input((6, 8, 8, 2),)
    material = Material()
    out = keras.activations.sigmoid(material(inp))
    return keras.Model(inputs=inp, outputs=out)

model = get_model()
model.compile(optimizer=keras.optimizers.Adam(learning_rate=.01), loss='mean_squared_error')

board_tables = np.random.sample((100000, 6, 8, 8, 2),)
outcome = np.random.sample((100000,),)

while 1:
    model.fit(board_tables, outcome, batch_size=200, epochs=2)

由于某种原因,在每次fit迭代(我指的是函数调用,而不是每次epoch)之后,它会使用越来越多的RAM。在大约5GB时,内存使用量的增长放缓,但仍在继续。这个问题在CPU和GPU上都存在。有人能解释一下这是怎么回事吗?我的自定义图层有问题吗?
感谢您的任何建议。

ddhy6vgd

ddhy6vgd1#

如果只是增加epochs的数量而不是将model.fit放入while循环中,是否会发生同样的情况?没有吗
由于您在无限循环(while 1)中重复训练模型,因此内存使用量会随着时间的推移而增加。
尝试在每次model.fit迭代后清除会话:

keras.backend.clear_session()

相关问题