首页 > 解决方案 > 如何在 PyTorch 中实现时间分布密集(TDD)层

问题描述

在一些分析时间数据(例如音频或视频)的深度学习模型中,我们使用“时间分布密集”(TDD)层。这将创建一个完全连接(密集)的层,该层分别应用于每个时间步长。

在 Keras 中,这可以使用TimeDistributed 包装器来完成,这实际上更通用一些。在 PyTorch 中,这几年来一直是一个开放的功能请求

我们如何在 PyTorch 中手动实现时间分布密集?

标签: deep-learningpytorch

解决方案


特别是对于时间分布的密集(而不是时间分布的其他任何东西),我们可以通过使用卷积层来破解它。

查看您显示的 TDD 层图。我们可以将其重新想象为一个卷积层,其中卷积核的“宽度”(在时间上)正好为 1,并且“高度”与张量的全高匹配。如果我们这样做,同时确保我们的内核不允许超出张量的边缘,它应该可以工作:

self.tdd = nn.Conv2d(1, num_of_output_channels, (num_of_input_channels, 1))

您可能需要对张量轴进行一些重新排列。这行代码的“输入通道”实际上来自张量的“频率”轴(“图像的 y 轴”),“输出通道”确实会排列在“通道”轴上。(输出的“y 轴”将是高度为 1 的单一维度。)


推荐阅读