提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
- 学习单步的RNN:RNNCell
提示:以下是本篇文章正文内容,下面案例可供参考
1.任务描述
本关任务:学习 RNN 循环神经网络的基本概念,并构建单个 RNNCell 。
2.相关知识
为了完成本关任务,你需要掌握:
- RNNCell 的基本原理和功能;
- BasicRNNCell 类的常用属性和方法。
RNNCell是什么
如果要学习 TensorFlow 中的 RNN ,第一站应该就是去了解“ RNNCell ”,它是 TensorFlow 中实现 RNN 的基本单元,每个 RNNCell 都有一个 call 方法,使用方式是: (output, next_state) = call(input, state) 。 有关时间序列的经验的传递,再结合当前的输入,就可以构成具有“循环”结构的 RNN (循环神经网络)。
单个RNNCell的构建
方法 tf.nn.rnn_cell.BasicRNNCell() 可以构造一个 BasicRNNCell 类的实例即一个最基本的 RNNCell ,这个方法有一个参数 num_units 我们需要设置一下,它代表了隐含层的大小,比如,构造一个拥有 5 个神经元的 BasicRNNCell 可以这样实现:
cell=tf.nn.rnn_cell.BasicRNNCell(num_units=5)
RNNCell能做什么
既然我们已经有了一个 RNNCell ,当然想要试着给一个输入,看看这个网络能给我们什么样的输出,这就需要一个我们之前提到的 call 方法,不过 BasicRNNCell 类里的这一调用方法叫做 call() ,下面就展示一下,给定一个输入, RNNCell 会输出给我们什么吧:)
cell=tf.nn.rnn_cell.BasicRNNCell(num_units=5)
新建一个输入值 x1。
x1=tf.placeholder(tf.float32,[batch_size,n_inputs])
batch_size 代表批量输入值的大小, n_inputs 代表单个输入值的维度
构建 BasicRNNCell,含有 n_units 个神经元
cell=tf.nn.rnn_cell.BasicRNNCell(num_units=n_units)
将初始状态初始化为全零
h0=cell.zero_state(batch_size=batch_size,dtype=tf.float32) output , h1 分别代表了这个 RNNCell 的输出和当前状态。
output,h1=cell.__call__(x1,h0)
打印当前状态
print(h1)
3.编程要求
根据提示,在右侧编辑器的 begin-end 间补充代码,创建一个包含 a 个神经元,可以接受一个 shape=[ b , c ] ,类型为 float32 的张量作为输入的 BasicRNNCell,并打印一次输入后该 BasicRNNCell 的输出。
4.笔者答案
import tensorflow as tf
def creatRNNCell(a,b):
cell=tf.nn.rnn_cell.BasicRNNCell(num_units=a)
c=3
x1=tf.placeholder(tf.float32,[b,c])
h0=cell.zero_state(batch_size=b,dtype=tf.float32)
output,h1=cell.__call__(x1,h0)
print(output)
通过截图
总结
- 学习单步的RNN:RNNCell
|