首页 文章

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

提问于
浏览
1

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

我期待一个简单的结转 . 相反,在大约20次运行之后,RNN在单词的开头和结尾处卡在一个具有过多表示的T的状态中,在5个左右的历元运行之后,样本输出开始看起来像这样:对于那样的东西来说,这是一个很好的例子 . aN TEpoUNCENG对TNE S snS srrSONAL TYTT的重要性进行了解决方案,但是我们看到了这样的情况,因为我们看不到这种情况,因此我们看到了这种情况的可能性 .

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

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

非常感谢!

1 回答

  • 0

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

    例如 tf.truncated_normal([size_in, size_out], stddev=0.1)

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

相关问题