我正在尝试使用2D CNN对中文文章进行文本分类,并且遇到了keras Convolution2D
的麻烦。我知道Convolution2D
处理图像的基本流程,但是使用我的数据集与keras一起使用。这是我的一个问题:
9800中文文章。
负面文章和非负面文章[请注意它可能是正面的或中立的],只是一个二元分类问题。我对Convolution1D
NN进行了测试,但结果并不好。
使用tokenizer和word2vec转换为形状(9800, 6810, 200)
。
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以避免MemoryError
,因为6500已经占用了我所有的32GB内存。有什么方法可以优化内存使用量,除了将所有文章修剪为更短的长度?
答案 0 :(得分:5)
Keras FAQ已经部分回答了这个问题。您可以使用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())