如何在theano中获得一维卷积
How can I get a 1D convolution in theano
我能找到的唯一函数是二维卷积described here...
有优化过的一维函数吗?
看起来好像是in development。
我意识到我可以通过将宽度或高度指定为 1...
来使用 conv2d()
函数
对于函数conv2d()
,参数image_shape
采用长度为4的列表,包含:
([number_images,] height, width)
通过设置 height=1
或 width=1
强制它进行一维卷积。
虽然我相信 theano 中没有 conv1d
,但 Lasagne(theano 之上的神经网络库)有几个 Conv1D 层的实现。有些基于theano的conv2d
函数,其中一个维度等于1,有些使用单点积或多点积。我会尝试所有这些,可能基于点积的性能会比 conv2d
和 width=1
更好。
https://github.com/Lasagne/Lasagne/blob/master/lasagne/theano_extensions/conv.py
更具体一点,我发现这个很好用:
conv2d = T.signal.conv.conv2d
x = T.dmatrix()
y = T.dmatrix()
veclen = x.shape[1]
conv1d_expr = conv2d(x, y, image_shape=(1, veclen), border_mode='full')
conv1d = theano.function([x, y], outputs=conv1d_expr)
border_mode = 'full'
可选。
我能找到的唯一函数是二维卷积described here...
有优化过的一维函数吗?
看起来好像是in development。 我意识到我可以通过将宽度或高度指定为 1...
来使用conv2d()
函数
对于函数conv2d()
,参数image_shape
采用长度为4的列表,包含:
([number_images,] height, width)
通过设置 height=1
或 width=1
强制它进行一维卷积。
虽然我相信 theano 中没有 conv1d
,但 Lasagne(theano 之上的神经网络库)有几个 Conv1D 层的实现。有些基于theano的conv2d
函数,其中一个维度等于1,有些使用单点积或多点积。我会尝试所有这些,可能基于点积的性能会比 conv2d
和 width=1
更好。
https://github.com/Lasagne/Lasagne/blob/master/lasagne/theano_extensions/conv.py
更具体一点,我发现这个很好用:
conv2d = T.signal.conv.conv2d
x = T.dmatrix()
y = T.dmatrix()
veclen = x.shape[1]
conv1d_expr = conv2d(x, y, image_shape=(1, veclen), border_mode='full')
conv1d = theano.function([x, y], outputs=conv1d_expr)
border_mode = 'full'
可选。