Python 基于LSTM的Tensorflow文本生成:生成输出文本的问题

Python 基于LSTM的Tensorflow文本生成:生成输出文本的问题,python,tensorflow,keras,deep-learning,lstm,Python,Tensorflow,Keras,Deep Learning,Lstm,我正在尝试使用Tensorflow制作一个基于LSTM的文本生成器。但我对合理产出的产生有些困惑。我试图简明扼要地描述整个情况 我的培训数据集:孟加拉语歌词(4000多首歌词) 通过接下来的两行,我准备了一个包含30000个样本的数据集 最小样本长度:25 最大样本长度:120 我将每个样本标记为字符,并准备了一个包含181个独特词汇的词汇词典 我准备了一个char\u id字典,对每个包含id 1到181的样本进行编码。每个样本都使用这些ID编码,0用于填充 以下是我的模型定义: mode

我正在尝试使用
Tensorflow
制作一个基于
LSTM
的文本生成器。但我对合理产出的产生有些困惑。我试图简明扼要地描述整个情况

我的培训数据集:孟加拉语歌词(4000多首歌词)

通过接下来的两行,我准备了一个包含30000个样本的数据集

  • 最小样本长度:25
  • 最大样本长度:120
我将每个样本标记为字符,并准备了一个包含181个独特词汇的词汇词典

我准备了一个char\u id字典,对每个包含id 1到181的样本进行编码。每个样本都使用这些ID编码,0用于填充

以下是我的模型定义:

model=Sequential([
嵌入(声音大小+1,64),
LSTM(512,返回序列=真),
LSTM(512,返回序列=真),
密集(声音大小,激活='softmax')
model.compile(optimizer=tf.keras.optimizers.Adam(),
损失=[tf.keras.loss.SparseCategoricalCrossentropy(from_logits=True)],
指标=['准确度']
)
])
现在,根据文档,我的嵌入输入维度是vocab_size+1。最后一层维度是vocab_size,因为我希望模型预测ID在1到181之间的角色

这是我的列车和目标样本:

train = [ 1  2  3  4  5  6  7  8  3  4  5  9 10  3 11 12 13  7  4 14  9  3 15 16
  5 17  8 18  5 19 20  4  3 21 18  6 14  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0]

target = [ 2  3  4  5  6  7  8  3  4  5  9 10  3 11 12 13  7  4 14  9  3 15 16  5
 17  8 18  5 19 20  4  3 21 18  6 14  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0
  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0]

您可以看到,我将目标索引向右移动了一个,以便让模型预测下一个角色

现在,为了生成预测输出,我使用
np.argmax()
,通过传递
model.prediction(tensor)
返回的数组。
np.argmax()。我做得对吗

我是否必须尝试
np.argmax(pred)+1
?因为我把vocab的ID设置为1到181。但预测的数组的索引从0到180

另一个问题是,在第一个历元中的几个步骤之后,验证丢失变为
nan
,并且仍然是
nan
。设置剪辑值并不能解决问题。我已经看到,如果将最后一层维度设置为
vocab_size+1
,则可以解决问题。但这也令人困惑

到目前为止,我无法生成任何有意义的文本。我正在努力找出我错过了什么。我也描述了我目前的理解,因此,任何人都可以帮助我理解我的误解