keras 双向LSTM 简单示例[通俗易懂]

keras 双向LSTM 简单示例[通俗易懂]importtensorflow.compat.v1astffromkeras.layersimportConvLSTM2D,TimeDistributed,Conv2D,Bidirectionalimportnumpyasnpinputs_np=tf.convert_to_tensor(np.random.random((4,6,256,256,3)).astype(np.float32))#shape=[5,6,10,10,3]conv1=TimeDi.

大家好,又见面了,我是你们的朋友全栈君。

示例1: 仅返回各个时刻的状态 

import tensorflow.compat.v1 as tf
from keras.layers import ConvLSTM2D,TimeDistributed,Conv2D,Bidirectional
import numpy as np


inputs_np = tf.convert_to_tensor(np.random.random((4,6,256,256,3)).astype(np.float32))  # shape = [5,6,10,10,3]

conv1 = TimeDistributed(Conv2D(filters=10,kernel_size=(3,3),strides=(1,1)),input_shape=(6,256,256,3))(inputs_np)
lstm_outs= Bidirectional(ConvLSTM2D(filters=4,kernel_size=(3,3),strides=(1,1),padding='valid',activation='tanh',return_sequences=True),merge_mode=None)(conv1)

with tf.Session() as sess:
	sess.run(tf.global_variables_initializer())
	lstm_out_1,lstm_out_2 = sess.run(lstm_outs)

	print(lstm_out_1.shape)
	

注意: 在Bidirectional中,参数merge_mode有5种选择[“sum”,”mul”,”concat”,”ave”,None],默认是“concat”模式,两个LSTM的输出沿channel维度串联。 选择None时,输出不会被结合,作为一个列表返回。

 示例2:同时返回各个时刻的输出,与最后一个时刻的状态(注意输出的排序)

import tensorflow as tf
import numpy as np
import keras
from keras.layers import ConvLSTM2D,Bidirectional

lstm_input = np.random.random((4,6,30,30,3)).astype(np.float32)
lstm_input = tf.convert_to_tensor(lstm_input)

lstm_out1,lstm_out2,h1,c1,h2,c2 = Bidirectional(ConvLSTM2D(filters=1,kernel_size=[5,5],strides=(1,1),padding='valid',
                                                           activation='relu',batch_input_shape=(-1,6,30,30,3),
                                                           return_sequences=False,return_state=True),
                                                merge_mode=None)(lstm_input)


with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    lstm_out1,lstm_out2,h1,c1,h2,c2= sess.run([lstm_out1,lstm_out2,h1,c1,h2,c2])
    print(lstm_out1==h1)
    print(lstm_out2==h2)

可见,在双向LSTM中,如果输出LSTM的最后一个时刻的cell状态, 得到的输出的排序是:lstm_out1, lstm_out2,  h1, c1, h2, c2。

其中lstm_out1,h1,c1是前向LSTM的输出,lstm_out2,h2,c2是后向LSTM的输出。

参考:https://keras.io/zh/layers/wrappers/#bidirectional

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/151619.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月21日 下午11:46
下一篇 2022年6月22日 上午6:00


相关推荐

  • pycharm配置conda记录

    pycharm配置conda记录文章目录 1 下载与安装 2 基本使用 3 查看与创建环境 4 包管理 5 pycharm 使用 1 下载与安装这个可以理解为是一个环境管理工具 就是运行不同的项目需要不同的环境 就是库 但是有的库会相互冲突 他这个就可以创建虚拟环境 给每个项目一个单独的虚拟环境 比较方便管理自己的环境 特别是跑深度学习的时候 特别需要这个 安装的话直接去官网就行了 不卡 下载速度还行 官网链接 https www anaconda com products individual macos 就是个 exe 安装就行了

    2026年3月27日
    1
  • 产品密钥无法激活成功,最后使用visio2013激活软件激活成功。「建议收藏」

    产品密钥无法激活成功,最后使用visio2013激活软件激活成功。「建议收藏」装了visio2013,使用网上搜索的产品密钥,没有一个能够激活成功。最后发现了visio的一个激活软件KMSpico,成功激活。激活成功教程工具KMSpico_setup.exe下载地址:https://pan.baidu.com/s/1wElfmRaufSpQGloLgQC64g提取码:kv2h安装后,从开始->程序->KMSpico->启动KMSpic…

    2022年6月24日
    66
  • gradle安装与入门

    gradle安装与入门1 Gradle 安装 本地也可不安装 不安装 gradle 配置选择 gradlewrappe 下载地址 http services gradle org distribution 下载你所需要对应的版本 gradle 4 6 1 bin zip 下载后解压到你想要的目录设置环境变量新建系统变量 变量名为 GRADLE HOME 变量值为 gradle 安装包所在目录添加到 PATH 环境中在 c

    2026年3月17日
    2
  • eclipse+birt报表开发

    eclipse+birt报表开发工具下载 https pan baidu com s 1pMEZwfh1 创建一个 Java 项目 2 制定一个存放报表模板的包 创建 report 模板 newreport 创建名为 mytest 1 rptdesign 的模板 3 创建数据源和数据集 3 新建数据源和数据集方式一 基于数据库 sql3 1 创建数据源 DataSources nbsp

    2026年3月26日
    2
  • 游戏常用算法-洗牌算法

    游戏常用算法-洗牌算法洗牌算法是一个比较常见的面试题。一副扑克54张牌,有54!种排列方式。最佳的洗牌算法,应该能够等概率地生成这54!种结果中的一种

    2022年7月3日
    31
  • sharePreference的几个重点

    sharePreference的几个重点

    2022年3月3日
    101

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号