当滤波器大小为1

时间:2017-08-06 23:51:28

标签: tensorflow tflearn

我想要一个“卷积”图层,其中滤镜大小为1.我可以使用(选项1)实现此目的

tflearn.layers.conv.conv_1d( input, n_output_channels, 1 )

或使用(选项2)滚动我自己

tf.matmult( input, tf.tile( weights, [batch_size, 1, 1] ) )

其中输入的维度为[batch,sequence,n_input_channels],权重为[1,n_input_channels,n_output_channels]。

这两个选项的性能似乎大致相当,但我猜两者都效率低下:选项1可能会产生预期“真实”卷积的开销,并且tile操作似乎在选项2中应该是不必要的。是否存在我能做到这一点更聪明吗?

1 个答案:

答案 0 :(得分:1)

如果您计划使用GPU,最好的方法可能是坚持使用原生的cuDNN操作,在这种情况下是卷积。

NVIDIA没有提供有关其实现的详细信息,但我很惊讶他们没有针对NN中常用的小尺寸的专用实现,包括具有1x1空间范围的内核。这很可能适用于其他NN专用库,例如​​CPU上的Intel MKL-DNN。

只有在使用通用的,非NN卷积库或经过严格优化的卷积库时,您的问题才适用。我认为这不是tensorflow或任何其他主要的DL库及其依赖的情况。 (检查Eigen可能会很有趣。)