Mit*_*ril 3 python memory out-of-memory neural-network keras
我正在尝试使用2D CNN对中文文章进行文本分类,并且遇到了一些问题Convolution2D.我知道Convolution2D应对图像的基本流程,但通过使用我的数据集与keras卡住了.这是我的一个问题:
9800中文文章.
负面文章和非负面文章[请注意它可能是正面的或中立的],只是一个二元分类问题.我对Convolution1DNN 进行了测试,结果并不好.
使用tokenizer和word2vec转换为形状(9800, 6810, 200).
最长的文章有6810个单词,最短文章少了50个字,需要填充所有文章到6810,200个是word2vec大小(似乎有人称之为embedding_size?).格式如:
 1     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
 2     [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
 ....
 9999  [[word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200], [word2vec size=200]]
Run Code Online (Sandbox Code Playgroud)这篇文章最大.字长6810太大了?我必须将9800个样本减少到6500以避免a MemoryError,因为6500已经吃掉了我所有的32GB内存.有什么方法可以优化内存使用量,除了将所有文章修剪成更短的长度?
该Keras常见问题已经部分地回答了这个问题.您可以使用以数据块的形式加载数据model.fit_generator().生成器在一个单独的线程中运行并生成您的迷你批次,可能会逐个从归档中加载它们,从而避免一次将所有内容加载到RAM中.
使用它的代码大致如下所示:
def train_generator():
    while True:
        chunk = read_next_chunk_of_data()
        x,y = extract_training_data_from_chunk(chunk)
        yield (x,y)
 model.fit_generator(generator=train_generator())
Run Code Online (Sandbox Code Playgroud)