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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm在全局搜索某个变量「建议收藏」

    pycharm在全局搜索某个变量「建议收藏」吃了写代码不规范的亏。。。明明记得之前写过某个功能,但是因为文件命名太随意,“123”,“111”,“a”,“test”等不知所谓的名称都被我用上了,以至于找代码时候焦头烂额,以后一定要养成规范命名的好习惯。不过如果已经这样写了,需要找某个函数时,可以用全局搜索的方式,通过找关键字,定位函数,定位文件。具体操作参看:pycharm如何全局进行查找一个关键词…

  • Python实现人脸识别「建议收藏」

    Python实现人脸识别「建议收藏」案例分析概述Python在人脸识别方面功能很强大,程序语言简单高效,下面编程实现一下如何实现人脸识别。分别给出实现代码,作为学习和技术交流。Python基础环境准备参见:https://blog.csdn.net/yan_dk/article/details/89528463案例实现打开显示图片importcv2#opencv库#读…

  • 微信公众号开发教程(一) 验证接入[通俗易懂]

    作者:陈惠,叩丁狼教育高级讲师。原创文章,转载请注明出处。微信公众号开发教程(一)验证接入本篇文章主要介绍了微信公众号开发接入详细流程,希望对刚接触公众号开发的同学有所帮助,有兴趣的同学可多多关注叩丁狼公众号,后续会更新不同的公众号小案例。公众号的分类我们平常在微信应用上会看到有很多的公众号,但是各自并不一样,公众号也分很多种类型,不过最常见的就是服务号和订阅号了。下面我们来看一下他们的区别:1、…

  • java将字符串分段输出_java输入字符串并将每个字符输出的方法[通俗易懂]

    java将字符串分段输出_java输入字符串并将每个字符输出的方法[通俗易懂]java输入字符串并将每个字符输出的方法如下所示:importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){inti,len;Stringstr;Scannerin=newScanner(System.in);str=in.next();len=str.length();…

    2022年10月17日
  • java script的基础理解以及常规的使用注意事项「建议收藏」

    java script的基础理解以及常规的使用注意事项「建议收藏」js:javascriptjs一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。在语句上还是有一些类似之处,但本质上还是很不一样的:js是基于对象的,边解释边执

  • 二维码转换成短链接_二维码解析url

    二维码转换成短链接_二维码解析urlVue生成二维码实战案例,vue把url地址转化为二维码手机扫码打开

发表回复

您的电子邮箱地址不会被公开。

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