tensorflow中LSTM和GRU的用法分析

本文深入解析了TensorFlow中LSTM和GRU层的使用方法,通过具体实例展示了如何控制输出序列、状态返回及记忆状态保持等功能,对比了两种层在不同参数设置下返回值的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tensorflow中LSTM和GRU层的用法分析

说明

本文所用的实例基于python3.6。tensorflow1.14.0

LSTM

import tensorflow as tf 
import numpy as np 

#units,表示每个时间步的输出维度,比如输入的每个时间步是一个3维向量,则输出是一个6维向量
#return_sequences,控制是否输出全部时间步的隐藏层(h_t)
#return_state,控制是否输出最后一个时间步的状态(c_t)
#stateful,控制记忆状态是否在不同样本间保持,默认False,不保持
#recurrent_activation:门函数的激活函数(sigmoid/hard_softmax)
#activation:输出函数(隐藏状态)的激活函数/内部状态函数的激活函数,常用tanh,比如隐藏层输出 h_t = Z_o * tanh * c_t,内部函数的激活函数也是用tanh

UNITS = 6
data = np.random.rand(1,5,3)

model = tf.keras.Sequential([
    #只输出最后一个时间步的隐藏层,是一个UNITS维度的向量,输出shape(1,6)
    tf.keras.layers.LSTM(UNITS,return_sequences = False,return_state = False,input_shape=(5,3))
])
predict = model.predict(data)
print(predict)
print(predict.shape)

input = tf.keras.Input(shape=(5,3))
#输出array数组。第一个元素:每个时间步输出的隐藏层,shape(1,5,6);第二个元素最后一个时间步的隐藏层(1,6);第三个元素是最后一个时间步的输出状态
LSTM2 = tf.keras.layers.LSTM(UNITS,return_sequences = True,return_state = True)(input)
model2 = tf.keras.Model(inputs = input,outputs = LSTM2)
predict2 = model2.predict(data)
print(predict2)
print(len(predict2))
print(predict2[0].shape)
print(predict2[1].shape)
print(predict2[2].shape)

#输出array数组,第一个元素:最后一个时间步的隐藏层,shape(1,6);第二个元素:最后一个时间步的隐藏层,shape(1,6);第三个元素:最后一个时间步的输出状态(1,6)
LSTM3 = tf.keras.layers.LSTM(UNITS,return_sequences = False,return_state = True)(input)
model3 = tf.keras.Model(inputs = input,outputs = LSTM3)
predict3 = model3.predict(data)
print(predict3)
print(len(predict3))
print(predict3[0].shape)
print(predict3[1].shape)
print(predict3[2].shape)

#输出所有时间步的隐藏层,shape(1,5,6)
LSTM4 = tf.keras.layers.LSTM(UNITS,return_sequences = True,return_state = False,)(input)
model4 = tf.keras.Model(inputs = input,outputs = LSTM4)
predict4 = model4.predict(data)
print(predict4.shape)

GRU

import tensorflow as tf  
import numpy as np 
print(tf.__version__)

UNITS =6
data = np.random.rand(1,5,3)
input = tf.keras.Input(shape=(5,3))

#只输出最后一个神经元的隐藏层,输出shape(1,6)
model1 = tf.keras.Sequential([
    tf.keras.layers.GRU(UNITS,return_sequences=False,return_state=False,input_shape=(5,3))
])
predict1 = model1.predict(data)
# print(predict1)

#第一个元素返回全部时间步的隐藏层,第二个元素最后一个时间步的隐藏层。因为GRU结构的隐藏层 = 记忆状态。所以没有第三个元素
#通过此例子可以看出,GRU和LSTM的区别:当return_state = True的时候,LSTM返回三个元素,GRU返回两个元素,因为对于GRU来说记忆状态等于隐藏层
#因此其它几种情况下,可以通过参考LSTM结构的返回值推导出。这里不再复述。
GRU2 = tf.keras.layers.GRU(UNITS,return_sequences=True,return_state=True)(input)
model2 = tf.keras.Model(inputs = input,outputs = GRU2)
predict2 = model2.predict(data)
print(predict2)
print(len(predict2))
print(predict2[0].shape)
print(predict2[1].shape)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值