在tensorflow RNN layer的搭建(GRU,LSTM等)中,我们展示了如何调用 tensorflow 内置模块和函数,搭建RNN layer。然而,当一般的GRU/LSTM layer不适用时,我们希望对其 cell 进行改进,实现自主设计的改造版的RNN cell。
这方面研究工作代表的典型有:Time-LSTM,论文链接为:What to Do Next: Modeling User Behaviors by Time-LSTM
下面,我们从tensorflow的内置函数 tf.scan()出发,展示如何自主实现/改造 RNN cell。
tf.scan()
tf.scan(
fn,
elems,
initializer=None,
parallel_iterations=10,
back_prop=True,
swap_memory=False,
infer_shape=True,
name=None
)
fn : 一个二元函数
elems:一个tensor list
initializer:一个tensor,作为初始化值
实际上,tf.scan()所能应用的类型不止如此,这里只举了我们所需要用到的部分
在tf.scan 记录中有一个很好的例子,我们借鉴一下:
x = [1,2,3]
z = 10
x = tf.convert_to_tensor(x)
z = tf.convert_to_tensor(z)
def f(x,y):
return x+y
g = tf.scan(fn=f,elems = x,initializer=z)
sess = tf.Session()
sess.</