我写了一个名为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上都存在。有人能解释一下这是怎么回事吗?我的自定义图层有问题吗?
感谢您的任何建议。
1条答案
按热度按时间ddhy6vgd1#
如果只是增加
epochs
的数量而不是将model.fit
放入while循环中,是否会发生同样的情况?没有吗由于您在无限循环(
while 1
)中重复训练模型,因此内存使用量会随着时间的推移而增加。尝试在每次
model.fit
迭代后清除会话: