Python Tensorflow文本生成未返回有效索引
我正在尝试训练一个Tensorflow模型来生成文本。我使用的大部分代码来自Tensorflow网站,但当我尝试生成文本时,模型返回的索引不在word_索引中 文本生成功能: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
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_大小的原因。我刚刚添加了更多关于我的数据准备的信息。这可能会有所帮助。但回答你的问题是否定的,因为我正在填充句子由于数据大小不同,我怀疑这可能是问题的根源。