首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tensorflow:低级LSTM实现

Tensorflow:低级LSTM实现
EN

Stack Overflow用户
提问于 2019-01-20 17:27:14
回答 1查看 945关注 0票数 5

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

EN

回答 1

Stack Overflow用户

发布于 2019-01-20 18:05:43

1)使用tf.scan

利用tf.scan函数可以实现递归神经网络的底层实现。例如,对于SimpleRNN,其实现将类似于:

代码语言:javascript
复制
# 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:

代码语言:javascript
复制
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,请参阅使用numpy实现RNN的this教程。

4) Keras中的自定义RNN单元

参见here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54275098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档