tf.keras.layers.LSTMCell和tf.keras.layers.LSTM

tf.keras.layers.LSTMCell 在整个时间序列输入中处理一个步骤,而 tf.keras.layer.LSTM处理整个序列

tf.keras.layers.LSTMCell

API简介:

tf.keras.layers.LSTMCell(
units, activation=‘tanh’, recurrent_activation=‘sigmoid’, use_bias=True,
kernel_initializer=‘glorot_uniform’, recurrent_initializer=‘orthogonal’,
bias_initializer=‘zeros’, unit_forget_bias=True, kernel_regularizer=None,
recurrent_regularizer=None, bias_regularizer=None, kernel_constraint=None,
recurrent_constraint=None, bias_constraint=None, dropout=0.0,
recurrent_dropout=0.0, implementation=2, **kwargs
)

units:正整数,输出空间的维数。
activation:要使用的激活功能。默认值:双曲正切(tanh)。如果通过None,则不会应用任何激活(即“线性”激活:)a(x) = x。
recurrent_activation:用于循环步骤的激活功能。默认值:S形(sigmoid)。如果通过None,则不会应用任何激活(即“线性”激活:)a(x) = x。
use_bias:布尔值(默认True),层是否使用偏置向量。
kernel_initializer:kernel权重矩阵的初始化程序,用于输入的线性转换。默认值:glorot_uniform。
recurrent_initializer:recurrent_kernel权重矩阵的初始化程序,用于循环状态的线性转换。默认值:orthogonal。
bias_initializer:偏置矢量的初始化器。默认值:zeros。
unit_forget_bias:布尔值(默认True)。如果为True,则在初始化时将1加到忘记门的偏置上。将其设置为true也将强制执行 bias_initializer=“zeros”。Jozefowicz等人建议使用此方法。
kernel_regularizer:正则化函数应用于kernel权重矩阵。默认值:None。
recurrent_regularizer:正则化函数应用于recurrent_kernel权重矩阵。默认值:None。
bias_regularizer:正则化函数应用于偏差向量。默认值: None。
kernel_constraint:约束函数应用于kernel权重矩阵。默认值:None。
recurrent_constraint:约束函数应用于recurrent_kernel 权重矩阵。默认值:None。
bias_constraint:约束函数应用于偏差向量。默认值: None。
dropout:在0到1之间浮动。为输入的线性转换而下降的单位的分数。默认值:0
recurrent_dropout:在0到1之间浮动。用于递归状态线性转换的单位小数。默认值:0
implementation:实施模式1或2。模式1将其操作构造为大量较小的点乘积和加法运算,而模式2(默认)将它们分为较少的较大操作。这些模式在不同的硬件和不同的应用程序上将具有不同的性能配置文件。默认值:2
调用参数:
inputs一个2D张量,形状为[batch, feature]
states:对应于单元单位的2张量的列表。它们都具有形状[batch, units],第一个张量是前一个时间步长的记忆状态,第二个tesnor是前一个时间步长的进位状态。对于时间步0,用户提供的初始状态将被馈送到单元。
training:Python布尔值,指示该层是应在训练模式下还是在推理模式下运行。仅在使用dropout或 时相关recurrent_dropout

tf.keras.layers.LSTMCell 输入输出

1、使用for循环调用
由于是cell类,所以需要自行初始化向量 的状态变量 List 有两
个,即[ 𝑡, 𝒄𝑡],需要分别初始化,其中 List 第一个元素为 𝑡,第二个元素为𝒄𝑡。调用 cell 完成前向运算时,返回两个元素,第一个元素为 cell 的输出,也就是 𝑡,第二个元素为cell 的更新后的状态 List:[ 𝑡, 𝒄𝑡]。首先新建一个状态向量长度ℎ = 64的 LSTM Cell,其中状态向量𝒄𝑡和输出向量 𝑡的长度都为ℎ,代码如下:

x = tf.random.normal([2,80,100])
xt = x[:,0,:] # 得到一个时间戳的输入11 章 循环神经网络 26
cell = layers.LSTMCell(64) # 创建 LSTM Cell
# 初始化状态和输出 List,[h,c]
state = [tf.zeros([2,64]),tf.zeros([2,64])]
out, state = cell(xt, state) # 前向计算
# 查看返回元素的 id
id(out),id(state[0]),id(state[1])
Out[18]: (1537587122408, 1537587122408, 1537587122728)
可以看到,返回的输出 out 和 List 的第一个元素 𝑡的 id 是相同的,这与基础的 RNN 初衷
一致,都是为了格式的统一。
通过在时间戳上展开循环运算,即可完成一次层的前向传播,写法与基础的 RNN 一
样。例如:
# 在序列长度维度上解开,循环送入 LSTM Cell 单元
for xt in tf.unstack(x, axis=1): 
 # 前向计算
 out, state = cell(xt, state)
