Tensorflow:了解LSTM模型的层结构

时间:2018-08-14 13:06:48

标签: python tensorflow machine-learning lstm rnn

我是tensorflow和LSTM的新手,在理解网络的形状和结构(权重,偏差,输入和日志的形状)时遇到一些麻烦。

在这段特定的代码中,摘自here

def recurrent_neural_network(x):
    layer = {'weights':tf.Variable(tf.random_normal([rnn_size,n_classes])),
         'biases':tf.Variable(tf.random_normal([n_classes]))}

    x = tf.transpose(x, [1,0,2])
    x = tf.reshape(x, [-1, chunk_size])
    x = tf.split(x, n_chunks, 0)

    lstm_cell = rnn_cell.BasicLSTMCell(rnn_size,state_is_tuple=True)
    outputs, states = rnn.static_rnn(lstm_cell, x, dtype=tf.float32)

    output = tf.matmul(outputs[-1],layer['weights']) + layer['biases'])

    return output
  1. 有人可以解释为什么我们需要将x转换为这种特定格式(转置->重塑->拆分)

  2. 为什么将权重定义为[rnn_size,n_classes],将偏差定义为[n_classes]。

  3. 正在形成的网络的确切结构是什么,以及权重是如何连接的,我不太理解。

  4. 有没有我可以阅读的网站或参考资料对您有帮助?

谢谢。

1 个答案:

答案 0 :(得分:0)

对于一般的网络结构,LSTM是RNN网络的扩展。有关RNN网络结构的说明,请查看this classic blog post

对于实际的LSTM,try this post (which also has an RNN explanation)

这些不是很正式,但是它们应该比学术论文更容易阅读和理解。

一旦您阅读了这些内容,其余的内容就不会很难了。 X转换的原因是因为这是static_rnn期望的格式。 rnn_size是LSTM单元的大小,因此这就是为什么权重采用这种方式成形的原因。