使用 Keras 卷积网络的内存问题
Memory Issues Using Keras Convolutional Network
我对使用大数据的 ML 还很陌生,之前我曾使用过 dog/cat 分类的 Keras 通用卷积示例,但是当对我的图像集应用类似的方法时,我 运行 内存问题。
我的数据集包含非常长的图像,大小为 10048 x1687 像素。为了避免内存问题,我使用的批量大小为 1,一次将一张图像输入模型。
该模型有两个卷积层,每个卷积层后跟最大池化层,它们一起使扁平层在全连接层之前大约有 290,000 个输入。
然而,在 运行ning 之后,内存使用量立即达到极限 (8Gb)。
所以我的问题如下:
1) 在 Python 本地(不使用云)处理这种规模计算的最佳方法是什么?我需要使用额外的 python 库吗?
查看 yield
在 python 中的作用以及生成器的概念。您不需要在开始时加载所有数据。您应该使 batch_size
足够小,以免出现内存错误。
您的生成器可能如下所示:
def generator(fileobj, labels, memory_one_pic=1024, batch_size):
start = 0
end = start + batch_size
while True:
X_batch = fileobj.read(memory_one_pic*batch_size)
y_batch = labels[start:end]
start += batch_size
end += batch_size
if not X_batch:
break
if start >= amount_of_datasets:
start = 0
end = batch_size
yield (X_batch, y_batch)
...稍后当您已经准备好架构时...
train_generator = generator(open('traindata.csv','rb'), labels, batch_size)
train_steps = amount_of_datasets//batch_size + 1
model.fit_generator(generator=train_generator,
steps_per_epoch=train_steps,
epochs=epochs)
您还应该阅读有关 batch_normalization
的内容,这基本上有助于更快、更准确地学习。
在使用train_generator()
的同时,还应设置max_q_size
参数。它默认设置为 10,这意味着您分 10 批加载,而只使用 1 批(因为 train_generator()
旨在从可以像网络一样延迟的外部源流式传输数据,而不是为了节省内存)。我建议根据您的目的设置 max_q_size=1
。
我对使用大数据的 ML 还很陌生,之前我曾使用过 dog/cat 分类的 Keras 通用卷积示例,但是当对我的图像集应用类似的方法时,我 运行 内存问题。
我的数据集包含非常长的图像,大小为 10048 x1687 像素。为了避免内存问题,我使用的批量大小为 1,一次将一张图像输入模型。
该模型有两个卷积层,每个卷积层后跟最大池化层,它们一起使扁平层在全连接层之前大约有 290,000 个输入。
然而,在 运行ning 之后,内存使用量立即达到极限 (8Gb)。
所以我的问题如下:
1) 在 Python 本地(不使用云)处理这种规模计算的最佳方法是什么?我需要使用额外的 python 库吗?
查看 yield
在 python 中的作用以及生成器的概念。您不需要在开始时加载所有数据。您应该使 batch_size
足够小,以免出现内存错误。
您的生成器可能如下所示:
def generator(fileobj, labels, memory_one_pic=1024, batch_size):
start = 0
end = start + batch_size
while True:
X_batch = fileobj.read(memory_one_pic*batch_size)
y_batch = labels[start:end]
start += batch_size
end += batch_size
if not X_batch:
break
if start >= amount_of_datasets:
start = 0
end = batch_size
yield (X_batch, y_batch)
...稍后当您已经准备好架构时...
train_generator = generator(open('traindata.csv','rb'), labels, batch_size)
train_steps = amount_of_datasets//batch_size + 1
model.fit_generator(generator=train_generator,
steps_per_epoch=train_steps,
epochs=epochs)
您还应该阅读有关 batch_normalization
的内容,这基本上有助于更快、更准确地学习。
在使用train_generator()
的同时,还应设置max_q_size
参数。它默认设置为 10,这意味着您分 10 批加载,而只使用 1 批(因为 train_generator()
旨在从可以像网络一样延迟的外部源流式传输数据,而不是为了节省内存)。我建议根据您的目的设置 max_q_size=1
。