tensorflow中LSTM和GRU的用法分析

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)
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TensorFlow,使用GRU(Gated Recurrent Unit)的参数设置包括以下几个方面: 1. 状态向量的长度:GRU通过状态向量来保存信息和传递信息。可以通过指定状态向量的长度来控制模型的容量和复杂度。例如,可以使用`layers.GRUCell(units)`来创建一个状态向量长度为`units`的GRU单元。 2. 输入数据的形状:在使用GRU之前,需要确定输入数据的维度。GRU接受三维的输入数据,形状为`[batch_size, time_steps, input_dim]`,其`batch_size`表示每个batch的样本数量,`time_steps`表示序列长度,`input_dim`表示每个时间步的输入特征维度。 3. 激活函数:GRU的门控单元和激活函数可以通过`activation`参数来指定。常用的激活函数包括`sigmoid`、`tanh`等。 4. 是否使用双向GRU:如果需要在模型使用双向GRU,可以使用`tf.keras.layers.Bidirectional`来封装GRU层。例如,可以使用`layers.Bidirectional(layers.GRUCell(units))`来创建一个双向GRU。 5. 参数初始化:可以通过`kernel_initializer`和`recurrent_initializer`参数来指定权重和循环权重的初始化方法。常用的初始化方法包括`glorot_uniform`、`orthogonal`等。 例如,使用TensorFlow创建一个包含GRU层的模型可以按照以下步骤进行: 1. 导入所需的库:`import tensorflow as tf` 2. 定义GRU层的参数:`units`表示状态向量的长度,`input_dim`表示输入数据的特征维度。 3. 创建GRU层:`gru_layer = tf.keras.layers.GRU(units, input_shape=(time_steps, input_dim))` 4. 将GRU层添加到模型:`model.add(gru_layer)` 通过指定不同的参数,可以根据具体的任务需求来设置GRU模型的参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Tensorflow梯度相关,LSTMGRU](https://blog.csdn.net/MHeartWGO/article/details/106538858)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [tensorflow实现循环神经网络——经典网络(LSTMGRU、BRNN)](https://blog.csdn.net/gm_Ergou/article/details/118360593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值