2017-08-06 48 views
0

我想要「卷積」層,其中所述過濾器大小爲1,我可以使用實現這個(選項1)更高效1D卷積當過濾器大小爲1

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

或自己使用輥(選項2)

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

其中輸入具有的尺寸[批次,序列,n_input_channels]和權重爲[1,n_input_channels,n_output_channels]。

這兩個選項的性能似乎大致相當,但我猜測兩者的效率都很低:選項1大概是從預期「真實」卷積開始的開銷,而選項2中的tile操作看起來應該是不必要的。有更聰明的方法可以做到這一點?

回答

1

如果您計劃使用GPU,最好的做法可能是堅持使用原生的cuDNN操作,在這種情況下可以使用卷積。 NVIDIA公司並沒有提供關於它們實現的很多細節,但是我會感到驚訝的是,他們沒有用於NN的常見小尺寸的專用實現,包括空間範圍爲1x1的內核。這最可能適用於其他NN專用庫以及CPU上的英特爾MKL-DNN。

只有在使用泛型,非NN卷積庫或非優化卷積庫時,纔會應用您的問題。我不認爲這是tensorflow或任何其他主要DL書庫和它們的依賴關係的情況。 (在Eigen中檢查可能會很有趣。)

+0

是的,我主要關心GPU上的性能。謝謝。 – daknowles