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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle创建数据库详解,详解Oracle手工创建数据库-Oracle「建议收藏」

    oracle创建数据库详解,详解Oracle手工创建数据库-Oracle「建议收藏」下面就介绍一下Oracle手动创建数据库的步骤:1、确定新建数据库名称和实例名称;2、确定数据库管理员的认证方式;3、创建初始化参数文件;www.2cto.com4、创建实例;5、连接并启动实例;6、使用createdatabase语句Oracle创建数据库;7、创建附加的表空间;8、运行脚本创建数据字典视图;下面以创建一个名为“MYNEWDB”的数据库为例1、确定数据库名称与实例名称;1.DB…

    2022年9月22日
    0
  • Maven工具安装

    Maven工具安装

    2021年6月3日
    94
  • NLP学习路线总结

    NLP学习路线总结目录1、自然语言处理概述2、自然语言处理入门基础3、自然语言处理的主要技术范畴4、自然语言处理基本点5、特征处理6、模型选择7、NLP常用工具8、NLP语言模型9、快速入门NLP方法10、自然语言处理学习资料1、自然语言处理概述自然语言处理(NaturalLanguageProcessing,NLP)是计算机科学领域与人工智能领域中的一个重要方向…

    2022年9月28日
    0
  • 优先队列的优先级_kafka优先级队列

    优先队列的优先级_kafka优先级队列概念☺优先队列是一种用来维护一组元素构成的结合S的数据结构,其中每个元素都有一个关键字key,元素之间的比较都是通过key来比较的。优先队列包括最大优先队列和最小优先队列,优先队列的应用比较广泛,比如作业系统中的调度程序,当一个作业完成后,需要在所有等待调度的作业中选择一个优先级最高的作业来执行,并且也可以添加一个新的作业到作业的优先队列中。优先队列的实现中,我们可以选择堆数据结构,最…

    2022年9月14日
    0
  • Java 变量命名规则[通俗易懂]

    Java 变量命名规则[通俗易懂]变量命名必须满足一系列的条件,不能随意命名示例1:命名规则变量命名只能使用:字母数字$_ 变量第一个字符只能使用:字母$_ 变量第一个字符不能使用:数字 注:_是下划线,不是-减号或者——破折号inta=5;inta_12=5;int$a43=5;inta434=5;//第一个是数字,是不行的int34a=5;示例…

    2025年6月21日
    0
  • Idea激活码最新教程2022.2.5版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2022.2.5版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2022 2 5 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2022 2 5 成功激活

    2025年5月26日
    0

发表回复

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

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