首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >keras 双向LSTM 简单示例[通俗易懂]

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

作者头像
全栈程序员站长
发布2022-06-25 12:55:05
发布2022-06-25 12:55:05
8210
举报

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

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

代码语言:javascript
复制
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:同时返回各个时刻的输出,与最后一个时刻的状态(注意输出的排序)

代码语言:javascript
复制
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.cn/151619.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 示例1: 仅返回各个时刻的状态
  • 示例2:同时返回各个时刻的输出,与最后一个时刻的状态(注意输出的排序)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档