Tensorflow中的LSTM与隐藏层训练

时间:2016-08-08 19:03:41

标签: machine-learning tensorflow lstm

我正在搞乱LSTM并且有一个概念性的问题。我根据以下规则创建了一个虚假数据矩阵:

对于矩阵中的每个1-D列表:

  • 如果前一个元素小于10,则下一个元素是前一个元素加1。
  • 否则,这个元素是罪(前一个元素)

这样,它是一个非常简单地基于先前信息的序列。我设置了一个LSTM来学习重现并运行它一次一个地在列表上训练。我有一个LSTM层,后面是一个完全连接的前馈层。它非常容易地学习+1步骤,但是对于sin步骤有困难。当前一个元素大于10时,它似乎会在下一个元素中选择一个介于-1和1之间的随机数。我的问题是:训练只是修改完全连接的Feed中的变量前进层?这就是为什么它不能学习非线性sin函数?

以下是相关代码段:

lstm = rnn_cell.LSTMCell(lstmSize)
y_ = tf.placeholder(tf.float32, [None, OS])

outputs, state = rnn.rnn(lstm, x, dtype=tf.float32)
outputs = tf.transpose(outputs, [1, 0, 2])
last = tf.gather(outputs, int(outputs.get_shape()[0]) - 1)

weights = tf.Variable(tf.truncated_normal([lstmSize, OS]))
bias = tf.Variable(tf.constant(0.1, shape=[OS]))

y = tf.nn.elu(tf.matmul(last, weights) + bias)
error = tf.reduce_mean(tf.square(tf.sub(y_, y)))
train_step = tf.train.AdamOptimizer(learning_rate=1e-3).minimize(error)

错误和形状组织似乎是正确的,至少在它确实快速学习+1步而不会崩溃的意义上。 LSTM难道不能处理非线性sin函数吗?这似乎很简单,所以我的猜测是我设置了一些错误,而LSTM并没有学到任何东西。

0 个答案:

没有答案