deep-learning - 如何在 PyTorch 中实现时间分布密集(TDD)层
问题描述
在一些分析时间数据(例如音频或视频)的深度学习模型中,我们使用“时间分布密集”(TDD)层。这将创建一个完全连接(密集)的层,该层分别应用于每个时间步长。
在 Keras 中,这可以使用TimeDistributed 包装器来完成,这实际上更通用一些。在 PyTorch 中,这几年来一直是一个开放的功能请求。
我们如何在 PyTorch 中手动实现时间分布密集?
解决方案
特别是对于时间分布的密集(而不是时间分布的其他任何东西),我们可以通过使用卷积层来破解它。
查看您显示的 TDD 层图。我们可以将其重新想象为一个卷积层,其中卷积核的“宽度”(在时间上)正好为 1,并且“高度”与张量的全高匹配。如果我们这样做,同时确保我们的内核不允许超出张量的边缘,它应该可以工作:
self.tdd = nn.Conv2d(1, num_of_output_channels, (num_of_input_channels, 1))
您可能需要对张量轴进行一些重新排列。这行代码的“输入通道”实际上来自张量的“频率”轴(“图像的 y 轴”),“输出通道”确实会排列在“通道”轴上。(输出的“y 轴”将是高度为 1 的单一维度。)
推荐阅读
- javascript - 退出 mongo db access Node.js 后可变数据丢失
- r - 在 R 中,按 2 列分组,然后计算第三列的百分比频率
- algorithm - 所有 N 的 k 组合数
- javascript - Moment.duration():获取总天数
- python - 为什么在 matplotlib 中调整 scilimits 不能正常工作?
- django - django - keras - aws elastic beanstalk - 更新已部署应用程序的数据
- swift - 从 C# 中的 async/await 到 Swift 中的闭包
- c# - MVC Ajax 在点击事件上发布到控制器
- r - lm 回归问题
- react-native - 反应本机调试器 - 刷新应用程序时如何保存断点