Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Deep learning 如何在PyTorch中实现时间分布密集(TDD)层_Deep Learning_Pytorch - Fatal编程技术网

Deep learning 如何在PyTorch中实现时间分布密集(TDD)层

Deep learning 如何在PyTorch中实现时间分布密集(TDD)层,deep-learning,pytorch,Deep Learning,Pytorch,在一些分析时态数据(如音频或视频)的深度学习模型中,我们使用“时间分布密集”(TDD)层。这将创建一个完全连接(密集)的层,该层将分别应用于每个时间步 在Keras中,这可以使用,这实际上稍微更一般。在PyTorch已经有好几年了 我们如何在Pytork中手动实现时间分布密集型?特别是对于时间分布密集型(而不是时间分布型),我们可以使用卷积层进行破解 请看您所显示的TDD层的示意图。我们可以将其重新想象为一个卷积层,其中卷积核的“宽度”(时间)正好为1,而“高度”与张量的整个高度相匹配。如果我

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

在Keras中,这可以使用,这实际上稍微更一般。在PyTorch已经有好几年了


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

特别是对于时间分布密集型(而不是时间分布型),我们可以使用卷积层进行破解

请看您所显示的TDD层的示意图。我们可以将其重新想象为一个卷积层,其中卷积核的“宽度”(时间)正好为1,而“高度”与张量的整个高度相匹配。如果我们这样做,同时确保我们的内核不允许移动到张量的边缘之外,那么它应该可以工作:

self.tdd = nn.Conv2d(1, num_of_output_channels, (num_of_input_channels, 1))
你可能需要重新排列张量轴。这行代码的“输入通道”实际上来自张量的“频率”轴(“图像的y轴”),而“输出通道”实际上将被安排在“通道”轴上。(输出的“y轴”将是高度为1的单件尺寸。)

如您所提到的:

同时,这将使得线性层不需要时间分布/瓶子

对于TDD层,将线性层直接应用于带有时间片的输入

[1]中的
:导入火炬
In[2]:m=火炬nn线性(20,30)
在[3]中:输入=火炬.randn(128,5,20)
在[4]中:输出=m(输入)
在[5]中:打印(output.size())
火炬尺寸([128,5,30])
以下是计算结果的简短说明

[1]中的
:导入火炬
在[2]中:m=火炬.nn.线性(2,3,偏差=假)
...:  
…:对于名称,m.named_parameters()中的参数为:
…:打印(名称)
…:打印(参数)
...:                                                                                                                                                                                       
重量
参数包含:
张量([-0.3713,-0.1113],
[ 0.2938,  0.4709],
[0.2791,0.5355]],需要_grad=True)
在[3]中:输入=火炬堆叠([火炬一号(3,2),2*火炬一号(3,2)],尺寸=0)
…:打印(输入)
张量([[1,1.],
[1., 1.],
[1., 1.]],
[[2., 2.],
[2., 2.],
[2., 2.]]])
In[4]:m(输入)
出[4]:
张量([-0.4826,0.7647,0.8145],
[-0.4826,  0.7647,  0.8145],
[-0.4826,  0.7647,  0.8145]],
[[-0.9652,  1.5294,  1.6291],
[-0.9652,  1.5294,  1.6291],
[-0.9652,1.5294,1.6291]],梯度fn=)
有关操作的更多详细信息,请参阅。注意,您可能需要添加另一个非线性函数,如
torch.tanh()
,以获得与
Keras
中的
Dense()
完全相同的层,其中它们支持关键字参数
activation='tanh'
等非线性

对于时间分布(例如CNN层),可能来自的片段会有用