用图解释RNN程序的部分过程

LSTM的隐藏层的单元个数为hidden_size,因此,LSTM每一步的输出数据的维度为(batch_size,hidden_size)。有因为LSTM展开的时间步数为num_steps,于是通过

outputs.append(cell_output)

将每一时刻的输出都收集起来,这样,最后的outputs是一个list。
整个过程为:

image
图中黄色的部分表示同一个序列在LSTM不同时刻的输出。
紧接着对outputs进行拼接和reshape,其过程如下图:
image
将每一时刻的输出在第1维上拼接(上图),这样每一行就完整的表示了一个序列。reshape后的结构如下图:
image
其中每一种颜色表示一个序列,同一种颜色中的各个块表示这个序列的不同时刻。

以上就是LSTM的输出,并对其适当变形。接下来通过一个全连接层,将每一时刻的输出映射成字典大小。这部分就是常见的y=wx+b的构造形式,通过以下代码实现:

softmax_w = tf.get_variable( "softmax_w", [hidden_size, output_size], dtype=tf.float32)   # hidden_size就是cell中的隐藏单元
softmax_b = tf.get_variable("softmax_b", [output_size], dtype=tf.float32)
 # 网络的最后输出(相当于最后添加了一个全连接层)
logits = tf.matmul(output, softmax_w) + softmax_b   # logits shape:batch_size*num_step,output_size

通过全连接层后,得到logits,其维度为(batch_size*num_step,output_size)

参考网址:https://blog.csdn.net/xyz1584172808/article/details/83056179

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值