lstm java实现_张量流中的RNN和LSTM实现

我一直在努力学习如何在张量流中编码RNN和LSTM . 我在这篇博客文章中找到了一个在线示例

下面是我无法理解LSTM网络最终用于生成代码的片段

x = tf.placeholder(tf.int32, [batch_size, num_steps], name='input_placeholder')

y = tf.placeholder(tf.int32, [batch_size, num_steps], name='labels_placeholder')

embeddings = tf.get_variable('embedding_matrix', [num_classes, state_size])

rnn_inputs = [tf.squeeze(i) for i in tf.split(1,

num_steps, tf.nn.embedding_lookup(embeddings, x))]

代码的不同部分现在定义权重

with tf.variable_scope('softmax'):

W = tf.get_variable('W', [state_size, num_classes])

b = tf.get_variable('b', [num_classes], initializer=tf.constant_initializer(0.0))

logits = [tf.matmul(rnn_output, W) + b for rnn_output in rnn_outputs]

y_as_list = [tf.squeeze(i, squeeze_dims=[1]) for i in tf.split(1, num_steps, y)]

x是要馈送的数据,y是标签集 . 在lstm方程中,我们有一系列门,x(t)乘以一系列,prev_hidden_state乘以一组权重,加上偏差并应用非线性 .

以下是我的疑虑

在这种情况下,只定义了一个权重矩阵,这意味着它同样适用于x(t)和prev_hidden_state .

对于嵌入矩阵,我知道它必须乘以权重矩阵但为什么是第一个维度num_classes

对于rnn_inputs,我们使用squeeze删除1的维度,但为什么我要在一个热编码中执行此操作 .

同样从分裂中我理解我们将维度x(batch_size X num_steps)展开为离散(batch_size X 1)向量,然后通过网络传递这些值是正确的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值