我正在重用有关使用keras训练文本生成模型的脚本。我的尝试是看看模仿说唱歌词能达到多近的水平。
第一次制作歌词文件的大小约为0.5 mb,带有大约10万行文本,并且在我的PC上运行正常。
后来,我从kaggle的多个说唱艺术家那里找到了一个数据集,并用新内容填充了我的txt文件,并且我相信大约3亿行代码使大小跃升至307 mb。
尝试在PC上运行它总是会耗尽所有可用的RAM,所以我决定在Google Cloud上的云上运行它,然后我选择了120 GB VM和相同数量的CPU。
这是直到崩溃的代码
from __future__ import print_function
from keras.callbacks import LambdaCallback
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.layers import LSTM
from keras.optimizers import RMSprop
from keras.utils.data_utils import get_file
import numpy as np
import random
import sys
import io
path = 'lyrics.txt'
with io.open(path, encoding='utf-8') as f:
text = f.read().lower()
print('corpus length:', len(text))
chars = sorted(list(set(text)))
print('total chars:', len(chars))
char_indices = dict((c, i) for i, c in enumerate(chars))
indices_char = dict((i, c) for i, c in enumerate(chars))
# cut the text in semi-redundant sequences of maxlen characters
maxlen = 40
step = 3
sentences = []
next_chars = []
for i in range(0, len(text) - maxlen, step):
sentences.append(text[i: i + maxlen])
next_chars.append(text[i + maxlen])
print('nb sequences:', len(sentences))
print('Vectorization...')
x = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
模型开始加载,但因该错误而崩溃
muiruri_samuel@instance-1:~/rap-generator$ python char_lstm_new.py
Using TensorFlow backend.
corpus length: 306514394
total chars: 359
nb sequences: 102171418
Vectorization...
Traceback (most recent call last):
File "char_lstm_new.py", line 44, in <module>
x = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
MemoryError
我一直在用htop观察RAM的使用情况,它崩溃的位置在20-60 GB之间波动,并且总是在耗尽可用RAM之前崩溃。
鉴于数据集确实需要大量RAM,是否有方法可以修复此错误和/或优化代码。