Как я могу получить 1D-свертку в theano

Единственная функция, которую я могу найти, это для 2D сверток описан здесь...

Есть ли оптимизированная функция 1D?


person Alexander McFarlane    schedule 14.05.2015    source источник


Ответы (3)


Хотя я считаю, что в theano нет conv1d, Lasagne (библиотека нейронной сети поверх theano) имеет несколько реализаций слоя Conv1D. Некоторые основаны на conv2d функции теано с одним из измерений, равным 1, некоторые используют одно- или многоточечные произведения. Я бы попробовал их все, может быть, основанные на точечном продукте будут работать лучше, чем conv2d с width=1.

https://github.com/Lasagne/Lasagne/blob/master/lasagne/theano_extensions/conv.py

person Ishamael    schedule 14.05.2015
comment
Я только что изучил лазанью. Это отличная библиотека! Я немного боролся, будучи новичком в theano, с требуемым синтаксисом. Я думаю, Лазанья могла бы помочь мне в этом направлении! - person Alexander McFarlane; 15.05.2015

Похоже, что это в разработке. Я понял, что могу использовать функцию conv2d(), указав ширину или высоту как 1...

Для функции conv2d() параметр image_shape принимает список длины 4, содержащий:

([number_images,] height, width)

установив height=1 или width=1, он принудительно использует 1D-свертку.

person Alexander McFarlane    schedule 14.05.2015
comment
На самом деле это именно то, что лазанья делает в своем слое conv1d: github. com/Lasagne/Lasagne/blob/master/lasagne/ - person Ishamael; 14.05.2015

Чтобы быть немного более конкретным, я обнаружил, что это работает хорошо:

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' не является обязательным.

person H. Arponen    schedule 21.08.2015