Python Tensorflow文本生成未返回有效索引

Python Tensorflow文本生成未返回有效索引,python,machine-learning,artificial-intelligence,recurrent-neural-network,tensorflow2.0,Python,Machine Learning,Artificial Intelligence,Recurrent Neural Network,Tensorflow2.0,我正在尝试训练一个Tensorflow模型来生成文本。我使用的大部分代码来自Tensorflow网站,但当我尝试生成文本时,模型返回的索引不在word_索引中 文本生成功能: model = create_model(vocab_size = vocab_size, embed_dim=embed_dim, rnn_neurons=rnn_neurons, batch_size=1) model.load_weights(tf.train.latest_checkpoint(che

我正在尝试训练一个Tensorflow模型来生成文本。我使用的大部分代码来自Tensorflow网站,但当我尝试生成文本时,模型返回的索引不在word_索引中

文本生成功能:

model = create_model(vocab_size = vocab_size,
  embed_dim=embed_dim,
  rnn_neurons=rnn_neurons,
  batch_size=1)

model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))

model.build(tf.TensorShape([1, None]))

char_2_index = tokenizer.word_index
index_2_char = {ind:char for char, ind in char_2_index.items()}

def generate_text(model, start_string):

  num_generate = 1000

  input_eval = [char_2_index[s] for s in start_string]
  input_eval = tf.expand_dims(input_eval, 0)

  text_generated = []

  temperature = 1.0

  model.reset_states()
  for i in range(num_generate):
      print(text_generated)
      predictions = model(input_eval)

      predictions = tf.squeeze(predictions, 0)

      predictions = predictions / temperature
      print(predictions)
      predicted_id = tf.random.categorical(predictions, num_samples=1)[-1,0].numpy()
      print(predicted_id)

      input_eval = tf.expand_dims([predicted_id], 0)


      text_generated.append(index_2_char[predicted_id])

  return (start_string + ''.join(text_generated))
错误

KeyError                                  Traceback (most recent call last)
<ipython-input-52-9517558352c4> in <module>()
----> 1 print(generate_text(model, start_string=u"Is Baby yoda "))

<ipython-input-47-75973c66de6c> in generate_text(model, start_string)
     37 
     38 
---> 39       text_generated.append(index_2_char[predicted_id])
     40 
     41   return (start_string + ''.join(text_generated))

KeyError: 133
keyrerror回溯(最近一次调用)
在()
---->1次打印(生成文本(型号,开始字符串=u“是婴儿尤达”))
在生成\u文本(模型、开始\u字符串)中
37
38
--->39文本\u生成。追加(索引\u 2\u字符[predicted\u id])
40
41返回(开始字符串+''.join(生成文本))
关键字错误:133
单词索引和培训文本仅包含大写和小写字母

编辑 这是我的数据准备和结构

结构 [“句子”],[“句子2”]…]

数据准备

tokenizer=keras.preprocessing.text.tokenizer(num\u words=209,lower=False,char\u level=True,filters='\$%&()*+-@[\]^{124;}~\ t\n')
标记器.fit_on_文本(df['title'].值)
df['encoded_with_keras']=tokenizer.text_to_序列(df['title'].值)
dataset=df[“用_keras'编码的_]。值
dataset=tf.keras.preprocessing.sequence.pad_序列(dataset,padding='post')
dataset=dataset.flatte()
dataset=tf.data.dataset.from_tensor_切片(dataset)
序列=数据集。批处理(序列长度+1,删除余数=真)
def创建顺序目标(顺序):
输入_txt=seq[:-1]
target_txt=seq[1:]
返回输入文本,目标文本
数据集=序列.map(创建序列目标)
dataset=dataset.shuffle(缓冲区大小)。批处理(批处理大小,丢弃剩余值=True)

创建模型(…)
中使用的
声音大小似乎不等于
索引2字符的长度

如果我不在声音大小中添加1,则模型不会训练并抛出一个错误,如55 not in[0:55)。但是,假设vocab_大小是55。我得到了成百上千的索引。你在
index_2_char
中的索引是否从0开始?如果不是,那可能就是你无法设置正确的
vocab_大小的原因。我刚刚添加了更多关于我的数据准备的信息。这可能会有所帮助。但回答你的问题是否定的,因为我正在填充句子由于数据大小不同,我怀疑这可能是问题的根源。