keras中,TimeDistributed层在LSTM中的作用

本文详细介绍了Keras中的TimeDistributed层,该层用于将同一个层应用到3D输入的每个时间片。通过示例代码展示了在LSTM网络中使用TimeDistributed进行序列预测的不同模式,包括一对一、多对一和多对多。同时,讨论了使用该层时的注意事项,如输入和输出的维度要求。此外,还提供了LSTM中参数计算的公式,并给出了相关资源链接供进一步学习。

@创建于:20210414

1、TimeDistributed官网介绍

keras.layers.TimeDistributed(layer)

  • (1)这个封装器将一个层应用于输入的每个时间片。
  • (2)输入至少为3D,且第一个维度应该是时间所表示的维度。
    • 例如:32 个样本的一个batch,其中每个样本是10 个16 维向量的序列。那么这个batch 的输入尺寸为(32, 10, 16),而input_shape 不包含样本数量的维度,为(10, 16)。
    • 使用TimeDistributed 来将Dense 层独立地应用到这10 个时间步中的每一个。

即:TimeDistributed(Dense) 将同样的Dense(全连接)层操作应用到3D张量的每一个时间间隔上。

【我的理解】:TimeDistributed主要作用于每一步向量长度(即:属性大小);可以实现每一步结束后直接进行计算,而不是全部序列结束后进行计算;不改变数据的尺寸,改变数据尺寸的是TimeDistributed的层对象。

2、注意事项

利用TimeDistributed层来处理LSTM隐藏层的输出,在运用TimeDistributed包装层的时候需要记住两个关键点:
(1)输入必须(至少)是三维的。这就意味着需要在TimeDistributed包装密集层前配置最后一个LSTM层以便返回序列(例如将“return_sequences”参数设置为“True”);
(2)输出将也是三维的。如果TimeDistributed包装密集层是输出层,并且是用于预测序列,那么就得将y数组的大小调整成三维的向量。

3、TimeDistributed的测试代码

# -*- coding:UTF-8 -*- 

# author:
# contact: 
# datetime:2021/4/14 13:19
# software: PyCharm

"""
 文件说明:
 TimeDistributed的使用测试
 """

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM, TimeDistributed

length = 5
seq = np.array([i*1.0/length for i in range(length)])



def one_to_one():
    X = seq.reshape(len(seq), 1, 1)
    X_test = np.arange(start=1, stop=3, step=0.2)
    X_test = X_test.reshape(X_test.shape[0], 1, 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值