输出可以仅使用最后一个时间戳上的输出,也可以聚合所有时间戳上的输出向量。

2、使用 tf.keras.layer.RNN调用

inputs = np.random.random([32, 10, 8]).astype(np.float32)
rnn = tf.keras.layers.RNN(tf.keras.layers.LSTMCell(4))

output = rnn(inputs)  # The output has shape `[32, 4]`.

rnn = tf.keras.layers.RNN(
    tf.keras.layers.LSTMCell(4),
    return_sequences=True,
    return_state=True)

# whole_sequence_output has shape `[32, 10, 4]`.
# final_memory_state and final_carry_state both have shape `[32, 4]`.
whole_sequence_output, final_memory_state, final_carry_state = rnn(inputs)

tf.keras.layers.LSTM

tf.keras.layers.LSTM(
units, activation=‘tanh’, recurrent_activation=‘sigmoid’, use_bias=True,
kernel_initializer=‘glorot_uniform’, recurrent_initializer=‘orthogonal’,
bias_initializer=‘zeros’, unit_forget_bias=True, kernel_regularizer=None,
recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None,
kernel_constraint=None, recurrent_constraint=None, bias_constraint=None,
dropout=0.0, recurrent_dropout=0.0, implementation=2, return_sequences=False,
return_state=False, go_backwards=False, stateful=False, time_major=False,
unroll=False, **kwargs
)

基于可用的运行时硬件和约束,该层将选择不同的实现(基于cuDNN或纯TensorFlow)以最大化性能。如果有GPU,并且该层的所有参数都满足CuDNN内核的要求(请参阅下文以了解详细信息),则该层将使用快速cuDNN实现。

使用cuDNN实现的要求是

activation == tanh (默认值)
recurrent_activation == sigmoid (默认值)
recurrent_dropout == 0 (默认值)
unroll 是 False (默认值)
use_bias 是 True (默认值)
输入不会被屏蔽或严格右填充。

API:(讲解几个比较重要的)

return_sequences:布尔值。是否返回最后的输出。在输出序列或完整序列中。默认值:False。
return_state:布尔值。除输出外,是否返回最后一个状态,且返回值是二维的。默认值:False
mask:形状的二进制张量,[batch, timesteps]指示是否应屏蔽给定的时间步长(可选,默认为None)。
training:Python布尔值,指示该层是应在训练模式下还是在推理模式下运行。该参数在调用时传递给单元格。仅在使用dropout或 时才有意义recurrent_dropout(可选,默认为None)。
initial_state:初始状态张量的列表,该初始张量将传递给单元格的第一个调用(可选,默认情况下None会导致创建零填充的初始状态张量)。

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf.keras.layers.LSTM()是一个用于创建LSTM层的函数。它可以接受多个参数来定义LSTM层的行为。其中一些参数包括units、activation、return_sequences和return_state等。units参数用于指定输出空间的维度,activation参数用于指定激活函数。return_sequences参数用于确定是否返回完整的序列输出,而return_state参数用于确定是否返回最终的记忆状态和细胞状态。\[1\] 举例来说,如果我们使用tf.keras.layers.LSTM(4)创建一个LSTM层,并将输入数据的形状设置为(32, 10, 8),则输出的形状将是(32, 4)。如果我们将return_sequences参数设置为True,并且return_state参数设置为True,那么除了完整的序列输出外,还将返回最终的记忆状态和细胞状态。此时,输出的形状将是(32, 10, 4)、(32, 4)和(32, 4)。\[1\] 除了tf.keras.layers.LSTM()函数外,还有一个类似的函数叫做tf.keras.layers.ConvLSTM2D(),它是一个卷积LSTM层,输入和循环变换都是卷积的。它也接受多个参数来定义卷积LSTM层的行为。\[2\] 总结起来,tf.keras.layers.LSTM()是用于创建LSTM层的函数,它可以根据给定的参数来定义LSTM层的行为,包括输出空间的维度、激活函数、是否返回完整的序列输出以及是否返回最终的记忆状态和细胞状态。 #### 引用[.reference_title] - *1* [【Tensorflow+Keras】tf.keras.layers.LSTM的解析与使用](https://blog.csdn.net/weixin_43935696/article/details/112716460)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [tf.keras.layers.LSTMtf.keras.layers.ConvLSTM2D](https://blog.csdn.net/u011913417/article/details/110872784)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [tf.keras.layers.LSTM参数与LSTM模型之前的关系](https://blog.csdn.net/sslfk/article/details/121946662)[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^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值