Единственная функция, которую я могу найти, это для 2D сверток описан здесь...
Есть ли оптимизированная функция 1D?
Единственная функция, которую я могу найти, это для 2D сверток описан здесь...
Есть ли оптимизированная функция 1D?
Хотя я считаю, что в theano нет conv1d
, Lasagne (библиотека нейронной сети поверх theano) имеет несколько реализаций слоя Conv1D. Некоторые основаны на conv2d
функции теано с одним из измерений, равным 1, некоторые используют одно- или многоточечные произведения. Я бы попробовал их все, может быть, основанные на точечном продукте будут работать лучше, чем conv2d
с width=1
.
https://github.com/Lasagne/Lasagne/blob/master/lasagne/theano_extensions/conv.py
Похоже, что это в разработке. Я понял, что могу использовать функцию conv2d()
, указав ширину или высоту как 1...
Для функции conv2d()
параметр image_shape
принимает список длины 4, содержащий:
([number_images,] height, width)
установив height=1
или width=1
, он принудительно использует 1D-свертку.
Чтобы быть немного более конкретным, я обнаружил, что это работает хорошо:
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'
не является обязательным.