Keras fit_generator-内存消耗过高?

时间:2019-02-19 02:04:20

标签: python tensorflow memory keras

我正在尝试对Keras模型的内存消耗进行数字计算,但这些数字不会累加。

我有一个3输入/ 3输出模型(我们称它们为6个不同的图像)。每个图像都有(1216, 540, 1)形状。另外,我正在使用单精度来减小其大小。我使用6个样本的小批量生产,在生成器中有max_queue_size=5。我大约有15万个可训练的参数(每个16个字节),所以无关紧要。

有了这个,我的内存消耗应该是:

queue_size x batch_size x (6, 1216, 540, 1) x sp bytes

那是

5 x 6 x 3939840 x 4 = 47278000 bytes = 0.44 GB

相反,我的内存峰值为20 GB,平均约为10-12 GB。 Keras本身是否使用Tensorflow后端(一种内存需求工具)? (例如它是否重复某些操作的数据?)我还缺少其他东西吗?下面是生成器的代码,因为误解可能出在代码本身。

def gen(df, batch_size=64, shuffle=False, seed=2019, n_batches=None):
    if n_batches is None:
        n_batches = np.ceil(df.shape[0] / batch_size)
        print(n_batches)

    if shuffle:
        np.random.seed(seed)
        df = df.sample(frac=1)

    it = 0  # Iterations counter
    while True:
        idx_start = batch_size * it
        idx_end = batch_size * (it + 1)
        xy = np.empty((6, batch_size, N, M, 1))

        for i,sample_files in enumerate(df.iloc[idx_start:idx_end].values):
            for field,f in enumerate(sample_files):
                p = io.read_data(f, shape=(N, M), ncomponents=1)
                p = p[..., np.newaxis]  # To transform from (N, M) to (N, M, 1)
                p = p.astype(np.float32, copy=False)
                xy[field,i] = p

        it += 1
        yield [xy[0],xy[1],xy[2]],[xy[3],xy[4],xy[5]]

        if it == n_batches:
            np.random.seed(seed + 1)
            df = df.sample(frac=1)
            it = 0

0 个答案:

没有答案