我正在尝试使用2D CNN对中文文章进行文本分类,并且遇到了一些问题Convolution2D
.我知道Convolution2D
应对图像的基本流程,但通过使用我的数据集与keras卡住了.这是我的一个问题:
9800中文文章.
负面文章和非负面文章[请注意它可能是正面的或中立的],只是一个二元分类问题.我对Convolution1D
NN 进行了测试,结果并不好.
使用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内存.有什么方法可以优化内存使用量,除了将所有文章修剪成更短的长度?
该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())