基于Torch的自定义空间卷积。

我需要在Torch中执行自定义空间卷积。与仅仅将每个输入像素乘以该像素的权重并加上过滤器的偏置以形成每个输出像素不同,我需要对输入像素执行更复杂的数学函数,然后将它们加在一起。

我知道如何做这个,但我不知道一个好的方法。我想到的最好的方法是将整个输入张量,创建一堆“视图”不需要分配额外的内存的辅助张量,将其放入一个复制层(输出过滤器数是复制计数),并将其馈送到包含一堆常规层的并行表层,这些常规层有它们之间共享的参数。

问题在于,尽管在“非常可管理的开销”的内存方面这很好,但我们在这里讨论的是输入宽度^输入高度^输入深度^输出深度的小型网络,可能有一些方法可以创建大型的“长和高”的网络,可以立即处理整个复制的输入集,但如何创建部分连接的层(如卷积)而不是完全连接的层?

我想通过继承创建一个特殊的SpatialConvolution“类”的副本并对其进行修改,但我甚至无法尝试,因为它是由外部的C库实现的。我不能仅使用常规的层在一个平凡的SpatialConvolution层之前,因为我需要使用不同的权重和偏置进行我的数学计算,以每个过滤器为单位(在不同的输入坐标应用相同的过滤器之间共享)。

点赞