TimeDistributed包装器在LSTM或其他层中的用途

我在尝试理解Keras/TensorFlow中TimeDistributed层的用途。我阅读了一些讨论和文章,但仍然没有完全理解。

以下是一些帮助我理解TimeDistributed层作用的讨论链接 –

Keras中TimeDistributed层的作用是什么?

Keras中的TimeDistributed(Dense)与Dense – 参数数量相同

但我仍然不明白为什么实际上会使用这个层!

例如,以下两种代码将提供相同的输出(和输出形状):

model = Sequential()model.add(TimeDistributed(LSTM(5, input_shape = (10, 20), return_sequences = True)))print(model.output_shape)model = Sequential()model.add(LSTM(5, input_shape = (10, 20), return_sequences = True))print(model.output_shape)

根据我的理解,输出形状将是 –

(None, 10, 5)

所以,如果这两个模型提供相同的输出,那么TimeDistributed层的实际用途是什么?

我还有另一个问题。TimeDistributed层将时间相关数据应用于不同的层(共享相同的权重)。那么,它与Keras API中提供的展开LSTM层有什么不同:

unroll: 布尔值(默认False)。如果为True,网络将被展开,否则将使用符号循环。展开可以加速RNN,尽管它往往更加消耗内存。展开仅适用于短序列。

这两者之间的区别是什么?

谢谢…我还是个新手,所以有很多问题。


回答:

根据Keras的文档,TimeDistributed是一个包装器,它将一个层应用于输入的每个时间片段。

这里有一个可能有帮助的例子:

假设你有猫的视频样本,你的任务是一个简单的视频分类问题,如果猫没有移动返回0,如果猫在移动则返回1。假设你的输入维度是(None, 50, 25, 25, 3),这意味着每个样本有50个时间步或帧,你的帧是25×25大小,并且有3个通道,RGB。

一种方法是使用CNN(如Conv2D)从每个帧中提取一些“特征”,然后将它们传递给LSTM层。但每个帧的特征提取是相同的。现在,TimeDistributed来救场了。你可以用它包装你的Conv2D,然后将输出传递给同样由TimeDistributed包装的Flatten层。因此,在应用TimeDistributed(Conv2D(…))之后,输出的维度可能类似于(None, 50, 5, 5, 16),而在TimeDistributed(Flatten())之后,输出的维度将是(None, 50, 400)。(实际的维度将取决于Conv2D的参数。)

现在,这一层的输出可以传递给LSTM。

显然,LSTM本身不需要TimeDistributed包装器。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注