Sam*_*uel 5 python lstm tensorflow recurrent-neural-network
我正在寻找在 Tensorflow 中使用 LSTM 单元的 RNN 的低级实现。我已经实现了几个使用低级 API 的前馈网络。这对我理解人工神经网络的内部运作有很大帮助。我可以对 RNN 做同样的事情,还是建议使用 LSTM 单元的 Tensorflow 实现(tf.nn.rnn_cell.BasicLSTMCell)?我没有在 Tensorflow 中找到任何 RNN 的低级实现。我在哪里可以找到这么低级的实现?Tensorflow 是为此而设计的吗?我可以从哪里开始?我希望我的一些问题可以在这里得到解答
RNN 的低级实现可以通过tf.scan函数来实现。例如,对于 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, :]
Run Code Online (Sandbox Code Playgroud)
请参阅此处的完整示例。
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)
# ...
Run Code Online (Sandbox Code Playgroud)
请在此处查看带有签名 API 的完整示例。
如果您仍然需要更深入地实现 RNN,请参阅本教程,该教程使用 numpy 实现 RNN。
看这里。
| 归档时间: |
|
| 查看次数: |
907 次 |
| 最近记录: |