如何使用TensorFlow LSTM教程进行字符级语言建模?

时间:2017-01-27 01:41:59

标签: python tensorflow lstm

我正在尝试从Andrej Karpathy的博客http://karpathy.github.io/2015/05/21/rnn-effectiveness/实施RNN字符级语言模型 使用TensorFlow RNN。对于初学者,我从TensorFlow的LSTM教程中获取了ptb_word_lm.py,并更改了阅读器功能,因此现在不再使用具有10000个不同单词的原始PTB数据集,而是对36个不同字符的流进行训练。 (嵌入的形状相应减少:36x36而不是10000x200)。训练/验证集是战争与和平的文本(350万小写字母)。

我期待一个简单的结转。 相反,在大约20次运行之后,RNN陷入在单词的开头和结尾处具有过多表示的T的状态,在5个左右的时间段之后,样本输出开始看起来像这样: 通过这种方式来解决这个问题,以及对于这种情况的认识,我们对这种情况进行了研究,但是我们看到了这样一种情况,因为我们看不到这种情况,因为这种情况已经发生了变化。 OiRhREAVEDTN T OORD

(这里大写字母代表更高的可能性)。在接下来的100多个时代版本中没有取得进一步的进展。对于列车组,困惑很快被冻结在4左右,对于验证集而言则为3.75。

确实,在典型文本中的所有字符对中," space-T"和" T-space"是最常见的,但RNN应该解决这些问题,对吧?我尝试了不同的参数(ADAM用于渐变,更长的步长,忘记偏差= 1.0等) - 没有任何变化。 我在绳子尽头。这里可能出现什么问题?

非常感谢!

1 个答案:

答案 0 :(得分:0)

你检查了初始化吗?如果渐变为零,学习可能会卡住。如果将权重(或偏差)初始化为零或一,则会发生这种情况。根据您的激活(非线性),有不同的初始化替代方案。全面的初始化将是正常的或截断的正常。

e.g。 tf.truncated_normal([size_in, size_out], stddev=0.1)

对于偏见,小常数也有效tf.constant(0.1, shape=[size_out])