python – Tensorflow:低级LSTM实现

我正在寻找在Tensorflow中使用LSTM单元的RNN的低级实现.我已经实现了几个使用低级API的前馈网络.这有助于我理解人工神经网络的内部运作.我是否可以对RNN执行相同的操作,或者是否建议使用LSTM单元的Tensorflow实现(tf.nn.rnn_cell.BasicLSTMCell)?我没有在Tensorflow中发现任何RNN的低级实现.我在哪里可以找到这样的低级实现? Tensorflow是否专门为此而设计?我从哪里开始?
我希望我的一些问题可以在这里得到解答

解决方法:

1)使用tf.scan

使用tf.scan功能可以实现RNN的低级实现.例如,对于SimpleRNN,实现类似于:

# our RNN variables
Wx = tf.get_variable(name='Wx', shape=[embedding_size, rnn_size])
Wh = tf.get_variable(name='Wh', shape=[rnn_size, rnn_size])
bias_rnn = tf.get_variable(name='brnn', initializer=tf.zeros([rnn_size]))


# single step in RNN
# simpleRNN formula is `tanh(WX+WH)`
def rnn_step(prev_hidden_state, x):
    return tf.tanh(tf.matmul(x, Wx) + tf.matmul(prev_hidden_state, Wh) + bias_rnn)

# our unroll function
# notice that our inputs should be transpose
hidden_states = tf.scan(fn=rnn_step,
                        elems=tf.transpose(embed, perm=[1, 0, 2]),
                        initializer=tf.zeros([batch_size, rnn_size]))

# covert to prevIoUs shape
outputs = tf.transpose(hidden_states, perm=[1, 0, 2])

# extract last hidden
last_rnn_output = outputs[:, -1, :]

请参阅完整示例here.

2)使用AutoGraph

tf.scan是一个for循环,你可以实现它Auto-graph API:

from tensorflow.python import autograph as ag

@ag.convert()
def f(x):
# ...
for ch in chars:
      cell_output, (state, output) = cell.call(ch, (state, output))
      hidden_outputs.append(cell_output)
hidden_outputs = autograph.stack(hidden_outputs)
# ...

请参阅autograph API here的完整示例.

3)在Numpy中实现

如果你仍然需要更深入地实现RNN,请参阅this教程,该教程实现了numpy的RNN.

4)Keras中的自定义RNN小区

here.

相关文章

MNIST数据集可以说是深度学习的入门,但是使用模型预测单张M...
1、新建tensorflow环境(1)打开anacondaprompt,输入命令行...
这篇文章主要介绍“张量tensor是什么”,在日常操作中,相信...
tensorflow中model.fit()用法model.fit()方法用于执行训练过...
https://blog.csdn.net/To_be_little/article/details/12443...
根据身高推测体重const$=require('jquery');const...