Написание собственного сверточного слоя в керасе с нуля - PullRequest
0 голосов
/ 08 мая 2019

Я бы хотел создать свой собственный слой в Керасе. Чтобы быть более точным, я хотел бы создать простой слой свертки, используя только библиотеку NumPy (без части TensorFlow). У меня есть несколько причин для этого - во-первых, для изучения чего-то нового, а во-вторых, у меня есть идея, как изменить этот слой, поэтому я должен написать его с нуля. Чтобы упростить задачу, мы можем предположить, что мне нужен только сверточный слой с размером ядра 3x3 и значением по умолчанию для других параметров.

Я знаю, что должен опираться на: https://keras.io/layers/writing-your-own-keras-layers/

В разделе def build(self, input_shape): я должен добавить веса. Сверточному слою требуется filters кратная матрица ядра размером 3х3.

В разделе def call(self, x): я могу использовать эти веса. Но у меня есть некоторые проблемы с этим.

Проблемы:

  1. Мне нужно получить что-то вроде скольжения по входу - типичная задача сверточного слоя (перемещение матрицы 3x3 по изображению). Но я не могу этого сделать, потому что x в def call(self, x): имеет ? или None в первом значении в shape. Я знаю, что это batch_size, но из-за этого я не могу использовать цикл для этого тензора. Так как же мне получить все данные (числа) из x, чтобы выполнить некоторые операции с их использованием?

  2. Может быть, у вас есть несколько общих советов, как я могу создать свой собственный сверточный слой с нуля в Керасе?

Для меня проблема не в том, чтобы написать «Сверточный слой» в виде кучи (есть материалы по этому поводу, например: https://github.com/Eyyub/numpy-convnet), а в том, чтобы пометить его с Keras без использования TensorFlow backend.

...