当前位置:  开发笔记 > 编程语言 > 正文

在keras中优化大输入内存使用的任何方法?

如何解决《在keras中优化大输入内存使用的任何方法?》经验,为你挑选了1个好方法。

我正在尝试使用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]]
    

这篇文章最大.字长6810太大了?我必须将9800个样本减少到6500以避免a MemoryError,因为6500已经吃掉了我所有的32GB内存.有什么方法可以优化内存使用量,除了将所有文章修剪成更短的长度?



1> nemo..:

该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())


请注意,对于多输入(输出)模型,X(y)是numpy数组的列表.
推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有