【问题标题】:How to code a sequence to sequence RNN in keras?如何在keras中编写序列以对RNN进行序列化?
【发布时间】:2017-06-15 11:53:14
【问题描述】:

我正在尝试编写一个序列以在 keras 中对 RNN 进行序列化。我使用我从网上理解的内容编写了这个程序。我首先将文本标记化,然后将文本转换为序列并填充以形成特征变量 X。目标变量 Y 是先将 x 向左移动然后填充。最后,我将特征和目标变量输入到 LSTM 模型中。

这是我为此目的在 keras 中编写的代码。

from keras.preprocessing.text import Tokenizer,base_filter
from keras.preprocessing.sequence import pad_sequences
from keras.models import Sequential
from keras.layers import Dense, Activation,Dropout,Embedding
from keras.layers import LSTM


def shift(seq, n):
    n = n % len(seq)
    return seq[n:] + seq[:n]

txt="abcdefghijklmn"*100

tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ")
tk.fit_on_texts(txt)
x = tk.texts_to_sequences(txt)
#shifing to left
y = shift(x,1)

#padding sequence
max_len = 100
max_features=len(tk.word_counts)
X = pad_sequences(x, maxlen=max_len)
Y = pad_sequences(y, maxlen=max_len)

#lstm model
model = Sequential()
model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2))
model.add(LSTM(128, dropout_W=0.2, dropout_U=0.2))
model.add(Dense(max_len))
model.add(Activation('softmax'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop')

model.fit(X, Y, batch_size=200, nb_epoch=10)

问题是它显示错误

Epoch 1/10
IndexError: index 14 is out of bounds for size 14
Apply node that caused the error: AdvancedSubtensor1(if{inplace}.0, Reshape{1}.0)
Toposort index: 80

【问题讨论】:

  • 你能给我们提供一个 max_features 值吗?
  • 它与 abcdefghijklmn 的长度相同,即 14
  • 我怀疑你真正的意思是多对多 LSTM。序列到序列意味着别的东西(用于机器翻译)。请参阅此处以获取与您类似的示例:github.com/sachinruk/deepschool.io/blob/master/…

标签: python neural-network keras recurrent-neural-network sequence-to-sequence


【解决方案1】:

问题出在:

model.add(Embedding(max_features, 128, input_length=max_len, dropout=0.2))

在嵌入documentation 中,您可能会看到提供给它的第一个参数应该设置为词汇量+ 1。这是因为应该始终有一个索引为0null 单词的位置。因此,您需要将此行更改为:

model.add(Embedding(max_features + 1, 128, input_length=max_len, dropout=0.2))

【讨论】:

  • 嘿,谢谢它的工作。我可以再问一个问题吗?从这个模型我应该如何预测新序列?
  • 在最新的 Keras 版本中,一些参数已被重命名:从 nb_wordsnum_words,和 nb_epochepochs
猜你喜欢
  • 1970-01-01
  • 2010-09-18
  • 2018-12-23
  • 2017-11-07
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
相关资源
最近更新 更多