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
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
,则可以解决问题。但这也令人困惑
到目前为止,我无法生成任何有意义的文本。我正在努力找出我错过了什么。我也描述了我目前的理解,因此,任何人都可以帮助我理解我的误解