我已经看到许多有关此特定错误的问题。我相信我的问题与众不同,足以保证自己的职位。
我的目标:我正在构建一个生成新闻头条的RNN。它将根据前面的单词来预测下一个单词。这段代码来自example,我正在尝试对其进行调整以适合我的情况。我正在尝试将数组切成X
和y
。
问题:
我知道出现此错误是因为该数组好像是一个2d数组一样被索引了,但实际上是一个1d数组。在将sequences
转换为数组之前,它是一个列表列表,但并非所有嵌套列表的长度都相同,因此numPy会将其转换为1d数组。
我的问题:是否有简单或简洁的方式填充sequences
,以便所有列表的长度都相同?我可以使用空格在较短的标题中保持相同的含义吗?为什么我需要将列表列表全部更改为数组?如我之前所说,这是一个示例,我试图了解他们的工作及其原因。
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Pretreat Data Section
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
# integer encode sequences of words
# create the tokenizer
t = Tokenizer()
# fit the tokenizer on the headlines
t.fit_on_texts(headlines)
sequences = t.texts_to_sequences(headlines)
# vocabulary size
vocab_size = len(t.word_index) + 1
#separate into input and output
sequences = np.array(sequences)
X, y = sequences[:,:-1], sequences[:,-1] # fix this
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-87-eb7aab0c3a22> in <module>
18 #separate into input and output
19 sequences = np.array(sequences)
---> 20 X, y = sequences[:,:-1], sequences[:,-1] # fix this
21 y = to_categorical(y, num_classes=vocab_size)
22 seq_length = X.shape[1]
IndexError: too many indices for array
答案 0 :(得分:1)
问题在于,本教程在一页上没有几个部分,每个部分都有自己的"Complete Example"
第一个"Complete Example"
从republic_clean.txt
中读取文本,清除文本并将其保存在republic_sequences.txt
中-它创建的单词数相同。
第二"Complete Example"
从republic_sequences.txt
中读取文本并将其与
sequences = np.array(sequences)
X, y = sequences[:,:-1], sequences[:,-1]
因为第一部分用相同数量的单词创建了序列,所以此代码正常工作。
您似乎跳过了第一部分。您必须回到第一部分,以学习如何清除文本以及如何创建可以在第二部分中使用的正确文件。
编辑:如果您无法使用相同数量的单词来制作序列,则可以在较短的序列中添加空格。代码可以工作,但是我不知道它是否可以创建更好的模型。
sequences = [['a'], ['b','c'], ['d','e','f']]
max_len = max(map(len, sequences))
sequences = [x + [""]*(max_len-len(x)) for x in sequences]
print(sequences)
结果
[['a', '', ''], ['b', 'c', ''], ['d', 'e', 'f']]