Python 任何优化大投入的方法';keras中的内存使用情况?

Python 任何优化大投入的方法';keras中的内存使用情况?,python,memory,neural-network,out-of-memory,keras,Python,Memory,Neural Network,Out Of Memory,Keras,我试图使用2D CNN对中文文章进行文本分类,但在kerasConvolution2D方面遇到了一些问题。我知道处理图像的基本流程卷积2D,但仍然坚持使用keras的数据集。这是我的问题之一: 数据集 9800篇中文文章 否定冠词和非否定冠词[请注意它可能是肯定的或中立的],只是一个二元分类问题。我对卷积1d进行了测试,但结果不太好 使用标记器和word2vec转换为形状(98006810200) 最长的文章有6810个单词,最短的文章少于50个单词,需要将所有文章填充到6810,200是wor

我试图使用2D CNN对中文文章进行文本分类,但在keras
Convolution2D
方面遇到了一些问题。我知道处理图像的基本流程
卷积2D
,但仍然坚持使用keras的数据集。这是我的问题之一:

数据集
  • 9800篇中文文章

    否定冠词和非否定冠词[请注意它可能是肯定的或中立的],只是一个二元分类问题。我对卷积1d进行了测试,但结果不太好

  • 使用标记器和word2vec转换为形状
    (98006810200)

    最长的文章有6810个单词,最短的文章少于50个单词,需要将所有文章填充到6810,200是word2vec大小(似乎有些人称之为嵌入大小?)。格式如下:

     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]]
    
  • 文章最大字长6810是否太大? 我必须将9800个样本减少到6500个,以避免出现
    内存错误
    ,因为6500已经吃掉了我所有的32GB RAM。除了将所有文章的篇幅缩短之外,还有什么办法可以优化内存利用率呢?

    作者已经部分回答了这个问题。您可以使用将数据分块加载。生成器在一个单独的线程中运行,并生成您的小批量,可能会从您的存档中逐个加载它们,避免将所有内容一次加载到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())
    
    请注意,对于多输入(输出)模型,X(y)是numpy数组的列表。