私はLSTM RNNにKerasとTheanoバックエンドでダイビングしています。あなたのように、Keras LSTM(lstm_text_generation.py) - RAMメモリの問題
ここ# 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))
#np - means numpy
print('Vectorization...')
X = np.zeros((len(sentences), maxlen, len(chars)), dtype=np.bool)
y = np.zeros((len(sentences), len(chars)), dtype=np.bool)
for i, sentence in enumerate(sentences):
for t, char in enumerate(sentence):
X[i, t, char_indices[char]] = 1
y[i, char_indices[next_chars[i]]] = 1
:それは、入力データをベクトル化の道(テキスト文字):keras'レポwhole code of lstm_text_generation.py on githubからLSTM例を使用しようとしますが、私は私にはかなり明確ではない一つのことを持っていますそれらが030のリストを生成するのはNumpyであり、このようにしてシーケンスを符号化する入力文字によって定義される各リストの特定の位置に '1'を入れる。
問題は、なぜ彼らはそのアルゴリズムを使用したのですか?何とかそれを最適化することは可能ですか?巨大なリストのリストを使用せずに、入力データを他の方法でエンコードすることは可能でしょうか?問題は、入力データに厳しい制限があることです.10Mバイトを超えるテキストに対してこのようなベクトルを生成すると、PythonのMemoryErrorが発生します(これを処理するには数十GbsのRAMが必要です)。
ありがとうございました。
私たちはどのような次元の話をしていますか(あなたのデータセットには 'len(文)'と 'len(chars)あなたはどれくらいのRAMを持っていますか? –
私は6GbのRAMを持っていますが、私は32GbのRAMのvpsで実行しようとしました。ディメンション:520KBの入力テキストの場合は、_len(文章)= 174507_と_len(文字)= 74_です。すべてがOKです。しかし、17Mbの入力テキストの場合は_len(文)= 5853627_と_len(文字)= 74_であり、MemoryErrorは6GbのRAMをスローします。 –