实现keras中ConvLSTM2D中recurrent_activation和activation的设置

  1. LSTM结构如下图
    在这里插入图片描述
    一种常见的写法为如下,每个门的生成除了当前时刻的信息Xt和上一个时刻的输出ht-1外,还外加了一个小尾巴 Ct-1,即上一个时刻的状态。 但是这个写法其实太过复杂,而且不易理解LSTM中参数个数的计算
    在这里插入图片描述
    而这样的写法其实是更合适。每个门的生成都与当前时刻输入和上一个时刻的输出有关。
    这三个门的激活函数都默认为sigmoid(hard_sigmoid),在keras中为用recurrent_activations参数表示。
    而输入Ct和输出信息ht里面使用的两个激活函数都默认为tanh,在keras中用activations表示。
    在这里插入图片描述

LSTM参数计算方法可参考如下链接
https://blog.csdn.net/PIPIXIU/article/details/81014168
https://www.cnblogs.com/wushaogui/p/9176617.html

  1. ConvLSTM2D
    施雄健提出的ConvLSTM2D可以具备处理时空特性数据的能力。主要改动是将LSTM的部分gate由矩阵乘法运算改成卷积运算。这个具体参数和维度信息我后期会出一篇介绍。

在这里插入图片描述
keras根据这个思路将ConvLSTM2D进行了封装。
其封装过程中将三个门的激活函数都用一个recurrent_activation来表示,两个tanh激活函数也只用一个activations来指定。
也就是说,keras中,ConvLSTM2D使用了5个激活函数,但是只传入两个激活函数参数进行控制。
如果我们想对三个门和其他两个tanh激活函数,这5个激活函数分别使用不同的激活函数,如relu什么的,在keras里面就没有办法实现。

  1. 源码
    keras的ConvLSTM2D层在keras.layers中,其底层源码一般保存在你的anconda所安装的路径的layers里面,如下图。
    其中convolutional_recurrent就是ConvLSTM2D的源码。为了以防万一,备份一份,进行修改。
    在这里插入图片描述
    将其打开,看544行和545行。默认为tanh和hard_sigmoid
    在这里插入图片描述
    在727-731行为ConvLSTM2D的激活函数使用方式。是不是很相似,和上面的公式一模一样!
    在这里插入图片描述
  2. 源码修改

这里将5个激活函数用5个参数来标准,这样就可以实现一对一精准修改啦
activation_i=‘tanh’,
activation_o=‘tanh’,
recurrent_activation_f=‘hard_sigmoid’,
recurrent_activation_i=‘hard_sigmoid’,
recurrent_activation_o=‘hard_sigmoid’,
前两激活函数为上面公式 4和6中所用。后三个激活函数表示三个门(遗忘门、输入门和输出门)所用激活函数

在这里插入图片描述
在这里插入图片描述
这两块是最基本的更改,除此之外,还要其他一些细节也要就行相应的修改。具体就不一一讲解了,都贴在下面了,有具体的行数可以对应修改。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改完成之后,就修改好的convlutional_recurrent.py放进layers里面去(进行替换)。之后重启你的IDE,就可以看到修改后的效果啦.如下图。
亲测有效!!!
在这里插入图片描述
5. 注意事项。
修改好源码后,ConvLSTM2D? 会出现如下解释,似乎并没有改变。但是实际上注释已经和参数不一样啦。所以大家修改源码的时候,最好也将注释进行对应修改哦
在这里插入图片描述

另外,LSTM中的激活函数的改变,也可以相对应的方式进行源码修改。下面这个链接会给你启发的。
https://blog.csdn.net/silent56_th/article/details/73442391

另外,如果有需要修改后的源码的,可以私聊 !
欢迎转载,如转载,务必加上参考链接!

  • 4
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值