畅游人工智能之海--Keras教程之循环神经网络(五)
畅游人工智能之海--Keras教程之循环神经网络(五) | 双向循环神经网络
写在开篇
在keras的循环层\(GRU\) 、\(LSTM\)等中的keras声明中,有一个叫做\(go\_backwards\)的参数。参数的取值为\(true\)或者\(false\)。如果取值为\(true\),输入的序列数据就会被反向处理,并且默认是\(false\),也就是正向处理数据。举个例子,比如\(RNN\)的输入是\(a,b,c,d,e\),如果\(go\_backwards=true\),输入就是\(e,d,c,b,a\)。\(go\_backwards\)参数的设置具有一定的意义。
\(go\_backwards\) 的意义所在
循环神经网络本质上处理的是时序信息,或者是分先后顺序的信息。在文本的处理中经常用到,在此不做深究,我们只认为\(RNN\)的处理结果中包含了,时序信息。而且包含的时序信息越多,处理的效果就越好。而正序处理和倒序处理包含了不同的时序信息。这是\(go\_backwards\)参数的意义所在,也是双向循环层的意义所在。
Bidirectional
整体效果
在一次处理中,正向处理一遍,反向处理一遍,时间代价不变,空间代价加倍,获取更多序列信息。
keras实现
1 | tf.keras.layers.Bidirectional( |
\(keras\)中的\(Bidirectional\)其实不是一个单独的layer,而是一个wrapper。先看一个例子。
1 | model = Sequential() |
在声明中,我们需要实例化两个循环神经网络层,这个循环层可以是\(RNN,LSTM,GRU\)等,然后将这两个实例化层作为参数传给tf.keras.layers.Bidirectional
即可。
总结
比较核心的layer都已经讲完了,接下来会分享一些同样重要的点,比如metrics、callbacks等,他们对于准确率的提升,训练过程的控制等都有重要意义。