Проекция матрицы от 25х375 до 30х375 с использованием полностью связанного слоя - PullRequest
0 голосов
/ 31 мая 2018

В Matlab я реализую сверточную нейронную сеть, описанную в этой статье https://www.researchgate.net/publication/322514744_On_the_improvement_of_classifying_EEG_recordings_using_neural_networks

Первый слой проецирует матрицу 25x375 на 30x375, используя полностью связанный слой.Они делают это, применяя полностью связанный слой размером 30 к каждому столбцу.Я пытаюсь реализовать сеть в Matlab, и проблема в том, что Matlab не поддерживает эту полностью подключенную проекцию слоя.Однако я прочитал, что для каждого полностью связанного слоя существует сверточный слой, который имеет эквивалентную прямую функцию.

Как бы выглядел этот сверточный слой?

1 Ответ

0 голосов
/ 31 мая 2018

Вы можете достичь этого, используя 2D convolution.

  • Размер kernel должен быть (25, 1), поэтому он станет полностью связным слоем.
  • Для применения в каждом столбце необходим шаг(25, 1).
  • Выходной канал должен быть 30

Код:

X = tf.random_normal([25, 375])
conv = tf.transpose(tf.squeeze(tf.layers.conv2d(X[tf.newaxis, ..., tf.newaxis],
           filters=30,kernel_size=(25,1), strides=(25,1),padding='SAME')), [1,0])

print(conv.get_shape().as_list())

Выход:

[30, 375]
...